• Xiaoming Ni's avatar
    proc_sysctl: fix oops caused by incorrect command parameters · 697edcb0
    Xiaoming Ni authored
    The process_sysctl_arg() does not check whether val is empty before
    invoking strlen(val).  If the command line parameter () is incorrectly
    configured and val is empty, oops is triggered.
    
    For example:
      "hung_task_panic=1" is incorrectly written as "hung_task_panic", oops is
      triggered. The call stack is as follows:
        Kernel command line: .... hung_task_panic
        ......
        Call trace:
        __pi_strlen+0x10/0x98
        parse_args+0x278/0x344
        do_sysctl_args+0x8c/0xfc
        kernel_init+0x5c/0xf4
        ret_from_fork+0x10/0x30
    
    To fix it, check whether "val" is empty when "phram" is a sysctl field.
    Error codes are returned in the failure branch, and error logs are
    generated by parse_args().
    
    Link: https://lkml.kernel.org/r/20210118133029.28580-1-nixiaoming@huawei.com
    Fixes: 3db978d4 ("kernel/sysctl: support setting sysctl parameters from kernel command line")
    Signed-off-by: default avatarXiaoming Ni <nixiaoming@huawei.com>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Luis Chamberlain <mcgrof@kernel.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Iurii Zaikin <yzaikin@google.com>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Heiner Kallweit <hkallweit1@gmail.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: <stable@vger.kernel.org>	[5.8+]
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    697edcb0
proc_sysctl.c 45.4 KB