• Anatolij Gustschin's avatar
    V4L/DVB: v4l2-dev: fix memory leak · 1bb64194
    Anatolij Gustschin authored
    Since commit b4028437
    the 'driver_data' field resides in device's struct device_private
    which may be allocated by dev_set_drvdata() if device_private
    struct was not allocated previously.
    
    dev_set_drvdata() is used in video_set_drvdata() to set
    the driver's private data pointer in v4l2 drivers. Setting
    the private data _before_ registering the v4l2 device results
    in a memory leak since __video_register_device() also calls
    video_set_drvdata(), but after zeroing the device structure.
    Thus, the reference to the previously allocated device_private
    struct goes lost and a new device_private will be allocated.
    
    All v4l drivers which call video_set_drvdata() _before_
    calling video_register_device() are affected. The patch fixes
    __video_register_device() to preserve previously allocated
    device_private reference.
    
    Caught by kmemleak.
    Signed-off-by: default avatarAnatolij Gustschin <agust@denx.de>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    1bb64194
v4l2-dev.c 16.9 KB