LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Nick Desaulniers <nick.desaulniers@gmail.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Jason Wessel <jason.wessel@windriver.com>,
	Daniel Thompson <daniel.thompson@linaro.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Baolin Wang <baolin.wang@linaro.org>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	kgdb-bugreport@lists.sourceforge.net,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	ebiggers@google.com
Subject: Re: [PATCH] kdb: prefer strlcpy to strncpy
Date: Tue, 29 May 2018 19:01:35 -0700	[thread overview]
Message-ID: <CAH7mPvhQo5S5EbgvkteoL1xftLWjWBqkfoanG0dTLzaa=FtTgw@mail.gmail.com> (raw)
In-Reply-To: <CAK8P3a2=THd7YL6sB4=xXZShD=wOjk_taM1L-E5VPH77TiQK0w@mail.gmail.com>

On Tue, May 29, 2018 at 12:57 AM, Arnd Bergmann <arnd@arndb.de> wrote:
> On Tue, May 29, 2018 at 7:57 AM, Nick Desaulniers
> <nick.desaulniers@gmail.com> wrote:
>> Fixes stringop-truncation and stringop-overflow warnings from gcc-8.
>
> That patch description should really explain whether gcc is right or not. What's
> the worst thing that could happen here?
>
> I would also recommend citing the exact warning you got.
>
>> diff --git a/kernel/debug/kdb/kdb_io.c b/kernel/debug/kdb/kdb_io.c
>> index ed5d349..b5dfff1 100644
>> --- a/kernel/debug/kdb/kdb_io.c
>> +++ b/kernel/debug/kdb/kdb_io.c
>> @@ -443,7 +443,7 @@ static char *kdb_read(char *buffer, size_t bufsize)
>>  char *kdb_getstr(char *buffer, size_t bufsize, const char *prompt)
>>  {
>>         if (prompt && kdb_prompt_str != prompt)
>> -               strncpy(kdb_prompt_str, prompt, CMD_BUFLEN);
>> +               strlcpy(kdb_prompt_str, prompt, CMD_BUFLEN);
>>         kdb_printf(kdb_prompt_str);
>>         kdb_nextline = 1;       /* Prompt and input resets line number */
>>         return kdb_read(buffer, bufsize);
>> diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
>> index e405677..c30a0d8 100644
>> --- a/kernel/debug/kdb/kdb_main.c
>> +++ b/kernel/debug/kdb/kdb_main.c
>> @@ -1103,12 +1103,12 @@ static int handle_ctrl_cmd(char *cmd)
>>         case CTRL_P:
>>                 if (cmdptr != cmd_tail)
>>                         cmdptr = (cmdptr-1) % KDB_CMD_HISTORY_COUNT;
>> -               strncpy(cmd_cur, cmd_hist[cmdptr], CMD_BUFLEN);
>> +               strlcpy(cmd_cur, cmd_hist[cmdptr], CMD_BUFLEN);
>>                 return 1;
>>         case CTRL_N:
>>                 if (cmdptr != cmd_head)
>>                         cmdptr = (cmdptr+1) % KDB_CMD_HISTORY_COUNT;
>> -               strncpy(cmd_cur, cmd_hist[cmdptr], CMD_BUFLEN);
>> +               strlcpy(cmd_cur, cmd_hist[cmdptr], CMD_BUFLEN);
>>                 return 1;
>>         }
>>         return 0;
>
> Those three all look good.
>
>> diff --git a/kernel/debug/kdb/kdb_support.c b/kernel/debug/kdb/kdb_support.c
>> index 990b3cc..dcfbf8f 100644
>> --- a/kernel/debug/kdb/kdb_support.c
>> +++ b/kernel/debug/kdb/kdb_support.c
>> @@ -236,7 +236,7 @@ int kallsyms_symbol_next(char *prefix_name, int flag)
>>
>>         while ((name = kdb_walk_kallsyms(&pos))) {
>>                 if (strncmp(name, prefix_name, prefix_len) == 0) {
>> -                       strncpy(prefix_name, name, strlen(name)+1);
>> +                       strlcpy(prefix_name, name, prefix_len);
>>                         return 1;
>>                 }
>
> I don't know what this does, but you are changing the behavior: the previous
> 'strlen(name)+1' argument was the size of the source string (which makes
> the strncpy() behave the same as a plain strcpy()), the new one means
> we only copy at most as many bytes as the previous length of the destination
> string.
>
> Is that intended? If yes, better explain it in the patch description.
>
>         Arnd

Eric points out that this will leak kernel memory if size is less than
sizeof src.

  reply	other threads:[~2018-05-30  2:01 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-29  5:57 Nick Desaulniers
2018-05-29  7:57 ` Arnd Bergmann
2018-05-30  2:01   ` Nick Desaulniers [this message]
2018-05-30 14:34     ` Daniel Thompson
2018-05-30 20:47       ` Geert Uytterhoeven
2018-05-31  8:24         ` Daniel Thompson

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='CAH7mPvhQo5S5EbgvkteoL1xftLWjWBqkfoanG0dTLzaa=FtTgw@mail.gmail.com' \
    --to=nick.desaulniers@gmail.com \
    --cc=arnd@arndb.de \
    --cc=baolin.wang@linaro.org \
    --cc=daniel.thompson@linaro.org \
    --cc=ebiederm@xmission.com \
    --cc=ebiggers@google.com \
    --cc=jason.wessel@windriver.com \
    --cc=kgdb-bugreport@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rdunlap@infradead.org \
    --subject='Re: [PATCH] kdb: prefer strlcpy to strncpy' \
    /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

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).