Messages in this thread | | | Date | Thu, 30 Jan 2020 14:17:11 +0900 | From | Sergey Senozhatsky <> | Subject | Re: -Wfortify-source in kernel/printk/printk.c |
| |
On (20/01/29 19:16), Nathan Chancellor wrote: > Hi all, > > After commit 6d485ff455e ("Improve static checks for sprintf and > __builtin___sprintf_chk") in clang [1], the following warning appears > when CONFIG_PRINTK is disabled (e.g. allnoconfig): > > ../kernel/printk/printk.c:2416:10: warning: 'sprintf' will always > overflow; destination buffer has size 0, but format string expands > to at least 33 [-Wfortify-source] > len = sprintf(text, > ^ > 1 warning generated. > > Specifically referring to > https://elixir.bootlin.com/linux/v5.5/source/kernel/printk/printk.c#L2416.
Good catch.
> It isn't wrong, given that when CONFIG_PRINTK is disabled, text's length > is 0 (LOG_LINE_MAX and PREFIX_MAX are both zero). How should this > warning be dealt this? I am not familiar enough with the printk code to > say myself.
It's not wrong.
Unless I'm missing something completely obvious: with disabled printk() we don't have any functions that can append messages to the logbuf, hence we can't overflow it. So the error in question should never trigger.
- Normal printk() is void, so kernel cannot append messages; - dev_printk() is void, so drivers cannot append messages and dicts; - devkmsg_write() is void, so user space cannot write to logbuf.
So I think we should never trigger that overflow (assuming that I didn't miss something) message.
In any case feel free to submit a patch - switch it to snprintf().
-ss
| |