RE: [patch 2/5] drivers/media/video: move dereference after NULL test
From: Julia Lawall ju...@diku.dk In quickcam_messenger.c, if the NULL test on uvd is needed, then the dereference should be after the NULL test. In vpif_display.c, std_info is initialized to the address of a structure field. This seems unlikely to be NULL. Test std_info-stdid instead. In saa7134-alsa.c, the function is only called from one place, where the chip argument has already been dereferenced. On the other hand, if it should be kept, then card should be initialized after it. A simplified version of the semantic match that detects this problem is as follows (http://coccinelle.lip6.fr/): // smpl @match exists@ expression x, E; identifier fld; @@ * x-fld ... when != \(x = E\|x\) * x == NULL // /smpl Signed-off-by: Julia Lawall ju...@diku.dk --- drivers/media/video/davinci/vpif_display.c|2 +- drivers/media/video/saa7134/saa7134-alsa.c|2 -- drivers/media/video/usbvideo/quickcam_messenger.c |3 ++- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/usbvideo/quickcam_messenger.c b/drivers/media/video/usbvideo/quickcam_messenger.c index 803d3e4..f0043d0 100644 --- a/drivers/media/video/usbvideo/quickcam_messenger.c +++ b/drivers/media/video/usbvideo/quickcam_messenger.c @@ -692,12 +692,13 @@ static int qcm_start_data(struct uvd *uvd) static void qcm_stop_data(struct uvd *uvd) { - struct qcm *cam = (struct qcm *) uvd-user_data; + struct qcm *cam; int i, j; int ret; if ((uvd == NULL) || (!uvd-streaming) || (uvd-dev == NULL)) return; + cam = (struct qcm *) uvd-user_data; ret = qcm_camera_off(uvd); if (ret) diff --git a/drivers/media/video/saa7134/saa7134-alsa.c b/drivers/media/video/saa7134/saa7134-alsa.c index d48c450..d3bd82a 100644 --- a/drivers/media/video/saa7134/saa7134-alsa.c +++ b/drivers/media/video/saa7134/saa7134-alsa.c @@ -1011,8 +1011,6 @@ static int snd_card_saa7134_new_mixer(snd_card_saa7134_t * chip) unsigned int idx; int err, addr; - if (snd_BUG_ON(!chip)) - return -EINVAL; strcpy(card-mixername, SAA7134 Mixer); for (idx = 0; idx ARRAY_SIZE(snd_saa7134_volume_controls); idx++) { diff --git a/drivers/media/video/davinci/vpif_display.c b/drivers/media/video/davinci/vpif_display.c index dfddef7..b2dce78 100644 --- a/drivers/media/video/davinci/vpif_display.c +++ b/drivers/media/video/davinci/vpif_display.c @@ -383,7 +383,7 @@ static int vpif_get_std_info(struct channel_obj *ch) int index; std_info-stdid = vid_ch-stdid; - if (!std_info) + if (!std_info-stdid) return -1; for (index = 0; index ARRAY_SIZE(ch_params); index++) { -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [patch 2/5] drivers/media/video: move dereference after NULL test
For drivers/media/video/davinci/vpif_display.c Acked-by: Muralidharan Karicheri m-kariche...@ti.com Murali Karicheri Software Design Engineer Texas Instruments Inc. Germantown, MD 20874 phone: 301-407-9583 email: m-kariche...@ti.com -Original Message- From: Julia Lawall [mailto:ju...@diku.dk] Sent: Friday, March 12, 2010 4:16 AM To: Karicheri, Muralidharan Cc: a...@linux-foundation.org; mche...@infradead.org; linux- me...@vger.kernel.org Subject: RE: [patch 2/5] drivers/media/video: move dereference after NULL test From: Julia Lawall ju...@diku.dk In quickcam_messenger.c, if the NULL test on uvd is needed, then the dereference should be after the NULL test. In vpif_display.c, std_info is initialized to the address of a structure field. This seems unlikely to be NULL. Test std_info-stdid instead. In saa7134-alsa.c, the function is only called from one place, where the chip argument has already been dereferenced. On the other hand, if it should be kept, then card should be initialized after it. A simplified version of the semantic match that detects this problem is as follows (http://coccinelle.lip6.fr/): // smpl @match exists@ expression x, E; identifier fld; @@ * x-fld ... when != \(x = E\|x\) * x == NULL // /smpl Signed-off-by: Julia Lawall ju...@diku.dk --- drivers/media/video/davinci/vpif_display.c|2 +- drivers/media/video/saa7134/saa7134-alsa.c|2 -- drivers/media/video/usbvideo/quickcam_messenger.c |3 ++- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/usbvideo/quickcam_messenger.c b/drivers/media/video/usbvideo/quickcam_messenger.c index 803d3e4..f0043d0 100644 --- a/drivers/media/video/usbvideo/quickcam_messenger.c +++ b/drivers/media/video/usbvideo/quickcam_messenger.c @@ -692,12 +692,13 @@ static int qcm_start_data(struct uvd *uvd) static void qcm_stop_data(struct uvd *uvd) { - struct qcm *cam = (struct qcm *) uvd-user_data; + struct qcm *cam; int i, j; int ret; if ((uvd == NULL) || (!uvd-streaming) || (uvd-dev == NULL)) return; + cam = (struct qcm *) uvd-user_data; ret = qcm_camera_off(uvd); if (ret) diff --git a/drivers/media/video/saa7134/saa7134-alsa.c b/drivers/media/video/saa7134/saa7134-alsa.c index d48c450..d3bd82a 100644 --- a/drivers/media/video/saa7134/saa7134-alsa.c +++ b/drivers/media/video/saa7134/saa7134-alsa.c @@ -1011,8 +1011,6 @@ static int snd_card_saa7134_new_mixer(snd_card_saa7134_t * chip) unsigned int idx; int err, addr; - if (snd_BUG_ON(!chip)) - return -EINVAL; strcpy(card-mixername, SAA7134 Mixer); for (idx = 0; idx ARRAY_SIZE(snd_saa7134_volume_controls); idx++) { diff --git a/drivers/media/video/davinci/vpif_display.c b/drivers/media/video/davinci/vpif_display.c index dfddef7..b2dce78 100644 --- a/drivers/media/video/davinci/vpif_display.c +++ b/drivers/media/video/davinci/vpif_display.c @@ -383,7 +383,7 @@ static int vpif_get_std_info(struct channel_obj *ch) int index; std_info-stdid = vid_ch-stdid; - if (!std_info) + if (!std_info-stdid) return -1; for (index = 0; index ARRAY_SIZE(ch_params); index++) { -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[patch 2/5] drivers/media/video: move dereference after NULL test
From: Julia Lawall ju...@diku.dk In quickcam_messenger.c, if the NULL test on uvd is needed, then the dereference should be after the NULL test. In vpif_display.c, std_info is initialized to the address of a structure field. This seems unlikely to be NULL. If it could somehow be NULL, then the assignment should be moved after the NULL test. Alternatively, perhaps the NULL test is intended to test std_info-stdid rather than std_info? In saa7134-alsa.c, the function is only called from one place, where the chip argument has already been dereferenced. On the other hand, if it should be kept, then card should be initialized after it. A simplified version of the semantic match that detects this problem is as follows (http://coccinelle.lip6.fr/): // smpl @match exists@ expression x, E; identifier fld; @@ * x-fld ... when != \(x = E\|x\) * x == NULL // /smpl Signed-off-by: Julia Lawall ju...@diku.dk Cc: Mauro Carvalho Chehab mche...@infradead.org Signed-off-by: Andrew Morton a...@linux-foundation.org --- drivers/media/video/davinci/vpif_display.c|2 -- drivers/media/video/saa7134/saa7134-alsa.c|2 -- drivers/media/video/usbvideo/quickcam_messenger.c |3 ++- 3 files changed, 2 insertions(+), 5 deletions(-) diff -puN drivers/media/video/davinci/vpif_display.c~drivers-media-video-move-dereference-after-null-test drivers/media/video/davinci/vpif_display.c --- a/drivers/media/video/davinci/vpif_display.c~drivers-media-video-move-dereference-after-null-test +++ a/drivers/media/video/davinci/vpif_display.c @@ -383,8 +383,6 @@ static int vpif_get_std_info(struct chan int index; std_info-stdid = vid_ch-stdid; - if (!std_info) - return -1; for (index = 0; index ARRAY_SIZE(ch_params); index++) { config = ch_params[index]; diff -puN drivers/media/video/saa7134/saa7134-alsa.c~drivers-media-video-move-dereference-after-null-test drivers/media/video/saa7134/saa7134-alsa.c --- a/drivers/media/video/saa7134/saa7134-alsa.c~drivers-media-video-move-dereference-after-null-test +++ a/drivers/media/video/saa7134/saa7134-alsa.c @@ -1011,8 +1011,6 @@ static int snd_card_saa7134_new_mixer(sn unsigned int idx; int err, addr; - if (snd_BUG_ON(!chip)) - return -EINVAL; strcpy(card-mixername, SAA7134 Mixer); for (idx = 0; idx ARRAY_SIZE(snd_saa7134_volume_controls); idx++) { diff -puN drivers/media/video/usbvideo/quickcam_messenger.c~drivers-media-video-move-dereference-after-null-test drivers/media/video/usbvideo/quickcam_messenger.c --- a/drivers/media/video/usbvideo/quickcam_messenger.c~drivers-media-video-move-dereference-after-null-test +++ a/drivers/media/video/usbvideo/quickcam_messenger.c @@ -692,12 +692,13 @@ static int qcm_start_data(struct uvd *uv static void qcm_stop_data(struct uvd *uvd) { - struct qcm *cam = (struct qcm *) uvd-user_data; + struct qcm *cam; int i, j; int ret; if ((uvd == NULL) || (!uvd-streaming) || (uvd-dev == NULL)) return; + cam = (struct qcm *) uvd-user_data; ret = qcm_camera_off(uvd); if (ret) _ -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [patch 2/5] drivers/media/video: move dereference after NULL test
-Original Message- From: linux-media-ow...@vger.kernel.org [mailto:linux-media- ow...@vger.kernel.org] On Behalf Of a...@linux-foundation.org Sent: Thursday, March 11, 2010 5:02 PM To: mche...@infradead.org Cc: linux-media@vger.kernel.org; a...@linux-foundation.org; ju...@diku.dk Subject: [patch 2/5] drivers/media/video: move dereference after NULL test From: Julia Lawall ju...@diku.dk In quickcam_messenger.c, if the NULL test on uvd is needed, then the dereference should be after the NULL test. In vpif_display.c, std_info is initialized to the address of a structure field. This seems unlikely to be NULL. If it could somehow be NULL, then the assignment should be moved after the NULL test. Alternatively, perhaps the NULL test is intended to test std_info-stdid rather than std_info? In saa7134-alsa.c, the function is only called from one place, where the chip argument has already been dereferenced. On the other hand, if it should be kept, then card should be initialized after it. A simplified version of the semantic match that detects this problem is as follows (http://coccinelle.lip6.fr/): // smpl @match exists@ expression x, E; identifier fld; @@ * x-fld ... when != \(x = E\|x\) * x == NULL // /smpl Signed-off-by: Julia Lawall ju...@diku.dk Cc: Mauro Carvalho Chehab mche...@infradead.org Signed-off-by: Andrew Morton a...@linux-foundation.org --- drivers/media/video/davinci/vpif_display.c|2 -- drivers/media/video/saa7134/saa7134-alsa.c|2 -- drivers/media/video/usbvideo/quickcam_messenger.c |3 ++- 3 files changed, 2 insertions(+), 5 deletions(-) diff -puN drivers/media/video/davinci/vpif_display.c~drivers-media-video- move-dereference-after-null-test drivers/media/video/davinci/vpif_display.c --- a/drivers/media/video/davinci/vpif_display.c~drivers-media-video-move- dereference-after-null-test +++ a/drivers/media/video/davinci/vpif_display.c @@ -383,8 +383,6 @@ static int vpif_get_std_info(struct chan int index; std_info-stdid = vid_ch-stdid; - if (!std_info) - return -1; Please change it as if (!std_info-stdid) return -1; Murali for (index = 0; index ARRAY_SIZE(ch_params); index++) { config = ch_params[index]; diff -puN drivers/media/video/saa7134/saa7134-alsa.c~drivers-media-video- move-dereference-after-null-test drivers/media/video/saa7134/saa7134-alsa.c --- a/drivers/media/video/saa7134/saa7134-alsa.c~drivers-media-video-move- dereference-after-null-test +++ a/drivers/media/video/saa7134/saa7134-alsa.c @@ -1011,8 +1011,6 @@ static int snd_card_saa7134_new_mixer(sn unsigned int idx; int err, addr; - if (snd_BUG_ON(!chip)) - return -EINVAL; strcpy(card-mixername, SAA7134 Mixer); for (idx = 0; idx ARRAY_SIZE(snd_saa7134_volume_controls); idx++) { diff -puN drivers/media/video/usbvideo/quickcam_messenger.c~drivers-media- video-move-dereference-after-null-test drivers/media/video/usbvideo/quickcam_messenger.c --- a/drivers/media/video/usbvideo/quickcam_messenger.c~drivers-media- video-move-dereference-after-null-test +++ a/drivers/media/video/usbvideo/quickcam_messenger.c @@ -692,12 +692,13 @@ static int qcm_start_data(struct uvd *uv static void qcm_stop_data(struct uvd *uvd) { - struct qcm *cam = (struct qcm *) uvd-user_data; + struct qcm *cam; int i, j; int ret; if ((uvd == NULL) || (!uvd-streaming) || (uvd-dev == NULL)) return; + cam = (struct qcm *) uvd-user_data; ret = qcm_camera_off(uvd); if (ret) _ -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [patch 2/5] drivers/media/video: move dereference after NULL test
On Thu, 11 Mar 2010 16:38:21 -0600 Karicheri, Muralidharan m-kariche...@ti.com wrote: diff -puN drivers/media/video/davinci/vpif_display.c~drivers-media-video- move-dereference-after-null-test drivers/media/video/davinci/vpif_display.c --- a/drivers/media/video/davinci/vpif_display.c~drivers-media-video-move- dereference-after-null-test +++ a/drivers/media/video/davinci/vpif_display.c @@ -383,8 +383,6 @@ static int vpif_get_std_info(struct chan int index; std_info-stdid = vid_ch-stdid; -if (!std_info) -return -1; Please change it as if (!std_info-stdid) return -1; Could you please do this, and send the patch? It's better that way as you're more familar with the code and maybe can even test it. -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [patch 2/5] drivers/media/video: move dereference after NULL test
Oops, my mistake. I will fix that. julia On Thu, 11 Mar 2010, Karicheri, Muralidharan wrote: -Original Message- From: linux-media-ow...@vger.kernel.org [mailto:linux-media- ow...@vger.kernel.org] On Behalf Of a...@linux-foundation.org Sent: Thursday, March 11, 2010 5:02 PM To: mche...@infradead.org Cc: linux-media@vger.kernel.org; a...@linux-foundation.org; ju...@diku.dk Subject: [patch 2/5] drivers/media/video: move dereference after NULL test From: Julia Lawall ju...@diku.dk In quickcam_messenger.c, if the NULL test on uvd is needed, then the dereference should be after the NULL test. In vpif_display.c, std_info is initialized to the address of a structure field. This seems unlikely to be NULL. If it could somehow be NULL, then the assignment should be moved after the NULL test. Alternatively, perhaps the NULL test is intended to test std_info-stdid rather than std_info? In saa7134-alsa.c, the function is only called from one place, where the chip argument has already been dereferenced. On the other hand, if it should be kept, then card should be initialized after it. A simplified version of the semantic match that detects this problem is as follows (http://coccinelle.lip6.fr/): // smpl @match exists@ expression x, E; identifier fld; @@ * x-fld ... when != \(x = E\|x\) * x == NULL // /smpl Signed-off-by: Julia Lawall ju...@diku.dk Cc: Mauro Carvalho Chehab mche...@infradead.org Signed-off-by: Andrew Morton a...@linux-foundation.org --- drivers/media/video/davinci/vpif_display.c|2 -- drivers/media/video/saa7134/saa7134-alsa.c|2 -- drivers/media/video/usbvideo/quickcam_messenger.c |3 ++- 3 files changed, 2 insertions(+), 5 deletions(-) diff -puN drivers/media/video/davinci/vpif_display.c~drivers-media-video- move-dereference-after-null-test drivers/media/video/davinci/vpif_display.c --- a/drivers/media/video/davinci/vpif_display.c~drivers-media-video-move- dereference-after-null-test +++ a/drivers/media/video/davinci/vpif_display.c @@ -383,8 +383,6 @@ static int vpif_get_std_info(struct chan int index; std_info-stdid = vid_ch-stdid; -if (!std_info) -return -1; Please change it as if (!std_info-stdid) return -1; Murali for (index = 0; index ARRAY_SIZE(ch_params); index++) { config = ch_params[index]; diff -puN drivers/media/video/saa7134/saa7134-alsa.c~drivers-media-video- move-dereference-after-null-test drivers/media/video/saa7134/saa7134-alsa.c --- a/drivers/media/video/saa7134/saa7134-alsa.c~drivers-media-video-move- dereference-after-null-test +++ a/drivers/media/video/saa7134/saa7134-alsa.c @@ -1011,8 +1011,6 @@ static int snd_card_saa7134_new_mixer(sn unsigned int idx; int err, addr; -if (snd_BUG_ON(!chip)) -return -EINVAL; strcpy(card-mixername, SAA7134 Mixer); for (idx = 0; idx ARRAY_SIZE(snd_saa7134_volume_controls); idx++) { diff -puN drivers/media/video/usbvideo/quickcam_messenger.c~drivers-media- video-move-dereference-after-null-test drivers/media/video/usbvideo/quickcam_messenger.c --- a/drivers/media/video/usbvideo/quickcam_messenger.c~drivers-media- video-move-dereference-after-null-test +++ a/drivers/media/video/usbvideo/quickcam_messenger.c @@ -692,12 +692,13 @@ static int qcm_start_data(struct uvd *uv static void qcm_stop_data(struct uvd *uvd) { -struct qcm *cam = (struct qcm *) uvd-user_data; +struct qcm *cam; int i, j; int ret; if ((uvd == NULL) || (!uvd-streaming) || (uvd-dev == NULL)) return; +cam = (struct qcm *) uvd-user_data; ret = qcm_camera_off(uvd); if (ret) _ -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html