| From 0d9077748b867b4923c957e9536a086d6bab53a2 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 30 Jun 2025 16:32:34 +0200 |
| Subject: module: Restore the moduleparam prefix length check |
| |
| From: Petr Pavlu <petr.pavlu@suse.com> |
| |
| [ Upstream commit bdc877ba6b7ff1b6d2ebeff11e63da4a50a54854 ] |
| |
| The moduleparam code allows modules to provide their own definition of |
| MODULE_PARAM_PREFIX, instead of using the default KBUILD_MODNAME ".". |
| |
| Commit 730b69d22525 ("module: check kernel param length at compile time, |
| not runtime") added a check to ensure the prefix doesn't exceed |
| MODULE_NAME_LEN, as this is what param_sysfs_builtin() expects. |
| |
| Later, commit 58f86cc89c33 ("VERIFY_OCTAL_PERMISSIONS: stricter checking |
| for sysfs perms.") removed this check, but there is no indication this was |
| intentional. |
| |
| Since the check is still useful for param_sysfs_builtin() to function |
| properly, reintroduce it in __module_param_call(), but in a modernized form |
| using static_assert(). |
| |
| While here, clean up the __module_param_call() comments. In particular, |
| remove the comment "Default value instead of permissions?", which comes |
| from commit 9774a1f54f17 ("[PATCH] Compile-time check re world-writeable |
| module params"). This comment was related to the test variable |
| __param_perm_check_##name, which was removed in the previously mentioned |
| commit 58f86cc89c33. |
| |
| Fixes: 58f86cc89c33 ("VERIFY_OCTAL_PERMISSIONS: stricter checking for sysfs perms.") |
| Signed-off-by: Petr Pavlu <petr.pavlu@suse.com> |
| Reviewed-by: Daniel Gomez <da.gomez@samsung.com> |
| Link: https://lore.kernel.org/r/20250630143535.267745-4-petr.pavlu@suse.com |
| Signed-off-by: Daniel Gomez <da.gomez@samsung.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| include/linux/moduleparam.h | 5 ++--- |
| 1 file changed, 2 insertions(+), 3 deletions(-) |
| |
| diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h |
| index bfb85fd13e1f..110e9d09de24 100644 |
| --- a/include/linux/moduleparam.h |
| +++ b/include/linux/moduleparam.h |
| @@ -282,10 +282,9 @@ struct kparam_array |
| #define __moduleparam_const const |
| #endif |
| |
| -/* This is the fundamental function for registering boot/module |
| - parameters. */ |
| +/* This is the fundamental function for registering boot/module parameters. */ |
| #define __module_param_call(prefix, name, ops, arg, perm, level, flags) \ |
| - /* Default value instead of permissions? */ \ |
| + static_assert(sizeof(""prefix) - 1 <= MAX_PARAM_PREFIX_LEN); \ |
| static const char __param_str_##name[] = prefix #name; \ |
| static struct kernel_param __moduleparam_const __param_##name \ |
| __used __section("__param") \ |
| -- |
| 2.39.5 |
| |