Em Tue, 17 Apr 2018 10:58:24 -0300 Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxx> escreveu: > Em Tue, 17 Apr 2018 10:10:09 -0300 > Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxxx> escreveu: > > > Em Tue, 17 Apr 2018 10:01:31 -0300 > > Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxxx> escreveu: > > > > > > >> ->blocks is a u32, so this should be a u32 cast as well. > > > > > > > > Be aware that the unsigned char * cast is actually a bug: it will clamp the > > > > u32 'blocks' value to a u8. > > > > > > > > Regards, > > > > > > > > Hans > > > > > > What about this approach (code untested)? > > > > Even better: > > > > [PATCH] media: v4l2-compat-ioctl32: simplify casts > > > > Making the cast right for get_user/put_user is not trivial, as > > it needs to ensure that the types are the correct ones. > > > > Improve it by using macros. > > > > PS.: Patch untested > > Tested with: > > $ sudo modprobe vivid no_error_inj=1 > $ v4l2-compliance-32bits -a -s10 >32bits && v4l2-compliance-64bits -a -s10 > 64bits && diff 32bits 64bits As I was not running the very latest version of v4l2-compliance, I applied this patch to both 32 and 64 bit versions of it: https://patchwork.linuxtv.org/patch/48746/ Rebuilt and re-run. Those are the results: $ v4l2-compliance-32bits -a -s10 >32bits && v4l2-compliance-64bits -a -s10 > 64bits && diff -U0 32bits 64bits --- 32bits 2018-04-17 11:18:29.141240772 -0300 +++ 64bits 2018-04-17 11:18:40.635282341 -0300 @@ -1 +1 @@ -v4l2-compliance SHA : bc71e4a67c6fbc5940062843bc41e7c8679634ce, 32 bits +v4l2-compliance SHA : bc71e4a67c6fbc5940062843bc41e7c8679634ce, 64 bits Hans, Please check this patch and apply if you think it is worth: https://patchwork.linuxtv.org/patch/48746/ > > 32 bits version results: > > v4l2-compliance SHA : bc71e4a67c6fbc5940062843bc41e7c8679634ce > > Compliance test for device /dev/video0: > > Driver Info: > Driver name : vivid > Card type : vivid > Bus info : platform:vivid-000 > Driver version : 4.17.0 > Capabilities : 0x853f0df7 > Video Capture > Video Output > Video Overlay > VBI Capture > VBI Output > Sliced VBI Capture > Sliced VBI Output > RDS Capture > RDS Output > SDR Capture > Tuner > HW Frequency Seek > Modulator > Audio > Radio > Read/Write > Streaming > Extended Pix Format > Device Capabilities > Device Caps : 0x05230005 > Video Capture > Video Overlay > Tuner > Audio > Read/Write > Streaming > Extended Pix Format > > Required ioctls: > test VIDIOC_QUERYCAP: OK > > Allow for multiple opens: > test second /dev/video0 open: OK > test VIDIOC_QUERYCAP: OK > test VIDIOC_G/S_PRIORITY: OK > test for unlimited opens: OK > > Debug ioctls: > test VIDIOC_DBG_G/S_REGISTER: OK > test VIDIOC_LOG_STATUS: OK > > Input ioctls: > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK > test VIDIOC_G/S_FREQUENCY: OK > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) > test VIDIOC_ENUMAUDIO: OK > test VIDIOC_G/S/ENUMINPUT: OK > test VIDIOC_G/S_AUDIO: OK > Inputs: 4 Audio Inputs: 2 Tuners: 1 > > Output ioctls: > test VIDIOC_G/S_MODULATOR: OK (Not Supported) > test VIDIOC_G/S_FREQUENCY: OK > test VIDIOC_ENUMAUDOUT: OK (Not Supported) > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > Outputs: 0 Audio Outputs: 0 Modulators: 0 > > Input/Output configuration ioctls: > test VIDIOC_ENUM/G/S/QUERY_STD: OK > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK > test VIDIOC_DV_TIMINGS_CAP: OK > test VIDIOC_G/S_EDID: OK > > Control ioctls (Input 0): > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > test VIDIOC_G/S/TRY_EXT_CTRLS: OK > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 15 Private Controls: 39 > > Format ioctls (Input 0): > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK > test VIDIOC_G_FBUF: OK > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK (Not Supported) > test Composing: OK (Not Supported) > test Scaling: OK (Not Supported) > > Codec ioctls (Input 0): > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > Buffer ioctls (Input 0): > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test VIDIOC_EXPBUF: OK > > Control ioctls (Input 1): > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > test VIDIOC_G/S/TRY_EXT_CTRLS: OK > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 15 Private Controls: 39 > > Format ioctls (Input 1): > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK > test VIDIOC_G_FBUF: OK > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK > test Composing: OK > test Scaling: OK > > Codec ioctls (Input 1): > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > Buffer ioctls (Input 1): > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test VIDIOC_EXPBUF: OK > > Control ioctls (Input 2): > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > test VIDIOC_G/S/TRY_EXT_CTRLS: OK > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 15 Private Controls: 39 > > Format ioctls (Input 2): > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK > test VIDIOC_G_FBUF: OK > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK > test Composing: OK > test Scaling: OK > > Codec ioctls (Input 2): > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > Buffer ioctls (Input 2): > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test VIDIOC_EXPBUF: OK > > Control ioctls (Input 3): > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > test VIDIOC_G/S/TRY_EXT_CTRLS: OK > warn: v4l2-test-controls.cpp(825): V4L2_CID_DV_RX_POWER_PRESENT not found for input 3 > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 15 Private Controls: 39 > > Format ioctls (Input 3): > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK > test VIDIOC_G_FBUF: OK > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK > test Composing: OK > test Scaling: OK > > Codec ioctls (Input 3): > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > Buffer ioctls (Input 3): > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test VIDIOC_EXPBUF: OK > > Test input 0: > > Streaming ioctls: > test read/write: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test MMAP: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test USERPTR: OK > test DMABUF: Cannot test, specify --expbuf-device > > Test input 1: > > Streaming ioctls: > test read/write: OK > warn: v4l2-test-buffers.cpp(235): V4L2_BUF_FLAG_TIMECODE was used! > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test MMAP: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test USERPTR: OK > test DMABUF: Cannot test, specify --expbuf-device > > Test input 2: > > Streaming ioctls: > test read/write: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test MMAP: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test USERPTR: OK > test DMABUF: Cannot test, specify --expbuf-device > > Test input 3: > > Streaming ioctls: > test read/write: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test MMAP: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test USERPTR: OK > test DMABUF: Cannot test, specify --expbuf-device > > Total: 118, Succeeded: 118, Failed: 0, Warnings: 2 > > 64 bits result: > > > v4l2-compliance SHA : bc71e4a67c6fbc5940062843bc41e7c8679634ce > > Compliance test for device /dev/video0: > > Driver Info: > Driver name : vivid > Card type : vivid > Bus info : platform:vivid-000 > Driver version : 4.17.0 > Capabilities : 0x853f0df7 > Video Capture > Video Output > Video Overlay > VBI Capture > VBI Output > Sliced VBI Capture > Sliced VBI Output > RDS Capture > RDS Output > SDR Capture > Tuner > HW Frequency Seek > Modulator > Audio > Radio > Read/Write > Streaming > Extended Pix Format > Device Capabilities > Device Caps : 0x05230005 > Video Capture > Video Overlay > Tuner > Audio > Read/Write > Streaming > Extended Pix Format > > Required ioctls: > test VIDIOC_QUERYCAP: OK > > Allow for multiple opens: > test second /dev/video0 open: OK > test VIDIOC_QUERYCAP: OK > test VIDIOC_G/S_PRIORITY: OK > test for unlimited opens: OK > > Debug ioctls: > test VIDIOC_DBG_G/S_REGISTER: OK > test VIDIOC_LOG_STATUS: OK > > Input ioctls: > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK > test VIDIOC_G/S_FREQUENCY: OK > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) > test VIDIOC_ENUMAUDIO: OK > test VIDIOC_G/S/ENUMINPUT: OK > test VIDIOC_G/S_AUDIO: OK > Inputs: 4 Audio Inputs: 2 Tuners: 1 > > Output ioctls: > test VIDIOC_G/S_MODULATOR: OK (Not Supported) > test VIDIOC_G/S_FREQUENCY: OK > test VIDIOC_ENUMAUDOUT: OK (Not Supported) > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > Outputs: 0 Audio Outputs: 0 Modulators: 0 > > Input/Output configuration ioctls: > test VIDIOC_ENUM/G/S/QUERY_STD: OK > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK > test VIDIOC_DV_TIMINGS_CAP: OK > test VIDIOC_G/S_EDID: OK > > Control ioctls (Input 0): > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > test VIDIOC_G/S/TRY_EXT_CTRLS: OK > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 15 Private Controls: 39 > > Format ioctls (Input 0): > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK > test VIDIOC_G_FBUF: OK > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK (Not Supported) > test Composing: OK (Not Supported) > test Scaling: OK (Not Supported) > > Codec ioctls (Input 0): > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > Buffer ioctls (Input 0): > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test VIDIOC_EXPBUF: OK > > Control ioctls (Input 1): > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > test VIDIOC_G/S/TRY_EXT_CTRLS: OK > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 15 Private Controls: 39 > > Format ioctls (Input 1): > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK > test VIDIOC_G_FBUF: OK > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK > test Composing: OK > test Scaling: OK > > Codec ioctls (Input 1): > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > Buffer ioctls (Input 1): > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test VIDIOC_EXPBUF: OK > > Control ioctls (Input 2): > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > test VIDIOC_G/S/TRY_EXT_CTRLS: OK > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 15 Private Controls: 39 > > Format ioctls (Input 2): > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK > test VIDIOC_G_FBUF: OK > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK > test Composing: OK > test Scaling: OK > > Codec ioctls (Input 2): > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > Buffer ioctls (Input 2): > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test VIDIOC_EXPBUF: OK > > Control ioctls (Input 3): > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > test VIDIOC_G/S/TRY_EXT_CTRLS: OK > warn: v4l2-test-controls.cpp(825): V4L2_CID_DV_RX_POWER_PRESENT not found for input 3 > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 15 Private Controls: 39 > > Format ioctls (Input 3): > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK > test VIDIOC_G_FBUF: OK > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK > test Composing: OK > test Scaling: OK > > Codec ioctls (Input 3): > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > Buffer ioctls (Input 3): > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test VIDIOC_EXPBUF: OK > > Test input 0: > > Streaming ioctls: > test read/write: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test MMAP: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test USERPTR: OK > test DMABUF: Cannot test, specify --expbuf-device > > Test input 1: > > Streaming ioctls: > test read/write: OK > warn: v4l2-test-buffers.cpp(235): V4L2_BUF_FLAG_TIMECODE was used! > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test MMAP: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test USERPTR: OK > test DMABUF: Cannot test, specify --expbuf-device > > Test input 2: > > Streaming ioctls: > test read/write: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test MMAP: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test USERPTR: OK > test DMABUF: Cannot test, specify --expbuf-device > > Test input 3: > > Streaming ioctls: > test read/write: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test MMAP: OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > > > Video Capture: Frame #000 (polling) > Video Capture: Frame #001 (polling) > Video Capture: Frame #002 (polling) > Video Capture: Frame #003 (polling) > Video Capture: Frame #004 (polling) > Video Capture: Frame #005 (polling) > Video Capture: Frame #006 (polling) > Video Capture: Frame #007 (polling) > Video Capture: Frame #008 (polling) > Video Capture: Frame #009 (polling) > > test USERPTR: OK > test DMABUF: Cannot test, specify --expbuf-device > > Total: 118, Succeeded: 118, Failed: 0, Warnings: 2 > > > > > > Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxxx> > > > > diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c > > index 8c05dd9660d3..d2f0268427c2 100644 > > --- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c > > +++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c > > @@ -30,6 +30,24 @@ > > get_user(__assign_tmp, from) || put_user(__assign_tmp, to); \ > > }) > > > > +#define get_user_cast(__x, __ptr) \ > > +({ \ > > + get_user(__x, (typeof(*__ptr) __user *)(__ptr)); \ > > +}) > > + > > +#define put_user_force(__x, __ptr) \ > > +({ \ > > + put_user((typeof(*__x) __force *)(__x), __ptr); \ > > +}) > > + > > +#define assign_in_user_cast(to, from) \ > > +({ \ > > + typeof(*from) __assign_tmp; \ > > + \ > > + get_user_cast(__assign_tmp, from) || put_user(__assign_tmp, to);\ > > +}) > > + > > + > > static long native_ioctl(struct file *file, unsigned int cmd, unsigned long arg) > > { > > long ret = -ENOIOCTLCMD; > > @@ -543,8 +561,7 @@ static int get_v4l2_buffer32(struct v4l2_buffer __user *p64, > > return -EFAULT; > > > > uplane = aux_buf; > > - if (put_user((__force struct v4l2_plane *)uplane, > > - &p64->m.planes)) > > + if (put_user_force(uplane, &p64->m.planes)) > > return -EFAULT; > > > > while (num_planes--) { > > @@ -682,7 +699,7 @@ static int get_v4l2_framebuffer32(struct v4l2_framebuffer __user *p64, > > > > if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) || > > get_user(tmp, &p32->base) || > > - put_user((void __force *)compat_ptr(tmp), &p64->base) || > > + put_user_force(compat_ptr(tmp), &p64->base) || > > assign_in_user(&p64->capability, &p32->capability) || > > assign_in_user(&p64->flags, &p32->flags) || > > copy_in_user(&p64->fmt, &p32->fmt, sizeof(p64->fmt))) > > @@ -831,8 +848,7 @@ static int get_v4l2_ext_controls32(struct file *file, > > if (aux_space < count * sizeof(*kcontrols)) > > return -EFAULT; > > kcontrols = aux_buf; > > - if (put_user((__force struct v4l2_ext_control *)kcontrols, > > - &p64->controls)) > > + if (put_user_force(kcontrols, &p64->controls)) > > return -EFAULT; > > > > for (n = 0; n < count; n++) { > > @@ -898,12 +914,11 @@ static int put_v4l2_ext_controls32(struct file *file, > > unsigned int size = sizeof(*ucontrols); > > u32 id; > > > > - if (get_user(id, (unsigned int __user *)&kcontrols->id) || > > + if (get_user_cast(id, &kcontrols->id) || > > put_user(id, &ucontrols->id) || > > - assign_in_user(&ucontrols->size, > > - (unsigned int __user *)&kcontrols->size) || > > + assign_in_user_cast(&ucontrols->size, &kcontrols->size) || > > copy_in_user(&ucontrols->reserved2, > > - (unsigned int __user *)&kcontrols->reserved2, > > + (void __user *)&kcontrols->reserved2, > > sizeof(ucontrols->reserved2))) > > return -EFAULT; > > > > @@ -916,7 +931,7 @@ static int put_v4l2_ext_controls32(struct file *file, > > size -= sizeof(ucontrols->value64); > > > > if (copy_in_user(ucontrols, > > - (unsigned int __user *)kcontrols, size)) > > + (void __user *)kcontrols, size)) > > return -EFAULT; > > > > ucontrols++; > > @@ -970,10 +985,9 @@ static int get_v4l2_edid32(struct v4l2_edid __user *p64, > > if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) || > > assign_in_user(&p64->pad, &p32->pad) || > > assign_in_user(&p64->start_block, &p32->start_block) || > > - assign_in_user(&p64->blocks, > > - (unsigned char __user *)&p32->blocks) || > > + assign_in_user_cast(&p64->blocks, &p32->blocks) || > > get_user(tmp, &p32->edid) || > > - put_user((void __force *)compat_ptr(tmp), &p64->edid) || > > + put_user_force(compat_ptr(tmp), &p64->edid) || > > copy_in_user(p64->reserved, p32->reserved, sizeof(p64->reserved))) > > return -EFAULT; > > return 0; > > > > > > Thanks, > > Mauro > > > > Thanks, > Mauro Thanks, Mauro