• Arnd Bergmann's avatar
    media: v4l2-core: fix VIDIOC_DQEVENT handling on non-x86 · 678d92b6
    Arnd Bergmann authored
    My previous bugfix addressed an API inconsistency found by syzbot,
    and it correctly fixed the issue on x86-64 machines, which now behave
    correctly for both native and compat tasks.
    
    Unfortunately, John found that the patch broke compat mode on all other
    architectures, as they can no longer rely on the VIDIOC_DQEVENT_TIME32
    code from the native handler as a fallback in the compat code.
    
    The best way I can see for addressing this is to generalize the
    VIDIOC_DQEVENT32_TIME32 code from x86 and use that for all architectures,
    leaving only the VIDIOC_DQEVENT32 variant as x86 specific. The original
    code was trying to be clever and use the same conversion helper for native
    32-bit code and compat mode, but that turned out to be too obscure so
    even I missed that bit I had introduced myself when I made the fix.
    
    Fixes: c344f07a ("media: v4l2-core: ignore native time32 ioctls on 64-bit")
    Reported-by: default avatarJohn Stultz <john.stultz@linaro.org>
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Tested-by: default avatarJohn Stultz <john.stultz@linaro.org>
    Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
    678d92b6
v4l2-compat-ioctl32.c 31.9 KB