linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  reply	other threads:[~2020-03-03 14:57 UTC|newest]

Thread overview: 7+ 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-03 14:42 ` [PATCH v2 1/2] modpost: rework and consolidate logging interface 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).