Skip to content
  • Julia Lawall's avatar
    V4L/DVB (7035): drivers/media/common: Add missing video_device_release · a2a9b1ec
    Julia Lawall authored
    Video_device_alloc returns the result of a kzalloc.  In this case, the
    value is stored in a local variable which is not copied elsewhere before
    the point of the error return (video_register_device does not save its
    first argument anywhere if it returns a negative value).  Thus, a
    video_device_release it needed before the error return.
    
    The problem was found using the following semantic match.
    (http://www.emn.fr/x-info/coccinelle/
    
    )
    
    // <smpl>
    @@
    type T,T1,T2;
    identifier E;
    statement S;
    expression x1,x2,x3;
    int ret;
    @@
    
      T E;
      ...
    * E = video_device_alloc(...);
      if (E == NULL) S
      ... when != video_device_release(...,(T1)E,...)
          when != if (E != NULL) { ... video_device_release(...,(T1)E,...); ...}
          when != x1 = (T1)E
          when != E = x3;
          when any
      if (...) {
        ... when != video_device_release(...,(T2)E,...)
            when != if (E != NULL) { ... video_device_release(...,(T2)E,...); ...}
            when != x2 = (T2)E
    (
    *   return;
    |
    *   return ret;
    )
      }
    // </smpl>
    
    Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    CC: Oliver Endriss <o.endriss@gmx.de>
    CC: Michael Hunold <michael@mihu.de>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
    a2a9b1ec