You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
qubes-linux-kernel/patches.arch/kmsg-fix-parameter-limitations

55 lines
1.9 KiB

From: Jeff Mahoney <jeffm@suse.com>
Subject: kmsg: Fix parameter limitations
Patch-mainline: Whenever kmsg is upstream
The kmsg infrastructure, currently only employed on s/390, has limitations
with the parameters it can handle due to the way it assembles the
magic string for parsing with scripts/kmsg-doc.
cpp expects the result to be a valid expression and exits with an error
if it is not.
The netfilter ipvs code causes this error, though there are more examples:
error: pasting "_ARGS_" and "&" does not give a valid preprocessing token
This stems from an otherwise valid expression:
pr_info("Registered protocols (%s)\n", &protocols[2]);
It tries to concatenate _ARGS_ and &protocols[2] and fails.
This patch fixes the issue by stringifying the entire parameter list
and allowing kmsg-doc to unquote the resultant expression.
The dev_* expressions that evaluate to __KMSG_DEV are unaffected because
the insertion of the "dev, " between _ARGS_ and the parameter list ends
up creating a valid expression.
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
---
include/linux/printk.h | 2 +-
scripts/kmsg-doc | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -416,7 +416,7 @@ extern int hex_to_bin(char ch);
/* generate magic string for scripts/kmsg-doc to parse */
#define pr_printk_hash(level, format, ...) \
- __KMSG_PRINT(level _FMT_ format _ARGS_ ##__VA_ARGS__ _END_)
+ __KMSG_PRINT(level _FMT_ format _ARGS_ #__VA_ARGS__ _END_)
#elif defined(CONFIG_KMSG_IDS) && defined(KMSG_COMPONENT)
--- a/scripts/kmsg-doc
+++ b/scripts/kmsg-doc
@@ -307,7 +307,7 @@ sub process_cpp_file($$$$)
while (<FD>) {
chomp;
- if (/.*__KMSG_PRINT\(\s*(\S*)\s*_FMT_(.*)_ARGS_\s*(.*)?_END_\s*\)/o) {
+ if (/.*__KMSG_PRINT\(\s*(\S*)\s*_FMT_(.*)_ARGS_\s*"(.*)"\s*_END_\s*\)/o) {
if ($component ne "") {
add_kmsg_print($component, $1, $2, $3);
} else {