powerpc/cell: strncpy does not null terminate string
Subsystems (6)
PATCH 1/1 powerpc/cell: strncpy does not null terminate string
With sizeof(string) - 1 strncpy() will null terminate the string.
---
To test this:
#include <stdio.h>
#include <string.h>
char a[10];
char b[10];
int main()
{
const char* str = "0123456789012";
strncpy(a, str, sizeof(a));
strncpy(b, str, sizeof(b) - 1);
printf("String a was %s, b was %s\n", a, b);
return 0;
}Output:
String a was 0123456789012345678, b was 012345678
arch/powerpc/platforms/cell/celleb_setup.c +1 -1
@@ -80,7 +80,7 @@ static void celleb_show_cpuinfo(struct seq_file *m)static int __init celleb_machine_type_hack (char *ptr) { -strncpy (celleb_machine_type, ptr,sizeof (celleb_machine_type)); +strncpy (celleb_machine_type, ptr,sizeof (celleb_machine_type) -1 ); celleb_machine_type[sizeof (celleb_machine_type)-1 ] =0 ;return 0 ; }
strlcpy() will always null terminate the string.
---
Please use this one instead
arch/powerpc/platforms/cell/celleb_setup.c +1 -1
@@ -80,7 +80,7 @@ static void celleb_show_cpuinfo(struct seq_file *m)static int __init celleb_machine_type_hack (char *ptr) { -strncpy (celleb_machine_type, ptr,sizeof (celleb_machine_type)); +strlcpy (celleb_machine_type, ptr,sizeof (celleb_machine_type)); celleb_machine_type[sizeof (celleb_machine_type)-1 ] =0 ;return 0 ; }
arch/powerpc/platforms/cell/celleb_setup.c static void celleb_show_cpuinfo(struct seq_file *m) · line 85
Quoted 7 lines · Roel Kluin
static int
__initcelleb_machine_type_hack(char *ptr){arch/powerpc/platforms/cell/celleb_setup.c +1
-1-strncpy (celleb_machine_type, ptr,sizeof (celleb_machine_type)); +strlcpy (celleb_machine_type, ptr,sizeof (celleb_machine_type)); celleb_machine_type[sizeof (celleb_machine_type)-1 ] =0 ;return 0 ;
This still is pointless as long as you keep the explicit null-termination in the next line, the patch still doesn't change anything significant.
The file is maintained by Ishizaki Kou, if he would prefer to take a patch replacing the two lines with one, that's fine with me, otherwise I just wouldn't bother. You still only gain a few bytes of inittext, but that is discarded at boot time.
Arnd <><
Arnd-san, Roel-san,
Thanks for pointing us to the redundant cord portion.
Quoted 9 lines · Roel Kluin
arch/powerpc/platforms/cell/celleb_setup.c static void celleb_show_cpuinfo(struct seq_file *m) · line 85
Quoted 7 lines
static int
__initcelleb_machine_type_hack(char *ptr){arch/powerpc/platforms/cell/celleb_setup.c +1
-1-strncpy (celleb_machine_type, ptr,sizeof (celleb_machine_type)); +strlcpy (celleb_machine_type, ptr,sizeof (celleb_machine_type)); celleb_machine_type[sizeof (celleb_machine_type)-1 ] =0 ;return 0 ;
Quoted 7 lines
This still is pointless as long as you keep the explicit null-termination in the next line, the patch still doesn't change anything significant.
The file is maintained by Ishizaki Kou, if he would prefer to take a patch replacing the two lines with one, that's fine with me, otherwise I just wouldn't bother. You still only gain a few bytes of inittext, but that is discarded at boot time.
We prefer to take the patch which is replacing the two lines with one.
- strncpy(celleb_machine_type, ptr, sizeof(celleb_machine_type)); + strlcpy(celleb_machine_type, ptr, sizeof(celleb_machine_type)); - celleb_machine_type[sizeof(celleb_machine_type)-1] = 0;
Thanks,
Ken Kawakami
Quoted 1 line · Roel Kluin
With
sizeof(string) - 1strncpy()will null terminate the string.
No, it won't. See the 'Warning' part of the strncpy man page.
Quoted 20 lines
Signed-off-by Roel Kluin <[email protected]>---
To test this:#include <
stdio.h>
#include <string.h>char a[10];
char b[10];int
main(){ const char* str = "0123456789012"; strncpy(a, str, sizeof(a)); strncpy(b, str, sizeof(b) - 1); printf("String a was %s, b was %s\n", a, b); return 0; }
Quoted 2 lines
Output:
String a was 0123456789012345678, b was 012345678
This is an invalid test case, it relies on b being zero-filled by the compiler, which is not true for programs in general.
arch/powerpc/platforms/cell/celleb_setup.c static void celleb_show_cpuinfo(struct seq_file *m) · line 86
Quoted 13 lines
arch/powerpc/platforms/cell/celleb_setup.c +1
-1@@ -80,7 +80,7 @@ static void celleb_show_cpuinfo(struct seq_file *m)static int __init celleb_machine_type_hack (char *ptr) { -strncpy (celleb_machine_type, ptr,sizeof (celleb_machine_type)); +strncpy (celleb_machine_type, ptr,sizeof (celleb_machine_type) -1 ); celleb_machine_type[sizeof (celleb_machine_type)-1 ] =0 ;return 0 ; }
See the line after the strncpy. This is still required for proper zero-termination.
Your patch tries to address a problem that doesn't exist, and does not have any effect at all after celleb_machine_type_hack has completed.
Arnd <><
Quoted 5 lines
Quoted 1 line
With
sizeof(string) - 1strncpy()will null terminate the string.No, it won't.
See the line after the strncpy. This is still required for proper zero-termination.
You're right, sorry for the noise.
Roel
PATCH 1/1 dm: strncpy does not null terminate string
In reply to Roel Kluinstrlcpy() will always null terminate the string.
---
drivers/md/dm-ioctl.c +2 -2
@@ -634,9 +634,9 @@ static struct mapped_device *find_device(struct dm_ioctl *param)* Sneakily write in both the name and the uuid * while we have the cell. */ -strncpy (param->name, hc->name,sizeof (param->name)); +strlcpy (param->name, hc->name,sizeof (param->name));if (hc->uuid) -strncpy (param->uuid, hc->uuid,sizeof (param->uuid)-1 ); +strlcpy (param->uuid, hc->uuid,sizeof (param->uuid));else param->uuid[0 ] ='\0' ;
Alasdair G Kergon
maintainerRe: [PATCH] dm: strncpy does not null terminate string
Quoted 1 line · Roel Kluin
strlcpy()will always null terminate the string.
The code is already supposed to ensure correct NULL-termination.
Did you find a bug? If so, please give details of the code path concerned in the patch header and I'll need to deal with it promptly and submit it to stable too.
Or are you simply proposing this as a precaution against future bugs, in which case it is not urgent?
Alasdair
PATCH 1/1 media: strncpy does not null terminate string
In reply to Roel Kluinstrlcpy() will always null terminate the string.
---
drivers/media/dvb/dvb-usb/dvb-usb-i2c.c +1 -1
@@ -19,7 +19,7 @@ int dvb_usb_i2c_init(struct dvb_usb_device *d)return -EINVAL ; } -strncpy (d->i2c_adap.name, d->desc->name,sizeof (d->i2c_adap.name)); +strlcpy (d->i2c_adap.name, d->desc->name,sizeof (d->i2c_adap.name)); d->i2c_adap.class =I2C_CLASS_TV_DIGITAL , d->i2c_adap.algo = d->props.i2c_algo; d->i2c_adap.algo_data =NULL ;
drivers/media/video/pwc/pwc-v4l.c +1 -1
@@ -1033,7 +1033,7 @@ long pwc_video_do_ioctl(struct file *file, unsigned int cmd, void *arg)if (std->index !=0 )return -EINVAL ; std->id =V4L2_STD_UNKNOWN ; -strncpy (std->name,"webcam" ,sizeof (std->name)); +strlcpy (std->name,"webcam" ,sizeof (std->name));return 0 ; }
drivers/media/video/zoran/zoran_card.c +1 -1
@@ -1169,7 +1169,7 @@ zoran_setup_videocodec (struct zoran *zr, m->type =0 ; m->flags =CODEC_FLAG_ENCODER |CODEC_FLAG_DECODER ; -strncpy (m->name,ZR_DEVNAME (zr),sizeof (m->name)); +strlcpy (m->name,ZR_DEVNAME (zr),sizeof (m->name)); m->data = zr; switch (type)
PATCH 1/1 media: strncpy does not null terminate string
In reply to Roel Kluinstrlcpy() will always null terminate the string. Also use the sizeof(version) to strlcopy() the version string.
---
drivers/net/b44.c +4 -4
@@ -1756,15 +1756,15 @@ static void b44_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo *infstruct b44 *bp =netdev_priv (dev);struct ssb_bus *bus = bp->sdev->bus; -strncpy (info->driver,DRV_MODULE_NAME ,sizeof (info->driver)); -strncpy (info->version,DRV_MODULE_VERSION ,sizeof (info->driver)); +strlcpy (info->driver,DRV_MODULE_NAME ,sizeof (info->driver)); +strlcpy (info->version,DRV_MODULE_VERSION ,sizeof (info->version));switch (bus->bustype) {case SSB_BUSTYPE_PCI : -strncpy (info->bus_info,pci_name (bus->host_pci),sizeof (info->bus_info)); +strlcpy (info->bus_info,pci_name (bus->host_pci),sizeof (info->bus_info));break ;case SSB_BUSTYPE_PCMCIA :case SSB_BUSTYPE_SSB : -strncpy (info->bus_info,"SSB" ,sizeof (info->bus_info)); +strlcpy (info->bus_info,"SSB" ,sizeof (info->bus_info));break ; } }
PATCH 1/1 b44: strncpy does not null terminate string
In reply to Roel Kluinstrlcpy() will always null terminate the string. Also use the sizeof(version) to strlcopy() the version string.
---
drivers/net/b44.c +4 -4
@@ -1756,15 +1756,15 @@ static void b44_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo *infstruct b44 *bp =netdev_priv (dev);struct ssb_bus *bus = bp->sdev->bus; -strncpy (info->driver,DRV_MODULE_NAME ,sizeof (info->driver)); -strncpy (info->version,DRV_MODULE_VERSION ,sizeof (info->driver)); +strlcpy (info->driver,DRV_MODULE_NAME ,sizeof (info->driver)); +strlcpy (info->version,DRV_MODULE_VERSION ,sizeof (info->version));switch (bus->bustype) {case SSB_BUSTYPE_PCI : -strncpy (info->bus_info,pci_name (bus->host_pci),sizeof (info->bus_info)); +strlcpy (info->bus_info,pci_name (bus->host_pci),sizeof (info->bus_info));break ;case SSB_BUSTYPE_PCMCIA :case SSB_BUSTYPE_SSB : -strncpy (info->bus_info,"SSB" ,sizeof (info->bus_info)); +strlcpy (info->bus_info,"SSB" ,sizeof (info->bus_info));break ; } }
Re: [PATCH] b44: strncpy does not null terminate string
From: Roel Kluin <[email protected]>
Date: Fri, 17 Jul 2009 20:01:54 +0200
Quoted 4 lines
strlcpy()will always null terminate the string. Also use the sizeof(version) tostrlcopy()the version string.Signed-off-by Roel Kluin <[email protected]>
Applied to net-next-2.6
PATCH 1/1 powerpc/cell: replace strncpy by strlcpy
In reply to Roel KluinReplace strncpy() and explicit null-termination by strlcpy()
---
Arnd-san, Ken-san,
Thanks for reviewing,
Quoted 1 line
We prefer to take the patch which is replacing the two lines with one.
Doozo.
arch/powerpc/platforms/cell/celleb_setup.c +1 -2
@@ -80,8 +80,7 @@ static void celleb_show_cpuinfo(struct seq_file *m)static int __init celleb_machine_type_hack (char *ptr) { -strncpy (celleb_machine_type, ptr,sizeof (celleb_machine_type)); - celleb_machine_type[sizeof (celleb_machine_type)-1 ] =0 ; +strlcpy (celleb_machine_type, ptr,sizeof (celleb_machine_type));return 0 ; }
Re: [PATCH] powerpc/cell: replace strncpy by strlcpy
Arnd-san, Roel-san,
It works fine. Thanks.
---
Regards,
Ken Kawakami
Quoted 27 lines
Replace
strncpy()and explicit null-termination bystrlcpy()Signed-off-by Roel Kluin <[email protected]>---
Arnd-san, Ken-san,Thanks for reviewing,
Quoted 1 line
We prefer to take the patch which is replacing the two lines with one.
Doozo.
arch/powerpc/platforms/cell/celleb_setup.c +1
-2@@ -80,8 +80,7 @@ static void celleb_show_cpuinfo(struct seq_file *m)static int __init celleb_machine_type_hack (char *ptr) { -strncpy (celleb_machine_type, ptr,sizeof (celleb_machine_type)); - celleb_machine_type[sizeof (celleb_machine_type)-1 ] =0 ; +strlcpy (celleb_machine_type, ptr,sizeof (celleb_machine_type));return 0 ; }