0

私は開発に不慣れで、securityfsファイルを作成し、カーネルセキュリティモジュールを介してそれに文字列を書き込むタスクが手元にあります。

次のコードを使用してdirとファイルを作成しました。

test_dir = securityfs_create_dir("test", NULL);

basc_output_file = securityfs_create_file("basc_output_file",S_IRUSR | S_IRGRP, test, NULL, &test_measurements_file_ops);

しかし、今では、そのファイルに文字列を書き込む方法の例やドキュメントを入手できませんでした。どんな助けでも大歓迎です。

4

1 に答える 1

2

あなたの質問はtest_measurements_file_opsを実装する方法についてです、私はあなたの参照のために以下のデモコードを提供することができます:

static const struct file_operations test_measurements_file_ops = {
    .write = test_write,
    .read  = test_read,
};

static ssize_t test_write(struct file *file, const char __user *buf,
                            size_t count, loff_t *ppos)
{
    char *data;
    int error;
    if (!count || count >= MAXIMUM_SIZE)
        return -ENOMEM;
    data = kzalloc(count + 1, GFP_NOFS);
    if (!data)
        return -ENOMEM;
    if (copy_from_user(data, buf, count)) {
        error = -EFAULT;
        goto out;
    }

    /* handling kaddr */

out:
    kfree(data);
    return error ? error : count;
}

static ssize_t test_read(struct file *file, char __user *buf, 
                            size_t count, loff_t *ppos)
{
    void *kaddr;
    loff_t pos = *ppos;
    loff_t len = /* strlen(kernel strings need to be copied) */;

    if (pos >= len || !count)
        return 0;
    len -= pos;
    if (count < len)
        len = count;

    /* handling */

    if (copy_to_user(buf, kaddr, len))
        return -EFAULT;
    *ppos += len;
    return len;
}
于 2013-03-15T06:21:59.307 に答える