• Julia Lawall's avatar
    V4L/DVB (9796): drivers/media/video/cx88/cx88-alsa.c: Adjust error-handling code · a8782f66
    Julia Lawall authored
    In the function cx88_audio_initdev, the value card has been created using
    snd_card_new.  The other error handling code in this function frees the
    value using snd_card_free.  I have thus changed the first error case to do
    the same.  On the other hand, it may be that card is not sufficiently
    initialized at this point to use snd_card_free, in which case something
    else should be done to free the memory in the error case.
    
    In the function snd_cx88_create the call kfree(chip) in one error case
    looks suspicious, both because it is not done in the other error code, and
    because chip points into the middle of the memory allocated by
    snd_card_new, ie it is not itself associated with a separate kmalloc.
    Therefore I have removed it.
    
    The semantic match that finds the first problem is as follows:
    (http://www.emn.fr/x-info/coccinelle/)
    
    // <smpl>
    @r exists@
    local idexpression x;
    statement S,S1;
    position p1,p2,p3;
    expression E,E1;
    type T,T1;
    expression *ptr != NULL;
    @@
    
    (
     if ((x@p1 = snd_card_new(...)) == NULL) S
    |
     x@p1 = snd_card_new(...);
    )
     ... when != snd_card_free(...,(T)x,...)
         when != if (...) { <+... snd_card_free(...,(T)x,...) ...+> }
         when != true x == NULL || ...
         when != x = E
         when != E = (T)x
         when any
    (
     if (x == NULL || ...) S1
    |
     if@p2 (...) {
      ... when != snd_card_free(...,(T1)x,...)
          when != if (...) { <+... snd_card_free(...,(T1)x,...) ...+> }
          when != x = E1
          when != E1 = (T1)x
    (
      return \(0\|<+...x...+>\|ptr\);
    |
      return@p3 ...;
    )
    }
    )
    
    @ script:python @
    p1 << r.p1;
    p3 << r.p3;
    @@
    
    print "* file: %s snd_card_new: %s return: %s" % (p1[0].file,p1[0].line,p3[0].line)
    
    // </smpl>
    Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    a8782f66
cx88-alsa.c 22.5 KB