• Hans Verkuil's avatar
    [media] v4l2-ioctl: Don't assume file->private_data always points to a v4l2_fh · 7a3ed2d9
    Hans Verkuil authored
    Commit efbceecd, adds a number of helper
    functions for ctrl related ioctls to v4l2-ioctl.c, these helpers assume that
    if file->private_data != NULL, it points to a v4l2_fh, which is only the case
    for drivers which actually use v4l2_fh.
    
    This breaks for example bttv which use the "filedata" pointer for its own uses,
    and now all the ctrl ioctls try to use whatever its filedata points to as
    v4l2_fh and think it has a ctrl_handler, leading to:
    
    [  142.499214] BUG: unable to handle kernel NULL pointer dereference at 0000000000000021
    [  142.499270] IP: [<ffffffffa01cb959>] v4l2_queryctrl+0x29/0x230 [videodev]
    [  142.514649]  [<ffffffffa01c7a77>] v4l_queryctrl+0x47/0x90 [videodev]
    [  142.517417]  [<ffffffffa01c58b1>] __video_do_ioctl+0x2c1/0x420 [videodev]
    [  142.520116]  [<ffffffffa01c7ee6>] video_usercopy+0x1a6/0x470 [videodev]
    ...
    
    This patch adds the missing test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) tests
    to the ctrl ioctl helpers v4l2_fh paths, fixing the issues with for example
    the bttv driver.
    Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    7a3ed2d9
v4l2-ioctl.c 66.9 KB