V4L/DVB: drivers/media/video: move dereference after NULL test
authorJulia Lawall <julia@diku.dk>
Fri, 12 Mar 2010 09:15:32 +0000 (06:15 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 18 May 2010 03:47:16 +0000 (00:47 -0300)
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 <julia@diku.dk>
Acked-by: Muralidharan Karicheri <m-karicheri2@ti.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/davinci/vpif_display.c
drivers/media/video/saa7134/saa7134-alsa.c
drivers/media/video/usbvideo/quickcam_messenger.c

index 13c3a1b9776076d8db80da930f3e01c30f14f49f..e5bab3d0d53f89c36df1702920cfbef8694b1faf 100644 (file)
@@ -384,7 +384,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++) {
index d48c450ed77c948a0d278f7f26c6543fcc7d62b7..d3bd82ad010a18010458cb0357de05501a11ec3e 100644 (file)
@@ -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++) {
index fab48ec6c0eae57bc8386766b1aa9603ee0d7469..fbd665fa1979ae0fa474cfa892dbd38b06873ccd 100644 (file)
@@ -693,12 +693,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)