lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20251130110640.21eadec5@pumpkin>
Date: Sun, 30 Nov 2025 11:06:40 +0000
From: david laight <david.laight@...box.com>
To: Thorsten Blum <thorsten.blum@...ux.dev>
Cc: Chris Mason <clm@...com>, David Sterba <dsterba@...e.com>,
 linux-btrfs@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] btrfs: Replace memcpy + NUL termination in
 _btrfs_printk

On Sun, 30 Nov 2025 01:55:17 +0100
Thorsten Blum <thorsten.blum@...ux.dev> wrote:

> Use strscpy() to copy the NUL-terminated source string 'fmt' to the
> destination buffer 'lvl' instead of using memcpy() followed by a manual
> NUL termination.  No functional changes.

Why?
The code has just got the length of part of the format string, it wants
a copy of it with a '\0' terminator.
So memcpy() is correct and strscpy() just expensive.
The code is actually strange (and strangely written), but 'size' is always 2.

One might question why btrfs has to invent its own 'printk' scheme...

But PRINTK_MAX_SINGLE_HEADER_LEN is only used here - so take out the 'MAX_'
and use it inside printk_skip_level'.
Then here use the constant PRINTK_SINGLE_HEADER_LEN instead of 'size'.
Since lvl[] is initialised it will all be zero, so after the
mempy(lvl, fmt, 2) (which will be inlined) there is no need to the
lvl[2] = 0 at all.

	David

> 
> Signed-off-by: Thorsten Blum <thorsten.blum@...ux.dev>
> ---
>  fs/btrfs/messages.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/btrfs/messages.c b/fs/btrfs/messages.c
> index a0cf8effe008..083e228e6d6c 100644
> --- a/fs/btrfs/messages.c
> +++ b/fs/btrfs/messages.c
> @@ -1,5 +1,6 @@
>  // SPDX-License-Identifier: GPL-2.0
>  
> +#include <linux/string.h>
>  #include "fs.h"
>  #include "messages.h"
>  #include "discard.h"
> @@ -229,8 +230,7 @@ void __cold _btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt,
>  		size_t size = printk_skip_level(fmt) - fmt;
>  
>  		if (kern_level >= '0' && kern_level <= '7') {
> -			memcpy(lvl, fmt,  size);
> -			lvl[size] = '\0';
> +			strscpy(lvl, fmt, size + 1);
>  			type = logtypes[kern_level - '0'];
>  			ratelimit = &printk_limits[kern_level - '0'];
>  		}


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ