OSDN Git Service

btrfs: sysfs: Use scnprintf() instead of snprintf()
authorTakashi Iwai <tiwai@suse.de>
Sun, 22 Mar 2020 09:09:11 +0000 (10:09 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Mar 2020 17:14:47 +0000 (18:14 +0100)
commitabdd9feb45ed7e9cc55b60a58deba9ca78d46352
tree481a78217c792a93aa330b95202cefa24d7eb807
parent39dba8739c4e360d7d1b27119c728791e68b0448
btrfs: sysfs: Use scnprintf() instead of snprintf()

snprintf() is a hard-to-use function, and it's especially difficult to
use it properly for concatenating substrings in a buffer with a limited
size.  Since snprintf() returns the would-be-output size, not the actual
size, the subsequent use of snprintf() may point to the incorrect
position easily.  Also, returning the value from snprintf() directly to
sysfs show function would pass a bogus value that is higher than the
actually truncated string.

That said, although the current code doesn't actually overflow the
buffer with PAGE_SIZE, it's a usage that shouldn't be done.  Or it's
worse; this gives a wrong confidence as if it were doing safe
operations.

This patch replaces such snprintf() calls with a safer version,
scnprintf().  It returns the actual output size, hence it's more
intuitive and the code does what's expected.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/sysfs.c