On 09/10/2018 02:19 PM, Mauro Carvalho Chehab wrote:
> The strncpy() function is being deprecated upstream. Replace
> it by the safer strscpy().
> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab+sams...@kernel.org>
> ---
>  drivers/media/dvb-frontends/as102_fe.c           |  2 +-
>  drivers/media/dvb-frontends/dib7000p.c           |  3 ++-
>  drivers/media/dvb-frontends/dib8000.c            |  4 ++--
>  drivers/media/dvb-frontends/dib9000.c            |  6 ++++--
>  drivers/media/dvb-frontends/dvb-pll.c            |  2 +-
>  drivers/media/dvb-frontends/m88ds3103.c          |  2 +-
>  drivers/media/pci/bt8xx/dst.c                    |  3 ++-
>  drivers/media/pci/mantis/mantis_i2c.c            |  2 +-
>  drivers/media/pci/saa7134/saa7134-go7007.c       |  2 +-
>  drivers/media/platform/am437x/am437x-vpfe.c      |  2 +-
>  drivers/media/platform/davinci/vpfe_capture.c    |  2 +-
>  drivers/media/platform/davinci/vpif_capture.c    |  2 +-
>  drivers/media/platform/davinci/vpif_display.c    |  3 +--
>  drivers/media/platform/exynos4-is/fimc-capture.c |  2 +-
>  drivers/media/platform/exynos4-is/fimc-m2m.c     |  2 +-
>  drivers/media/platform/mtk-vpu/mtk_vpu.c         |  2 +-
>  drivers/media/platform/mx2_emmaprp.c             |  4 ++--
>  drivers/media/platform/s5p-g2d/g2d.c             |  6 +++---
>  drivers/media/platform/ti-vpe/vpe.c              |  6 +++---
>  drivers/media/platform/vicodec/vicodec-core.c    |  4 ++--
>  drivers/media/platform/vim2m.c                   |  4 ++--
>  drivers/media/radio/si4713/si4713.c              |  2 +-
>  drivers/media/usb/go7007/go7007-usb.c            | 16 ++++++++--------
>  drivers/media/usb/go7007/go7007-v4l2.c           |  2 +-
>  drivers/media/usb/hdpvr/hdpvr-video.c            |  9 +++------
>  drivers/media/usb/pulse8-cec/pulse8-cec.c        |  4 ++--
>  drivers/media/usb/pvrusb2/pvrusb2-hdw.c          |  2 +-
>  drivers/media/usb/pvrusb2/pvrusb2-v4l2.c         |  4 ++--
>  drivers/staging/media/bcm2048/radio-bcm2048.c    |  4 ++--
>  drivers/staging/media/imx/imx-ic-common.c        |  2 +-
>  drivers/staging/media/imx/imx-media-vdic.c       |  2 +-
>  drivers/staging/media/zoran/zoran_driver.c       | 10 +++++-----
>  32 files changed, 61 insertions(+), 61 deletions(-)
> 

<snip>

> diff --git a/drivers/media/platform/davinci/vpfe_capture.c 
> b/drivers/media/platform/davinci/vpfe_capture.c
> index ea3ddd5a42bd..6f094dea6bc2 100644
> --- a/drivers/media/platform/davinci/vpfe_capture.c
> +++ b/drivers/media/platform/davinci/vpfe_capture.c
> @@ -1759,7 +1759,7 @@ static int vpfe_probe(struct platform_device *pdev)
>  
>       mutex_lock(&ccdc_lock);
>  
> -     strncpy(ccdc_cfg->name, vpfe_cfg->ccdc, 32);
> +     strscpy(ccdc_cfg->name, vpfe_cfg->ccdc, 32);

32 -> sizeof(ccdc_cfg->name)

>       /* Get VINT0 irq resource */
>       res1 = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
>       if (!res1) {
> diff --git a/drivers/media/platform/davinci/vpif_capture.c 
> b/drivers/media/platform/davinci/vpif_capture.c
> index 62bced38db10..b246af6cc21f 100644
> --- a/drivers/media/platform/davinci/vpif_capture.c
> +++ b/drivers/media/platform/davinci/vpif_capture.c
> @@ -1254,7 +1254,7 @@ static int vpif_s_dv_timings(struct file *file, void 
> *priv,
>       } else {
>               std_info->l5 = std_info->vsize - (bt->vfrontporch - 1);
>       }
> -     strncpy(std_info->name, "Custom timings BT656/1120", VPIF_MAX_NAME);
> +     strscpy(std_info->name, "Custom timings BT656/1120", VPIF_MAX_NAME);

VPIF_MAX_NAME -> sizeof(std_info->name)

>       std_info->width = bt->width;
>       std_info->height = bt->height;
>       std_info->frm_fmt = bt->interlaced ? 0 : 1;
> diff --git a/drivers/media/platform/davinci/vpif_display.c 
> b/drivers/media/platform/davinci/vpif_display.c
> index 78eba66f4b2b..65f51ebef6b4 100644
> --- a/drivers/media/platform/davinci/vpif_display.c
> +++ b/drivers/media/platform/davinci/vpif_display.c
> @@ -987,8 +987,7 @@ static int vpif_s_dv_timings(struct file *file, void 
> *priv,
>       } else {
>               std_info->l5 = std_info->vsize - (bt->vfrontporch - 1);
>       }
> -     strncpy(std_info->name, "Custom timings BT656/1120",
> -                     VPIF_MAX_NAME);
> +     strscpy(std_info->name, "Custom timings BT656/1120", VPIF_MAX_NAME);

Ditto.

>       std_info->width = bt->width;
>       std_info->height = bt->height;
>       std_info->frm_fmt = bt->interlaced ? 0 : 1;

<snip>

> diff --git a/drivers/media/platform/mtk-vpu/mtk_vpu.c 
> b/drivers/media/platform/mtk-vpu/mtk_vpu.c
> index f8d35e3ac1dc..9f4bca037b59 100644
> --- a/drivers/media/platform/mtk-vpu/mtk_vpu.c
> +++ b/drivers/media/platform/mtk-vpu/mtk_vpu.c
> @@ -615,7 +615,7 @@ static void vpu_init_ipi_handler(void *data, unsigned int 
> len, void *priv)
>       struct vpu_run *run = (struct vpu_run *)data;
>  
>       vpu->run.signaled = run->signaled;
> -     strncpy(vpu->run.fw_ver, run->fw_ver, VPU_FW_VER_LEN);
> +     strscpy(vpu->run.fw_ver, run->fw_ver, VPU_FW_VER_LEN);

VPU_FW_VER_LEN -> sizeof(vpu->run.fw_ver)

>       vpu->run.dec_capability = run->dec_capability;
>       vpu->run.enc_capability = run->enc_capability;
>       wake_up_interruptible(&vpu->run.wq);

<snip>

> diff --git a/drivers/media/radio/si4713/si4713.c 
> b/drivers/media/radio/si4713/si4713.c
> index f4a53f1e856e..289bbed255cb 100644
> --- a/drivers/media/radio/si4713/si4713.c
> +++ b/drivers/media/radio/si4713/si4713.c
> @@ -1272,7 +1272,7 @@ static int si4713_g_modulator(struct v4l2_subdev *sd, 
> struct v4l2_modulator *vm)
>       if (vm->index > 0)
>               return -EINVAL;
>  
> -     strncpy(vm->name, "FM Modulator", 32);
> +     strscpy(vm->name, "FM Modulator", 32);

32 -> sizeof(vm->name)

>       vm->capability = V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LOW |
>               V4L2_TUNER_CAP_RDS | V4L2_TUNER_CAP_RDS_CONTROLS;
>  

<snip>

> diff --git a/drivers/media/usb/hdpvr/hdpvr-video.c 
> b/drivers/media/usb/hdpvr/hdpvr-video.c
> index e082086428a4..034983c11532 100644
> --- a/drivers/media/usb/hdpvr/hdpvr-video.c
> +++ b/drivers/media/usb/hdpvr/hdpvr-video.c
> @@ -769,8 +769,7 @@ static int vidioc_enum_input(struct file *file, void 
> *_fh, struct v4l2_input *i)
>  
>       i->type = V4L2_INPUT_TYPE_CAMERA;
>  
> -     strncpy(i->name, iname[n], sizeof(i->name) - 1);
> -     i->name[sizeof(i->name) - 1] = '\0';
> +     strscpy(i->name, iname[n], sizeof(i->name));
>  
>       i->audioset = 1<<HDPVR_RCA_FRONT | 1<<HDPVR_RCA_BACK | 1<<HDPVR_SPDIF;
>  
> @@ -841,8 +840,7 @@ static int vidioc_enumaudio(struct file *file, void *priv,
>  
>       audio->capability = V4L2_AUDCAP_STEREO;
>  
> -     strncpy(audio->name, audio_iname[n], sizeof(audio->name) - 1);
> -     audio->name[sizeof(audio->name) - 1] = '\0';
> +     strscpy(audio->name, audio_iname[n], sizeof(audio->name));
>  
>       return 0;
>  }
> @@ -874,7 +872,6 @@ static int vidioc_g_audio(struct file *file, void 
> *private_data,
>       audio->index = dev->options.audio_input;
>       audio->capability = V4L2_AUDCAP_STEREO;
>       strscpy(audio->name, audio_iname[audio->index], sizeof(audio->name));
> -     audio->name[sizeof(audio->name) - 1] = '\0';
>       return 0;
>  }
>  
> @@ -991,7 +988,7 @@ static int vidioc_enum_fmt_vid_cap(struct file *file, 
> void *private_data,
>               return -EINVAL;
>  
>       f->flags = V4L2_FMT_FLAG_COMPRESSED;
> -     strncpy(f->description, "MPEG2-TS with AVC/AAC streams", 32);
> +     strscpy(f->description, "MPEG2-TS with AVC/AAC streams", 32);

32 -> sizeof(f->description)

>       f->pixelformat = V4L2_PIX_FMT_MPEG;
>  
>       return 0;
> diff --git a/drivers/media/usb/pulse8-cec/pulse8-cec.c 
> b/drivers/media/usb/pulse8-cec/pulse8-cec.c
> index 365c78b748dd..7f961fb23dc6 100644
> --- a/drivers/media/usb/pulse8-cec/pulse8-cec.c
> +++ b/drivers/media/usb/pulse8-cec/pulse8-cec.c
> @@ -435,7 +435,7 @@ static int pulse8_setup(struct pulse8 *pulse8, struct 
> serio *serio,
>       err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 0);
>       if (err)
>               return err;
> -     strncpy(log_addrs->osd_name, data, 13);
> +     strscpy(log_addrs->osd_name, data, 13);

13 -> sizeof(log_addrs->osd_name)

>       dev_dbg(pulse8->dev, "OSD name: %s\n", log_addrs->osd_name);
>  
>       return 0;
> @@ -566,7 +566,7 @@ static int pulse8_cec_adap_log_addr(struct cec_adapter 
> *adap, u8 log_addr)
>               char *osd_str = cmd + 1;
>  
>               cmd[0] = MSGCODE_SET_OSD_NAME;
> -             strncpy(cmd + 1, adap->log_addrs.osd_name, 13);
> +             strscpy(cmd + 1, adap->log_addrs.osd_name, 13);

13 -> sizeof(cmd) - 1

>               if (osd_len < 4) {
>                       memset(osd_str + osd_len, ' ', 4 - osd_len);
>                       osd_len = 4;


> diff --git a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c 
> b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
> index a8519da0020b..2b5b8de5982b 100644
> --- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
> +++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
> @@ -2459,7 +2459,7 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface 
> *intf,
>               if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
>                       ciptr->set_value = ctrl_cx2341x_set;
>               }
> -             strncpy(hdw->mpeg_ctrl_info[idx].desc,qctrl.name,
> +             strscpy(hdw->mpeg_ctrl_info[idx].desc, qctrl.name,
>                       PVR2_CTLD_INFO_DESC_SIZE);

PVR2_CTLD_INFO_DESC_SIZE -> sizeof(hdw->mpeg_ctrl_info[idx].desc)

>               hdw->mpeg_ctrl_info[idx].desc[PVR2_CTLD_INFO_DESC_SIZE-1] = 0;
>               ciptr->default_value = qctrl.default_value;
> diff --git a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c 
> b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
> index cea232a3302d..666e7b89e182 100644
> --- a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
> +++ b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
> @@ -284,7 +284,7 @@ static int pvr2_enumaudio(struct file *file, void *priv, 
> struct v4l2_audio *vin)
>  
>       if (vin->index > 0)
>               return -EINVAL;
> -     strncpy(vin->name, "PVRUSB2 Audio", 14);
> +     strscpy(vin->name, "PVRUSB2 Audio", 14);

14 -> sizeof(vin->name)

>       vin->capability = V4L2_AUDCAP_STEREO;
>       return 0;
>  }
> @@ -293,7 +293,7 @@ static int pvr2_g_audio(struct file *file, void *priv, 
> struct v4l2_audio *vin)
>  {
>       /* pkt: FIXME: see above comment (VIDIOC_ENUMAUDIO) */
>       vin->index = 0;
> -     strncpy(vin->name, "PVRUSB2 Audio", 14);
> +     strscpy(vin->name, "PVRUSB2 Audio", 14);

Ditto

>       vin->capability = V4L2_AUDCAP_STEREO;
>       return 0;
>  }
> diff --git a/drivers/staging/media/bcm2048/radio-bcm2048.c 
> b/drivers/staging/media/bcm2048/radio-bcm2048.c
> index 874d290f9622..1debfbad89ee 100644
> --- a/drivers/staging/media/bcm2048/radio-bcm2048.c
> +++ b/drivers/staging/media/bcm2048/radio-bcm2048.c
> @@ -2403,7 +2403,7 @@ static int bcm2048_vidioc_g_audio(struct file *file, 
> void *priv,
>       if (audio->index > 1)
>               return -EINVAL;
>  
> -     strncpy(audio->name, "Radio", 32);
> +     strscpy(audio->name, "Radio", 32);

32 -> sizeof(audio->name)

>       audio->capability = V4L2_AUDCAP_STEREO;
>  
>       return 0;
> @@ -2431,7 +2431,7 @@ static int bcm2048_vidioc_g_tuner(struct file *file, 
> void *priv,
>       if (tuner->index > 0)
>               return -EINVAL;
>  
> -     strncpy(tuner->name, "FM Receiver", 32);
> +     strscpy(tuner->name, "FM Receiver", 32);

32 -> sizeof(tuner->name)

>       tuner->type = V4L2_TUNER_RADIO;
>       tuner->rangelow =
>               dev_to_v4l2(bcm2048_get_region_bottom_frequency(bdev));

<snip>

Basically using constants instead of sizeof() as the strscpy argument defeats 
the
purpose of strscpy, so that needs to be fixed.

The 'strcpy' patch uses sizeof everywhere, but I saw a few other occurrences of
this in the strlcpy patch. I think the strlcpy patch needs a follow-up that
replaces any hardcoded sizes with the safer sizeof().

BTW, I really like this strncpy patch: in many cases strncpy was unsafe. Good to
fix this.

Regards,

        Hans

Reply via email to