[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1587383918-1870-4-git-send-email-yangtiezhu@loongson.cn>
Date: Mon, 20 Apr 2020 19:58:37 +0800
From: Tiezhu Yang <yangtiezhu@...ngson.cn>
To: Luis Chamberlain <mcgrof@...nel.org>,
Shuah Khan <shuah@...nel.org>,
Andrew Morton <akpm@...ux-foundation.org>,
Jessica Yu <jeyu@...nel.org>
Cc: linux-kselftest@...r.kernel.org, linux-kernel@...r.kernel.org,
Markus Elfring <Markus.Elfring@....de>,
Xuefeng Li <lixuefeng@...ngson.cn>
Subject: [RESEND v2 3/4] kmod: Return directly if module name is empty in request_module()
If module name is empty, it is better to return directly at the beginning
of request_module() without doing the needless call_modprobe() operation.
Call trace:
request_module()
|
|
__request_module()
|
|
call_modprobe()
|
|
call_usermodehelper_exec() -- retval = sub_info->retval;
|
|
call_usermodehelper_exec_work()
|
|
call_usermodehelper_exec_sync() -- sub_info->retval = ret;
|
| --> call_usermodehelper_exec_async() --> do_execve()
|
kernel_wait4(pid, (int __user *)&ret, 0, NULL);
sub_info->retval is 256 after call kernel_wait4(), the function
call_usermodehelper_exec() returns sub_info->retval which is 256,
then call_modprobe() and __request_module() returns 256.
Signed-off-by: Tiezhu Yang <yangtiezhu@...ngson.cn>
---
v2:
- update the commit message to explain the detailed reason
kernel/kmod.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/kernel/kmod.c b/kernel/kmod.c
index 3cd075c..5851444 100644
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -28,6 +28,8 @@
#include <trace/events/module.h>
+#define MODULE_NOT_FOUND 256
+
/*
* Assuming:
*
@@ -144,6 +146,9 @@ int __request_module(bool wait, const char *fmt, ...)
if (ret >= MODULE_NAME_LEN)
return -ENAMETOOLONG;
+ if (strlen(module_name) == 0)
+ return MODULE_NOT_FOUND;
+
ret = security_kernel_module_request(module_name);
if (ret)
return ret;
--
2.1.0
Powered by blists - more mailing lists