diff mbox series

[v2] md : Replace snprintf with scnprintf

Message ID 1661280664-10588-1-git-send-email-ssengar@linux.microsoft.com (mailing list archive)
State New, archived
Headers show
Series [v2] md : Replace snprintf with scnprintf | expand

Commit Message

Saurabh Singh Sengar Aug. 23, 2022, 6:51 p.m. UTC
Current code produces a warning as shown below when total characters
in the constituent block device names plus the slashes exceeds 200.
snprintf() returns the number of characters generated from the given
input, which could cause the expression “200 – len” to wrap around
to a large positive number. Fix this by using scnprintf() instead,
which returns the actual number of characters written into the buffer.

[ 1513.267938] ------------[ cut here ]------------
[ 1513.267943] WARNING: CPU: 15 PID: 37247 at <snip>/lib/vsprintf.c:2509 vsnprintf+0x2c8/0x510
[ 1513.267944] Modules linked in:  <snip>
[ 1513.267969] CPU: 15 PID: 37247 Comm: mdadm Not tainted 5.4.0-1085-azure #90~18.04.1-Ubuntu
[ 1513.267969] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v4.1 05/09/2022
[ 1513.267971] RIP: 0010:vsnprintf+0x2c8/0x510
<-snip->
[ 1513.267982] Call Trace:
[ 1513.267986]  snprintf+0x45/0x70
[ 1513.267990]  ? disk_name+0x71/0xa0
[ 1513.267993]  dump_zones+0x114/0x240 [raid0]
[ 1513.267996]  ? _cond_resched+0x19/0x40
[ 1513.267998]  raid0_run+0x19e/0x270 [raid0]
[ 1513.268000]  md_run+0x5e0/0xc50
[ 1513.268003]  ? security_capable+0x3f/0x60
[ 1513.268005]  do_md_run+0x19/0x110
[ 1513.268006]  md_ioctl+0x195e/0x1f90
[ 1513.268007]  blkdev_ioctl+0x91f/0x9f0
[ 1513.268010]  block_ioctl+0x3d/0x50
[ 1513.268012]  do_vfs_ioctl+0xa9/0x640
[ 1513.268014]  ? __fput+0x162/0x260
[ 1513.268016]  ksys_ioctl+0x75/0x80
[ 1513.268017]  __x64_sys_ioctl+0x1a/0x20
[ 1513.268019]  do_syscall_64+0x5e/0x200
[ 1513.268021]  entry_SYSCALL_64_after_hwframe+0x44/0xa9

Fixes: 766038846e875 ("md/raid0: replace printk() with pr_*()")
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Acked-by: Guoqing Jiang <guoqing.jiang@linux.dev>
Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com>
---
V2 :
	- Rebase

 drivers/md/raid0.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Saurabh Singh Sengar Sept. 19, 2022, 4:47 p.m. UTC | #1
Is this queued  for 6.0 ?

> -----Original Message-----
> From: Saurabh Sengar <ssengar@linux.microsoft.com>
> Sent: Wednesday, August 24, 2022 12:21 AM
> To: song@kernel.org; shli@fb.com; neilb@suse.com; linux-
> raid@vger.kernel.org; linux-kernel@vger.kernel.org; Saurabh Singh Sengar
> <ssengar@microsoft.com>; Michael Kelley (LINUX)
> <mikelley@microsoft.com>; guoqing.jiang@linux.dev
> Subject: [PATCH v2] md : Replace snprintf with scnprintf
> 
> Current code produces a warning as shown below when total characters in
> the constituent block device names plus the slashes exceeds 200.
> snprintf() returns the number of characters generated from the given input,
> which could cause the expression “200 – len” to wrap around to a large
> positive number. Fix this by using scnprintf() instead, which returns the
> actual number of characters written into the buffer.
> 
> [ 1513.267938] ------------[ cut here ]------------ [ 1513.267943] WARNING:
> CPU: 15 PID: 37247 at <snip>/lib/vsprintf.c:2509 vsnprintf+0x2c8/0x510 [
> 1513.267944] Modules linked in:  <snip> [ 1513.267969] CPU: 15 PID: 37247
> Comm: mdadm Not tainted 5.4.0-1085-azure #90~18.04.1-Ubuntu [
> 1513.267969] Hardware name: Microsoft Corporation Virtual Machine/Virtual
> Machine, BIOS Hyper-V UEFI Release v4.1 05/09/2022 [ 1513.267971] RIP:
> 0010:vsnprintf+0x2c8/0x510 <-snip-> [ 1513.267982] Call Trace:
> [ 1513.267986]  snprintf+0x45/0x70
> [ 1513.267990]  ? disk_name+0x71/0xa0
> [ 1513.267993]  dump_zones+0x114/0x240 [raid0] [ 1513.267996]  ?
> _cond_resched+0x19/0x40 [ 1513.267998]  raid0_run+0x19e/0x270 [raid0] [
> 1513.268000]  md_run+0x5e0/0xc50 [ 1513.268003]  ?
> security_capable+0x3f/0x60 [ 1513.268005]  do_md_run+0x19/0x110 [
> 1513.268006]  md_ioctl+0x195e/0x1f90 [ 1513.268007]
> blkdev_ioctl+0x91f/0x9f0 [ 1513.268010]  block_ioctl+0x3d/0x50 [
> 1513.268012]  do_vfs_ioctl+0xa9/0x640 [ 1513.268014]  ? __fput+0x162/0x260
> [ 1513.268016]  ksys_ioctl+0x75/0x80 [ 1513.268017]
> __x64_sys_ioctl+0x1a/0x20 [ 1513.268019]  do_syscall_64+0x5e/0x200 [
> 1513.268021]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
> 
> Fixes: 766038846e875 ("md/raid0: replace printk() with pr_*()")
> Reviewed-by: Michael Kelley <mikelley@microsoft.com>
> Acked-by: Guoqing Jiang <guoqing.jiang@linux.dev>
> Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com>
> ---
> V2 :
> 	- Rebase
> 
>  drivers/md/raid0.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index 78addfe..857c493
> 100644
> --- a/drivers/md/raid0.c
> +++ b/drivers/md/raid0.c
> @@ -47,7 +47,7 @@ static void dump_zones(struct mddev *mddev)
>  		int len = 0;
> 
>  		for (k = 0; k < conf->strip_zone[j].nb_dev; k++)
> -			len += snprintf(line+len, 200-len, "%s%pg", k?"/":"",
> +			len += scnprintf(line+len, 200-len, "%s%pg", k?"/":"",
>  				conf->devlist[j * raid_disks + k]->bdev);
>  		pr_debug("md: zone%d=[%s]\n", j, line);
> 
> --
> 1.8.3.1
Song Liu Sept. 19, 2022, 6:09 p.m. UTC | #2
On Mon, Sep 19, 2022 at 9:47 AM Saurabh Singh Sengar
<ssengar@microsoft.com> wrote:
>
> Is this queued  for 6.0 ?

This is queued for 6.1.

Thanks,
Song

>
> > -----Original Message-----
> > From: Saurabh Sengar <ssengar@linux.microsoft.com>
> > Sent: Wednesday, August 24, 2022 12:21 AM
> > To: song@kernel.org; shli@fb.com; neilb@suse.com; linux-
> > raid@vger.kernel.org; linux-kernel@vger.kernel.org; Saurabh Singh Sengar
> > <ssengar@microsoft.com>; Michael Kelley (LINUX)
> > <mikelley@microsoft.com>; guoqing.jiang@linux.dev
> > Subject: [PATCH v2] md : Replace snprintf with scnprintf
> >
> > Current code produces a warning as shown below when total characters in
> > the constituent block device names plus the slashes exceeds 200.
> > snprintf() returns the number of characters generated from the given input,
> > which could cause the expression “200 – len” to wrap around to a large
> > positive number. Fix this by using scnprintf() instead, which returns the
> > actual number of characters written into the buffer.
> >
> > [ 1513.267938] ------------[ cut here ]------------ [ 1513.267943] WARNING:
> > CPU: 15 PID: 37247 at <snip>/lib/vsprintf.c:2509 vsnprintf+0x2c8/0x510 [
> > 1513.267944] Modules linked in:  <snip> [ 1513.267969] CPU: 15 PID: 37247
> > Comm: mdadm Not tainted 5.4.0-1085-azure #90~18.04.1-Ubuntu [
> > 1513.267969] Hardware name: Microsoft Corporation Virtual Machine/Virtual
> > Machine, BIOS Hyper-V UEFI Release v4.1 05/09/2022 [ 1513.267971] RIP:
> > 0010:vsnprintf+0x2c8/0x510 <-snip-> [ 1513.267982] Call Trace:
> > [ 1513.267986]  snprintf+0x45/0x70
> > [ 1513.267990]  ? disk_name+0x71/0xa0
> > [ 1513.267993]  dump_zones+0x114/0x240 [raid0] [ 1513.267996]  ?
> > _cond_resched+0x19/0x40 [ 1513.267998]  raid0_run+0x19e/0x270 [raid0] [
> > 1513.268000]  md_run+0x5e0/0xc50 [ 1513.268003]  ?
> > security_capable+0x3f/0x60 [ 1513.268005]  do_md_run+0x19/0x110 [
> > 1513.268006]  md_ioctl+0x195e/0x1f90 [ 1513.268007]
> > blkdev_ioctl+0x91f/0x9f0 [ 1513.268010]  block_ioctl+0x3d/0x50 [
> > 1513.268012]  do_vfs_ioctl+0xa9/0x640 [ 1513.268014]  ? __fput+0x162/0x260
> > [ 1513.268016]  ksys_ioctl+0x75/0x80 [ 1513.268017]
> > __x64_sys_ioctl+0x1a/0x20 [ 1513.268019]  do_syscall_64+0x5e/0x200 [
> > 1513.268021]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
> >
> > Fixes: 766038846e875 ("md/raid0: replace printk() with pr_*()")
> > Reviewed-by: Michael Kelley <mikelley@microsoft.com>
> > Acked-by: Guoqing Jiang <guoqing.jiang@linux.dev>
> > Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com>
> > ---
> > V2 :
> >       - Rebase
> >
> >  drivers/md/raid0.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index 78addfe..857c493
> > 100644
> > --- a/drivers/md/raid0.c
> > +++ b/drivers/md/raid0.c
> > @@ -47,7 +47,7 @@ static void dump_zones(struct mddev *mddev)
> >               int len = 0;
> >
> >               for (k = 0; k < conf->strip_zone[j].nb_dev; k++)
> > -                     len += snprintf(line+len, 200-len, "%s%pg", k?"/":"",
> > +                     len += scnprintf(line+len, 200-len, "%s%pg", k?"/":"",
> >                               conf->devlist[j * raid_disks + k]->bdev);
> >               pr_debug("md: zone%d=[%s]\n", j, line);
> >
> > --
> > 1.8.3.1
>
diff mbox series

Patch

diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index 78addfe..857c493 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -47,7 +47,7 @@  static void dump_zones(struct mddev *mddev)
 		int len = 0;
 
 		for (k = 0; k < conf->strip_zone[j].nb_dev; k++)
-			len += snprintf(line+len, 200-len, "%s%pg", k?"/":"",
+			len += scnprintf(line+len, 200-len, "%s%pg", k?"/":"",
 				conf->devlist[j * raid_disks + k]->bdev);
 		pr_debug("md: zone%d=[%s]\n", j, line);