* [PATCH 00/11] address remaining stringop-truncation warnings
@ 2024-03-28 14:04 Arnd Bergmann
2024-03-28 14:04 ` [PATCH 02/11] scsi: devinfo: rework scsi_strcpy_devinfo() Arnd Bergmann
0 siblings, 1 reply; 5+ messages in thread
From: Arnd Bergmann @ 2024-03-28 14:04 UTC (permalink / raw)
To: linux-kernel
Cc: Arnd Bergmann, Jens Axboe, Robert Moore, Rafael J. Wysocki,
Len Brown, James E.J. Bottomley, Martin K. Petersen, Viresh Kumar,
Johan Hovold, Alex Elder, Greg Kroah-Hartman, Florian Fainelli,
Broadcom internal kernel review list, Mike Marshall,
Martin Brandenburg, Steven Rostedt, Masami Hiramatsu,
Mathieu Desnoyers, Andrew Morton, Masahiro Yamada,
Nathan Chancellor, Nicolas Schier, Kees Cook, Alexey Starikovskiy,
linux-ntfs-dev, linux-block, linux-acpi, acpica-devel, linux-scsi,
greybus-dev, linux-staging, linux-rpi-kernel, linux-arm-kernel,
devel, linux-trace-kernel, linux-kbuild
From: Arnd Bergmann <arnd@arndb.de>
We are close to being able to turn on -Wstringop-truncation
unconditionally instead of only at the 'make W=1' level, these ten
warnings are all that I saw in randconfig testing across compiler versions
on arm, arm64 and x86.
The final patch is only there for reference at the moment, I hope
we can merge the other ones through the subsystem trees first,
as there are no dependencies between them.
Arnd
Arnd Bergmann (11):
staging: vc04_services: changen strncpy() to strscpy_pad()
scsi: devinfo: rework scsi_strcpy_devinfo()
staging: replace weird strncpy() with memcpy()
orangefs: convert strncpy() to strscpy()
test_hexdump: avoid string truncation warning
acpi: avoid warning for truncated string copy
block/partitions/ldm: convert strncpy() to strscpy()
blktrace: convert strncpy() to strscpy_pad()
staging: rtl8723bs: convert strncpy to strscpy
staging: greybus: change strncpy() to strscpy()
kbuild: enable -Wstringop-truncation globally
block/partitions/ldm.c | 6 ++--
drivers/acpi/acpica/tbfind.c | 19 +++++------
drivers/scsi/scsi_devinfo.c | 30 +++++++++++------
drivers/staging/greybus/fw-management.c | 4 +--
.../staging/rtl8723bs/os_dep/ioctl_cfg80211.c | 5 ++-
drivers/staging/rts5208/rtsx_scsi.c | 2 +-
.../vc04_services/vchiq-mmal/mmal-vchiq.c | 4 +--
fs/orangefs/dcache.c | 4 +--
fs/orangefs/namei.c | 33 +++++++++----------
fs/orangefs/super.c | 16 ++++-----
kernel/trace/blktrace.c | 3 +-
lib/test_hexdump.c | 2 +-
scripts/Makefile.extrawarn | 1 -
13 files changed, 64 insertions(+), 65 deletions(-)
--
2.39.2
Cc: "Richard Russon
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Robert Moore <robert.moore@intel.com>
Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: Viresh Kumar <vireshk@kernel.org>
Cc: Johan Hovold <johan@kernel.org>
Cc: Alex Elder <elder@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Florian Fainelli <florian.fainelli@broadcom.com>
Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
Cc: Mike Marshall <hubcap@omnibond.com>
Cc: Martin Brandenburg <martin@omnibond.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Nicolas Schier <nicolas@fjasle.eu>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Kees Cook <keescook@chromium.org>
Cc: Alexey Starikovskiy <astarikovskiy@suse.de>
Cc: linux-ntfs-dev@lists.sourceforge.net
Cc: linux-block@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-acpi@vger.kernel.org
Cc: acpica-devel@lists.linux.dev
Cc: linux-scsi@vger.kernel.org
Cc: greybus-dev@lists.linaro.org
Cc: linux-staging@lists.linux.dev
Cc: linux-rpi-kernel@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: devel@lists.orangefs.org
Cc: linux-trace-kernel@vger.kernel.org
Cc: linux-kbuild@vger.kernel.org
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 02/11] scsi: devinfo: rework scsi_strcpy_devinfo()
2024-03-28 14:04 [PATCH 00/11] address remaining stringop-truncation warnings Arnd Bergmann
@ 2024-03-28 14:04 ` Arnd Bergmann
2024-03-28 16:46 ` Bart Van Assche
2024-03-28 23:14 ` Justin Stitt
0 siblings, 2 replies; 5+ messages in thread
From: Arnd Bergmann @ 2024-03-28 14:04 UTC (permalink / raw)
To: linux-kernel, James E.J. Bottomley, Martin K. Petersen
Cc: Arnd Bergmann, Chris Down, Petr Mladek, Bart Van Assche,
linux-scsi
From: Arnd Bergmann <arnd@arndb.de>
scsi_strcpy_devinfo() appears to work as intended but its semantics are
so confusing that gcc warns about it when -Wstringop-truncation is enabled:
In function 'scsi_strcpy_devinfo',
inlined from 'scsi_dev_info_list_add_keyed' at drivers/scsi/scsi_devinfo.c:370:2:
drivers/scsi/scsi_devinfo.c:297:9: error: 'strncpy' specified bound 16 equals destination size [-Werror=stringop-truncation]
297 | strncpy(to, from, to_length);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Reorganize the function to completely separate the nul-terminated from
the space-padded/non-terminated case. The former is just strscpy_pad(),
while the latter does not have a standard function.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
drivers/scsi/scsi_devinfo.c | 30 ++++++++++++++++++++----------
1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index ba7237e83863..58726c15ebac 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -290,18 +290,28 @@ static struct scsi_dev_info_list_table *scsi_devinfo_lookup_by_key(int key)
static void scsi_strcpy_devinfo(char *name, char *to, size_t to_length,
char *from, int compatible)
{
- size_t from_length;
+ int ret;
- from_length = strlen(from);
- /* This zero-pads the destination */
- strncpy(to, from, to_length);
- if (from_length < to_length && !compatible) {
- /*
- * space pad the string if it is short.
- */
- memset(&to[from_length], ' ', to_length - from_length);
+ if (compatible) {
+ /* This zero-pads and nul-terminates the destination */
+ ret = strscpy_pad(to, from, to_length);
+ } else {
+ /* no nul-termination but space-padding for short strings */
+ size_t from_length = strlen(from);
+ ret = from_length;
+
+ if (from_length > to_length) {
+ from_length = to_length;
+ ret = -E2BIG;
+ }
+
+ memcpy(to, from, from_length);
+
+ if (from_length < to_length)
+ memset(&to[from_length], ' ', to_length - from_length);
}
- if (from_length > to_length)
+
+ if (ret < 0)
printk(KERN_WARNING "%s: %s string '%s' is too long\n",
__func__, name, from);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH 02/11] scsi: devinfo: rework scsi_strcpy_devinfo()
2024-03-28 14:04 ` [PATCH 02/11] scsi: devinfo: rework scsi_strcpy_devinfo() Arnd Bergmann
@ 2024-03-28 16:46 ` Bart Van Assche
2024-03-28 23:14 ` Justin Stitt
1 sibling, 0 replies; 5+ messages in thread
From: Bart Van Assche @ 2024-03-28 16:46 UTC (permalink / raw)
To: Arnd Bergmann, linux-kernel, James E.J. Bottomley,
Martin K. Petersen
Cc: Arnd Bergmann, Chris Down, Petr Mladek, linux-scsi
On 3/28/24 07:04, Arnd Bergmann wrote:
> diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
> index ba7237e83863..58726c15ebac 100644
> --- a/drivers/scsi/scsi_devinfo.c
> +++ b/drivers/scsi/scsi_devinfo.c
> @@ -290,18 +290,28 @@ static struct scsi_dev_info_list_table *scsi_devinfo_lookup_by_key(int key)
> static void scsi_strcpy_devinfo(char *name, char *to, size_t to_length,
> char *from, int compatible)
> {
> - size_t from_length;
> + int ret;
>
> - from_length = strlen(from);
> - /* This zero-pads the destination */
> - strncpy(to, from, to_length);
> - if (from_length < to_length && !compatible) {
> - /*
> - * space pad the string if it is short.
> - */
> - memset(&to[from_length], ' ', to_length - from_length);
> + if (compatible) {
> + /* This zero-pads and nul-terminates the destination */
> + ret = strscpy_pad(to, from, to_length);
> + } else {
> + /* no nul-termination but space-padding for short strings */
> + size_t from_length = strlen(from);
> + ret = from_length;
> +
> + if (from_length > to_length) {
> + from_length = to_length;
> + ret = -E2BIG;
> + }
> +
> + memcpy(to, from, from_length);
> +
> + if (from_length < to_length)
> + memset(&to[from_length], ' ', to_length - from_length);
> }
> - if (from_length > to_length)
> +
> + if (ret < 0)
> printk(KERN_WARNING "%s: %s string '%s' is too long\n",
> __func__, name, from);
> }
Please eliminate the variable 'ret'. I think that will improve
readability of the new code.
Thanks,
Bart.
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 02/11] scsi: devinfo: rework scsi_strcpy_devinfo()
2024-03-28 14:04 ` [PATCH 02/11] scsi: devinfo: rework scsi_strcpy_devinfo() Arnd Bergmann
2024-03-28 16:46 ` Bart Van Assche
@ 2024-03-28 23:14 ` Justin Stitt
2024-03-28 23:18 ` Arnd Bergmann
1 sibling, 1 reply; 5+ messages in thread
From: Justin Stitt @ 2024-03-28 23:14 UTC (permalink / raw)
To: Arnd Bergmann
Cc: linux-kernel, James E.J. Bottomley, Martin K. Petersen,
Arnd Bergmann, Chris Down, Petr Mladek, Bart Van Assche,
linux-scsi
Hi,
On Thu, Mar 28, 2024 at 03:04:46PM +0100, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
>
> scsi_strcpy_devinfo() appears to work as intended but its semantics are
> so confusing that gcc warns about it when -Wstringop-truncation is enabled:
>
> In function 'scsi_strcpy_devinfo',
> inlined from 'scsi_dev_info_list_add_keyed' at drivers/scsi/scsi_devinfo.c:370:2:
> drivers/scsi/scsi_devinfo.c:297:9: error: 'strncpy' specified bound 16 equals destination size [-Werror=stringop-truncation]
> 297 | strncpy(to, from, to_length);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Reorganize the function to completely separate the nul-terminated from
> the space-padded/non-terminated case. The former is just strscpy_pad(),
> while the latter does not have a standard function.
>
I did the same in a patch sent earlier (few weeks ago):
https://lore.kernel.org/all/20240305-strncpy-drivers-scsi-mpi3mr-mpi3mr_fw-c-v3-5-5b78a13ff984@google.com/
Maybe reviewers can chime in on which version is preferred and go from
there.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> drivers/scsi/scsi_devinfo.c | 30 ++++++++++++++++++++----------
> 1 file changed, 20 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
> index ba7237e83863..58726c15ebac 100644
> --- a/drivers/scsi/scsi_devinfo.c
> +++ b/drivers/scsi/scsi_devinfo.c
> @@ -290,18 +290,28 @@ static struct scsi_dev_info_list_table *scsi_devinfo_lookup_by_key(int key)
> static void scsi_strcpy_devinfo(char *name, char *to, size_t to_length,
> char *from, int compatible)
> {
> - size_t from_length;
> + int ret;
>
> - from_length = strlen(from);
> - /* This zero-pads the destination */
> - strncpy(to, from, to_length);
> - if (from_length < to_length && !compatible) {
> - /*
> - * space pad the string if it is short.
> - */
> - memset(&to[from_length], ' ', to_length - from_length);
> + if (compatible) {
> + /* This zero-pads and nul-terminates the destination */
> + ret = strscpy_pad(to, from, to_length);
> + } else {
> + /* no nul-termination but space-padding for short strings */
> + size_t from_length = strlen(from);
> + ret = from_length;
> +
> + if (from_length > to_length) {
> + from_length = to_length;
> + ret = -E2BIG;
> + }
> +
> + memcpy(to, from, from_length);
> +
> + if (from_length < to_length)
> + memset(&to[from_length], ' ', to_length - from_length);
> }
> - if (from_length > to_length)
> +
> + if (ret < 0)
> printk(KERN_WARNING "%s: %s string '%s' is too long\n",
> __func__, name, from);
> }
> --
> 2.39.2
>
Thanks
Justin
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 02/11] scsi: devinfo: rework scsi_strcpy_devinfo()
2024-03-28 23:14 ` Justin Stitt
@ 2024-03-28 23:18 ` Arnd Bergmann
0 siblings, 0 replies; 5+ messages in thread
From: Arnd Bergmann @ 2024-03-28 23:18 UTC (permalink / raw)
To: Justin Stitt, Arnd Bergmann
Cc: linux-kernel, James E.J. Bottomley, Martin K. Petersen,
Chris Down, Petr Mladek, Bart Van Assche, linux-scsi
On Fri, Mar 29, 2024, at 00:14, Justin Stitt wrote:
>
> On Thu, Mar 28, 2024 at 03:04:46PM +0100, Arnd Bergmann wrote:
>> From: Arnd Bergmann <arnd@arndb.de>
>>
>> scsi_strcpy_devinfo() appears to work as intended but its semantics are
>> so confusing that gcc warns about it when -Wstringop-truncation is enabled:
>>
>> In function 'scsi_strcpy_devinfo',
>> inlined from 'scsi_dev_info_list_add_keyed' at drivers/scsi/scsi_devinfo.c:370:2:
>> drivers/scsi/scsi_devinfo.c:297:9: error: 'strncpy' specified bound 16 equals destination size [-Werror=stringop-truncation]
>> 297 | strncpy(to, from, to_length);
>> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> Reorganize the function to completely separate the nul-terminated from
>> the space-padded/non-terminated case. The former is just strscpy_pad(),
>> while the latter does not have a standard function.
>>
>
> I did the same in a patch sent earlier (few weeks ago):
>
> https://lore.kernel.org/all/20240305-strncpy-drivers-scsi-mpi3mr-mpi3mr_fw-c-v3-5-5b78a13ff984@google.com/
>
> Maybe reviewers can chime in on which version is preferred and go from
> there.
I'm in favor of your version, it looks nicer and addresses the comment
that Bart had on mine.
Arnd
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-03-28 23:18 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-28 14:04 [PATCH 00/11] address remaining stringop-truncation warnings Arnd Bergmann
2024-03-28 14:04 ` [PATCH 02/11] scsi: devinfo: rework scsi_strcpy_devinfo() Arnd Bergmann
2024-03-28 16:46 ` Bart Van Assche
2024-03-28 23:14 ` Justin Stitt
2024-03-28 23:18 ` Arnd Bergmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox