内核模块参数的字符串长度限制

时间:2014-03-20 13:37:05

标签: kernel linux-kernel

我在加载内核模块时传递一个字符串作为参数。 当字符串是> 1024个字符,modprobe导致错误:

FATAL: Error inserting mymodule (/lib/modules..): No space left on device

dmesg输出:

mystr: string parameter too long

模块参数是否限制为1024个字符串?

1 个答案:

答案 0 :(得分:2)

我认为不仅模块而且所有linux命令内核参数都限制为1024个字符。从linux source code开始,归档kernel/params.c

int param_set_charp(const char *val, const struct kernel_param *kp)
{
    if (strlen(val) > 1024) {
        pr_err("%s: string parameter too long\n", kp->name);
        return -ENOSPC;
    }

    maybe_kfree_parameter(*(char **)kp->arg);

    /* This is a hack.  We can't kmalloc in early boot, and we
     * don't need to; this mangled commandline is preserved. */
    if (slab_is_available()) {
        *(char **)kp->arg = kmalloc_parameter(strlen(val)+1);
        if (!*(char **)kp->arg)
            return -ENOMEM;
        strcpy(*(char **)kp->arg, val);
    } else
        *(const char **)kp->arg = val;

    return 0;
}

所以答案是,你不能传递大于1024个字符的参数。