From: Jessica Yu <jeyu@kernel.org>
To: Masahiro Yamada <masahiroy@kernel.org>
Cc: Matthias Maennich <maennich@google.com>,
Joe Perches <joe@perches.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 1/2] modpost: rework and consolidate logging interface
Date: Tue, 3 Mar 2020 15:57:36 +0100 [thread overview]
Message-ID: <20200303145736.GA16460@linux-8ccs> (raw)
In-Reply-To: <CAK7LNAQZAgobbTTTpLKNActYCYP7UdVgdE-Oz+pvvRxsxd_uaw@mail.gmail.com>
+++ Masahiro Yamada [03/03/20 23:42 +0900]:
>On Wed, Feb 26, 2020 at 11:26 PM Jessica Yu <jeyu@kernel.org> wrote:
>>
>> Rework modpost's logging interface by consolidating merror(), warn(),
>> and fatal() to use a single function, modpost_log(). Introduce different
>> logging levels (WARN, ERROR, FATAL) as well as a conditional warn
>> (warn_unless()). The conditional warn is useful in determining whether
>> to use merror() or warn() based on a condition. This reduces code
>> duplication overall.
>>
>> Signed-off-by: Jessica Yu <jeyu@kernel.org>
>> ---
>> v2:
>> - modpost_log: initialize level to ""
>> - remove parens () from case labels
>>
>> scripts/mod/modpost.c | 69 +++++++++++++++++++++++----------------------------
>> scripts/mod/modpost.h | 22 +++++++++++++---
>> 2 files changed, 50 insertions(+), 41 deletions(-)
>>
>> diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
>> index 7edfdb2f4497..3201a2ac5cc4 100644
>> --- a/scripts/mod/modpost.c
>> +++ b/scripts/mod/modpost.c
>> @@ -51,41 +51,37 @@ enum export {
>>
>> #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
>>
>> -#define PRINTF __attribute__ ((format (printf, 1, 2)))
>> +#define PRINTF __attribute__ ((format (printf, 2, 3)))
>>
>> -PRINTF void fatal(const char *fmt, ...)
>> +PRINTF void modpost_log(enum loglevel loglevel, const char *fmt, ...)
>> {
>> + char *level = "";
>
>
>You can add 'const'.
>
>
> const char *level = "";
>
>
>
>> va_list arglist;
>>
>> - fprintf(stderr, "FATAL: ");
>> -
>> - va_start(arglist, fmt);
>> - vfprintf(stderr, fmt, arglist);
>> - va_end(arglist);
>> -
>> - exit(1);
>> -}
>> -
>> -PRINTF void warn(const char *fmt, ...)
>> -{
>> - va_list arglist;
>> + switch(loglevel) {
>> + case LOG_WARN:
>> + level = "WARNING: ";
>> + break;
>> + case LOG_ERROR:
>> + level = "ERROR: ";
>> + break;
>> + case LOG_FATAL:
>> + level = "FATAL: ";
>> + break;
>> + default: /* invalid loglevel, ignore */
>> + break;
>> + }
>>
>> - fprintf(stderr, "WARNING: ");
>> + fprintf(stderr, level);
>
>
>
>If I apply this patch, I see this warning:
>
>scripts/mod/modpost.c: In function ‘modpost_log’:
>scripts/mod/modpost.c:77:2: warning: format not a string literal and
>no format arguments [-Wformat-security]
> fprintf(stderr, level);
> ^~~~~~~
>
>
>Please write like this:
>
>
> fprintf(stderr, "%s", level);
>
>
>
>
>Or, you can delete 'level', then write
>string literals directly in fprintf().
>
>
>switch(loglevel) {
>case LOG_WARN:
> fprintf(stderr, "WARNING: ");
> break;
>case LOG_ERROR:
> fprintf(stderr, "ERROR: ");
> break;
>case LOG_FATAL:
> fprintf(stderr, "FATAL: ");
> break;
>}
>
>
>
>
>> + fprintf(stderr, "modpost: ");
>>
>> va_start(arglist, fmt);
>> vfprintf(stderr, fmt, arglist);
>> va_end(arglist);
>> -}
>>
>
><snip>
>
>> diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h
>> index 64a82d2d85f6..631d07714f7a 100644
>> --- a/scripts/mod/modpost.h
>> +++ b/scripts/mod/modpost.h
>> @@ -198,6 +198,22 @@ void *grab_file(const char *filename, unsigned long *size);
>> char* get_next_line(unsigned long *pos, void *file, unsigned long size);
>> void release_file(void *file, unsigned long size);
>>
>> -void fatal(const char *fmt, ...);
>> -void warn(const char *fmt, ...);
>> -void merror(const char *fmt, ...);
>> +enum loglevel {
>> + LOG_WARN,
>> + LOG_ERROR,
>> + LOG_FATAL
>> +};
>> +
>> +void modpost_log(enum loglevel loglevel, const char *fmt, ...);
>> +
>> +#define warn(fmt, args...) modpost_log(LOG_WARN, fmt, ##args)
>> +#define merror(fmt, args...) modpost_log(LOG_ERROR, fmt, ##args)
>> +#define fatal(fmt, args...) modpost_log(LOG_FATAL, fmt, ##args)
>> +/* Warn unless condition is true, then use merror() */
>> +#define warn_unless(condition, fmt, args...) \
>> +do { \
>> + if (condition) \
>> + merror(fmt, ##args); \
>> + else \
>> + warn(fmt, ##args); \
>> +} while (0)
>
>
>Hmm, warn_unless() is not intuitive naming...
>
>You could use modpost_log() directly in C code,
>what do you think?
>
>
> modpost_log(allow_missing_ns_imports ? LOG_WARN : LOG_ERROR,
> "module %s uses symbol %s from namespace %s,
>but does not import it.\n",
> basename, exp->name, exp->namespace);
Yeah, I wasn't sure if I should expose modpost_log() and call it
directly, so I wrapped it in warn_unless(). But I think it's not a big
deal, so I'll just change it to a direct call. Thank you for the review!
Jessica
next prev parent reply other threads:[~2020-03-03 14:57 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-26 14:26 [PATCH v2 1/2] modpost: rework and consolidate logging interface Jessica Yu
2020-02-26 14:26 ` [PATCH v2 2/2] modpost: return error if module is missing ns imports and MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=n Jessica Yu
2020-03-03 15:21 ` Masahiro Yamada
2020-03-02 19:32 ` [PATCH v2 1/2] modpost: rework and consolidate logging interface kbuild test robot
2020-03-03 14:42 ` Masahiro Yamada
2020-03-03 14:57 ` Jessica Yu [this message]
2020-03-04 11:14 ` Matthias Maennich
2020-03-03 15:23 ` Masahiro Yamada
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200303145736.GA16460@linux-8ccs \
--to=jeyu@kernel.org \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maennich@google.com \
--cc=masahiroy@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.