| File: | drivers/media/v4l2-core/v4l2-compat-ioctl32.c |
| Warning: | line 773, column 3 Copies out a struct with a union element with different sizes |
| 1 | /* | |||
| 2 | * ioctl32.c: Conversion between 32bit and 64bit native ioctls. | |||
| 3 | * Separated from fs stuff by Arnd Bergmann <[email protected]> | |||
| 4 | * | |||
| 5 | * Copyright (C) 1997-2000 Jakub Jelinek ([email protected]) | |||
| 6 | * Copyright (C) 1998 Eddie C. Dost ([email protected]) | |||
| 7 | * Copyright (C) 2001,2002 Andi Kleen, SuSE Labs | |||
| 8 | * Copyright (C) 2003 Pavel Machek ([email protected]) | |||
| 9 | * Copyright (C) 2005 Philippe De Muyter ([email protected]) | |||
| 10 | * Copyright (C) 2008 Hans Verkuil <[email protected]> | |||
| 11 | * | |||
| 12 | * These routines maintain argument size conversion between 32bit and 64bit | |||
| 13 | * ioctls. | |||
| 14 | */ | |||
| 15 | ||||
| 16 | #include <linux1/compat.h> | |||
| 17 | #include <linux1/module.h> | |||
| 18 | #include <linux1/videodev2.h> | |||
| 19 | #include <linux1/v4l2-subdev.h> | |||
| 20 | #include <media/v4l2-dev.h> | |||
| 21 | #include <media/v4l2-ioctl.h> | |||
| 22 | ||||
| 23 | static long native_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 24 | { | |||
| 25 | long ret = -ENOIOCTLCMD515; | |||
| 26 | ||||
| 27 | if (file->f_op->unlocked_ioctl) | |||
| 28 | ret = file->f_op->unlocked_ioctl(file, cmd, arg); | |||
| 29 | ||||
| 30 | return ret; | |||
| 31 | } | |||
| 32 | ||||
| 33 | ||||
| 34 | struct v4l2_clip32 { | |||
| 35 | struct v4l2_rect c; | |||
| 36 | compat_caddr_t next; | |||
| 37 | }; | |||
| 38 | ||||
| 39 | struct v4l2_window32 { | |||
| 40 | struct v4l2_rect w; | |||
| 41 | __u32 field; /* enum v4l2_field */ | |||
| 42 | __u32 chromakey; | |||
| 43 | compat_caddr_t clips; /* actually struct v4l2_clip32 * */ | |||
| 44 | __u32 clipcount; | |||
| 45 | compat_caddr_t bitmap; | |||
| 46 | }; | |||
| 47 | ||||
| 48 | static int get_v4l2_window32(struct v4l2_window *kp, struct v4l2_window32 __user *up) | |||
| 49 | { | |||
| 50 | if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_window32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_window32), (get_current()->thread.addr_limit. seg)); })) || | |||
| 51 | copy_from_user(&kp->w, &up->w, sizeof(up->w)) || | |||
| 52 | get_user(kp->field, &up->field)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->field)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 52); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->field), "i" (sizeof(*(&up-> field)))); (kp->field) = ( __typeof__(*(&up->field) )) __val_gu; clang_analyzer_taint(&kp->field); __builtin_expect (__ret_gu, 0); }) || | |||
| 53 | get_user(kp->chromakey, &up->chromakey)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->chromakey)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 53); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->chromakey), "i" (sizeof(*(&up-> chromakey)))); (kp->chromakey) = ( __typeof__(*(&up-> chromakey))) __val_gu; clang_analyzer_taint(&kp->chromakey ); __builtin_expect(__ret_gu, 0); }) || | |||
| 54 | get_user(kp->clipcount, &up->clipcount)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->clipcount)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 54); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->clipcount), "i" (sizeof(*(&up-> clipcount)))); (kp->clipcount) = ( __typeof__(*(&up-> clipcount))) __val_gu; clang_analyzer_taint(&kp->clipcount ); __builtin_expect(__ret_gu, 0); })) | |||
| 55 | return -EFAULT14; | |||
| 56 | if (kp->clipcount > 2048) | |||
| 57 | return -EINVAL22; | |||
| 58 | if (kp->clipcount) { | |||
| 59 | struct v4l2_clip32 __user *uclips; | |||
| 60 | struct v4l2_clip __user *kclips; | |||
| 61 | int n = kp->clipcount; | |||
| 62 | compat_caddr_t p; | |||
| 63 | ||||
| 64 | if (get_user(p, &up->clips)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->clips)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 64); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->clips), "i" (sizeof(*(&up-> clips)))); (p) = ( __typeof__(*(&up->clips))) __val_gu ; clang_analyzer_taint(&p); __builtin_expect(__ret_gu, 0) ; })) | |||
| 65 | return -EFAULT14; | |||
| 66 | uclips = compat_ptr(p); | |||
| 67 | kclips = compat_alloc_user_space(n * sizeof(struct v4l2_clip)); | |||
| 68 | kp->clips = kclips; | |||
| 69 | while (--n >= 0) { | |||
| 70 | if (copy_in_user(&kclips->c, &uclips->c, sizeof(uclips->c))) | |||
| 71 | return -EFAULT14; | |||
| 72 | if (put_user(n ? kclips + 1 : NULL, &kclips->next)({ int __ret_pu; __typeof__(*(&kclips->next)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 72); __pu_val = n ? kclips + 1 : ((void *)0); switch (sizeof (*(&kclips->next))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&kclips->next) ))(__pu_val)), "c" (&kclips->next) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&kclips->next)))(__pu_val)), "c" (&kclips ->next) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&kclips->next) ))(__pu_val)), "c" (&kclips->next) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&kclips->next)))(__pu_val)), "c" (&kclips ->next) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&kclips->next) ))(__pu_val)), "c" (&kclips->next) : "ebx"); break; } __builtin_expect (__ret_pu, 0); })) | |||
| 73 | return -EFAULT14; | |||
| 74 | uclips += 1; | |||
| 75 | kclips += 1; | |||
| 76 | } | |||
| 77 | } else | |||
| 78 | kp->clips = NULL((void *)0); | |||
| 79 | return 0; | |||
| 80 | } | |||
| 81 | ||||
| 82 | static int put_v4l2_window32(struct v4l2_window *kp, struct v4l2_window32 __user *up) | |||
| 83 | { | |||
| 84 | if (copy_to_user(&up->w, &kp->w, sizeof(kp->w)) || | |||
| 85 | put_user(kp->field, &up->field)({ int __ret_pu; __typeof__(*(&up->field)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 85); __pu_val = kp->field; switch (sizeof(*(&up-> field))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->field)))(__pu_val)), "c" (&up->field) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->field)))(__pu_val)), "c" (&up->field) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->field)))(__pu_val)), "c" (& up->field) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->field)))( __pu_val)), "c" (&up->field) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ( (typeof(*(&up->field)))(__pu_val)), "c" (&up->field ) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 86 | put_user(kp->chromakey, &up->chromakey)({ int __ret_pu; __typeof__(*(&up->chromakey)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 86); __pu_val = kp->chromakey; switch (sizeof(*(&up-> chromakey))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->chromakey)))(__pu_val )), "c" (&up->chromakey) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->chromakey)))(__pu_val)), "c" (&up->chromakey) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&up->chromakey)))(__pu_val )), "c" (&up->chromakey) : "ebx"); break; case 8: asm volatile ("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(& up->chromakey)))(__pu_val)), "c" (&up->chromakey) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->chromakey)))(__pu_val )), "c" (&up->chromakey) : "ebx"); break; } __builtin_expect (__ret_pu, 0); }) || | |||
| 87 | put_user(kp->clipcount, &up->clipcount)({ int __ret_pu; __typeof__(*(&up->clipcount)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 87); __pu_val = kp->clipcount; switch (sizeof(*(&up-> clipcount))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->clipcount)))(__pu_val )), "c" (&up->clipcount) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->clipcount)))(__pu_val)), "c" (&up->clipcount) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&up->clipcount)))(__pu_val )), "c" (&up->clipcount) : "ebx"); break; case 8: asm volatile ("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(& up->clipcount)))(__pu_val)), "c" (&up->clipcount) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->clipcount)))(__pu_val )), "c" (&up->clipcount) : "ebx"); break; } __builtin_expect (__ret_pu, 0); })) | |||
| 88 | return -EFAULT14; | |||
| 89 | return 0; | |||
| 90 | } | |||
| 91 | ||||
| 92 | static inlineinline __attribute__((no_instrument_function)) int get_v4l2_pix_format(struct v4l2_pix_format *kp, struct v4l2_pix_format __user *up) | |||
| 93 | { | |||
| 94 | if (copy_from_user(kp, up, sizeof(struct v4l2_pix_format))) | |||
| 95 | return -EFAULT14; | |||
| 96 | return 0; | |||
| 97 | } | |||
| 98 | ||||
| 99 | static inlineinline __attribute__((no_instrument_function)) int get_v4l2_pix_format_mplane(struct v4l2_pix_format_mplane *kp, | |||
| 100 | struct v4l2_pix_format_mplane __user *up) | |||
| 101 | { | |||
| 102 | if (copy_from_user(kp, up, sizeof(struct v4l2_pix_format_mplane))) | |||
| 103 | return -EFAULT14; | |||
| 104 | return 0; | |||
| 105 | } | |||
| 106 | ||||
| 107 | static inlineinline __attribute__((no_instrument_function)) int put_v4l2_pix_format(struct v4l2_pix_format *kp, struct v4l2_pix_format __user *up) | |||
| 108 | { | |||
| 109 | if (copy_to_user(up, kp, sizeof(struct v4l2_pix_format))) | |||
| 110 | return -EFAULT14; | |||
| 111 | return 0; | |||
| 112 | } | |||
| 113 | ||||
| 114 | static inlineinline __attribute__((no_instrument_function)) int put_v4l2_pix_format_mplane(struct v4l2_pix_format_mplane *kp, | |||
| 115 | struct v4l2_pix_format_mplane __user *up) | |||
| 116 | { | |||
| 117 | if (copy_to_user(up, kp, sizeof(struct v4l2_pix_format_mplane))) | |||
| 118 | return -EFAULT14; | |||
| 119 | return 0; | |||
| 120 | } | |||
| 121 | ||||
| 122 | static inlineinline __attribute__((no_instrument_function)) int get_v4l2_vbi_format(struct v4l2_vbi_format *kp, struct v4l2_vbi_format __user *up) | |||
| 123 | { | |||
| 124 | if (copy_from_user(kp, up, sizeof(struct v4l2_vbi_format))) | |||
| 125 | return -EFAULT14; | |||
| 126 | return 0; | |||
| 127 | } | |||
| 128 | ||||
| 129 | static inlineinline __attribute__((no_instrument_function)) int put_v4l2_vbi_format(struct v4l2_vbi_format *kp, struct v4l2_vbi_format __user *up) | |||
| 130 | { | |||
| 131 | if (copy_to_user(up, kp, sizeof(struct v4l2_vbi_format))) | |||
| 132 | return -EFAULT14; | |||
| 133 | return 0; | |||
| 134 | } | |||
| 135 | ||||
| 136 | static inlineinline __attribute__((no_instrument_function)) int get_v4l2_sliced_vbi_format(struct v4l2_sliced_vbi_format *kp, struct v4l2_sliced_vbi_format __user *up) | |||
| 137 | { | |||
| 138 | if (copy_from_user(kp, up, sizeof(struct v4l2_sliced_vbi_format))) | |||
| 139 | return -EFAULT14; | |||
| 140 | return 0; | |||
| 141 | } | |||
| 142 | ||||
| 143 | static inlineinline __attribute__((no_instrument_function)) int put_v4l2_sliced_vbi_format(struct v4l2_sliced_vbi_format *kp, struct v4l2_sliced_vbi_format __user *up) | |||
| 144 | { | |||
| 145 | if (copy_to_user(up, kp, sizeof(struct v4l2_sliced_vbi_format))) | |||
| 146 | return -EFAULT14; | |||
| 147 | return 0; | |||
| 148 | } | |||
| 149 | ||||
| 150 | static inlineinline __attribute__((no_instrument_function)) int get_v4l2_sdr_format(struct v4l2_sdr_format *kp, struct v4l2_sdr_format __user *up) | |||
| 151 | { | |||
| 152 | if (copy_from_user(kp, up, sizeof(struct v4l2_sdr_format))) | |||
| 153 | return -EFAULT14; | |||
| 154 | return 0; | |||
| 155 | } | |||
| 156 | ||||
| 157 | static inlineinline __attribute__((no_instrument_function)) int put_v4l2_sdr_format(struct v4l2_sdr_format *kp, struct v4l2_sdr_format __user *up) | |||
| 158 | { | |||
| 159 | if (copy_to_user(up, kp, sizeof(struct v4l2_sdr_format))) | |||
| 160 | return -EFAULT14; | |||
| 161 | return 0; | |||
| 162 | } | |||
| 163 | ||||
| 164 | struct v4l2_format32 { | |||
| 165 | __u32 type; /* enum v4l2_buf_type */ | |||
| 166 | union { | |||
| 167 | struct v4l2_pix_format pix; | |||
| 168 | struct v4l2_pix_format_mplane pix_mp; | |||
| 169 | struct v4l2_window32 win; | |||
| 170 | struct v4l2_vbi_format vbi; | |||
| 171 | struct v4l2_sliced_vbi_format sliced; | |||
| 172 | struct v4l2_sdr_format sdr; | |||
| 173 | __u8 raw_data[200]; /* user-defined */ | |||
| 174 | } fmt; | |||
| 175 | }; | |||
| 176 | ||||
| 177 | /** | |||
| 178 | * struct v4l2_create_buffers32 - VIDIOC_CREATE_BUFS32 argument | |||
| 179 | * @index: on return, index of the first created buffer | |||
| 180 | * @count: entry: number of requested buffers, | |||
| 181 | * return: number of created buffers | |||
| 182 | * @memory: buffer memory type | |||
| 183 | * @format: frame format, for which buffers are requested | |||
| 184 | * @reserved: future extensions | |||
| 185 | */ | |||
| 186 | struct v4l2_create_buffers32 { | |||
| 187 | __u32 index; | |||
| 188 | __u32 count; | |||
| 189 | __u32 memory; /* enum v4l2_memory */ | |||
| 190 | struct v4l2_format32 format; | |||
| 191 | __u32 reserved[8]; | |||
| 192 | }; | |||
| 193 | ||||
| 194 | static int __get_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user *up) | |||
| 195 | { | |||
| 196 | if (get_user(kp->type, &up->type)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->type)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm ("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 196); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->type), "i" (sizeof(*(&up->type )))); (kp->type) = ( __typeof__(*(&up->type))) __val_gu ; clang_analyzer_taint(&kp->type); __builtin_expect(__ret_gu , 0); })) | |||
| 197 | return -EFAULT14; | |||
| 198 | ||||
| 199 | switch (kp->type) { | |||
| 200 | case V4L2_BUF_TYPE_VIDEO_CAPTURE: | |||
| 201 | case V4L2_BUF_TYPE_VIDEO_OUTPUT: | |||
| 202 | return get_v4l2_pix_format(&kp->fmt.pix, &up->fmt.pix); | |||
| 203 | case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: | |||
| 204 | case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: | |||
| 205 | return get_v4l2_pix_format_mplane(&kp->fmt.pix_mp, | |||
| 206 | &up->fmt.pix_mp); | |||
| 207 | case V4L2_BUF_TYPE_VIDEO_OVERLAY: | |||
| 208 | case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: | |||
| 209 | return get_v4l2_window32(&kp->fmt.win, &up->fmt.win); | |||
| 210 | case V4L2_BUF_TYPE_VBI_CAPTURE: | |||
| 211 | case V4L2_BUF_TYPE_VBI_OUTPUT: | |||
| 212 | return get_v4l2_vbi_format(&kp->fmt.vbi, &up->fmt.vbi); | |||
| 213 | case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: | |||
| 214 | case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: | |||
| 215 | return get_v4l2_sliced_vbi_format(&kp->fmt.sliced, &up->fmt.sliced); | |||
| 216 | case V4L2_BUF_TYPE_SDR_CAPTURE: | |||
| 217 | case V4L2_BUF_TYPE_SDR_OUTPUT: | |||
| 218 | return get_v4l2_sdr_format(&kp->fmt.sdr, &up->fmt.sdr); | |||
| 219 | default: | |||
| 220 | pr_info("compat_ioctl32: unexpected VIDIOC_FMT type %d\n",printk("\001" "6" "compat_ioctl32: unexpected VIDIOC_FMT type %d\n" , kp->type) | |||
| 221 | kp->type)printk("\001" "6" "compat_ioctl32: unexpected VIDIOC_FMT type %d\n" , kp->type); | |||
| 222 | return -EINVAL22; | |||
| 223 | } | |||
| 224 | } | |||
| 225 | ||||
| 226 | static int get_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user *up) | |||
| 227 | { | |||
| 228 | if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_format32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_format32), (get_current()->thread.addr_limit. seg)); }))) | |||
| 229 | return -EFAULT14; | |||
| 230 | return __get_v4l2_format32(kp, up); | |||
| 231 | } | |||
| 232 | ||||
| 233 | static int get_v4l2_create32(struct v4l2_create_buffers *kp, struct v4l2_create_buffers32 __user *up) | |||
| 234 | { | |||
| 235 | if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_create_buffers32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_create_buffers32), (get_current()->thread.addr_limit .seg)); })) || | |||
| 236 | copy_from_user(kp, up, offsetof(struct v4l2_create_buffers32, format)__builtin_offsetof(struct v4l2_create_buffers32, format))) | |||
| 237 | return -EFAULT14; | |||
| 238 | return __get_v4l2_format32(&kp->format, &up->format); | |||
| 239 | } | |||
| 240 | ||||
| 241 | static int __put_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user *up) | |||
| 242 | { | |||
| 243 | if (put_user(kp->type, &up->type)({ int __ret_pu; __typeof__(*(&up->type)) __pu_val; (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 243); __pu_val = kp->type; switch (sizeof(*(&up-> type))) { case 1: asm volatile("call __put_user_" "1" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->type)))(__pu_val)), "c" (&up->type) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->type)))(__pu_val )), "c" (&up->type) : "ebx"); break; case 4: asm volatile ("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(& up->type)))(__pu_val)), "c" (&up->type) : "ebx"); break ; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->type)))(__pu_val)), "c" (& up->type) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->type)))(__pu_val )), "c" (&up->type) : "ebx"); break; } __builtin_expect (__ret_pu, 0); })) | |||
| 244 | return -EFAULT14; | |||
| 245 | ||||
| 246 | switch (kp->type) { | |||
| 247 | case V4L2_BUF_TYPE_VIDEO_CAPTURE: | |||
| 248 | case V4L2_BUF_TYPE_VIDEO_OUTPUT: | |||
| 249 | return put_v4l2_pix_format(&kp->fmt.pix, &up->fmt.pix); | |||
| 250 | case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: | |||
| 251 | case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: | |||
| 252 | return put_v4l2_pix_format_mplane(&kp->fmt.pix_mp, | |||
| 253 | &up->fmt.pix_mp); | |||
| 254 | case V4L2_BUF_TYPE_VIDEO_OVERLAY: | |||
| 255 | case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: | |||
| 256 | return put_v4l2_window32(&kp->fmt.win, &up->fmt.win); | |||
| 257 | case V4L2_BUF_TYPE_VBI_CAPTURE: | |||
| 258 | case V4L2_BUF_TYPE_VBI_OUTPUT: | |||
| 259 | return put_v4l2_vbi_format(&kp->fmt.vbi, &up->fmt.vbi); | |||
| 260 | case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: | |||
| 261 | case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: | |||
| 262 | return put_v4l2_sliced_vbi_format(&kp->fmt.sliced, &up->fmt.sliced); | |||
| 263 | case V4L2_BUF_TYPE_SDR_CAPTURE: | |||
| 264 | case V4L2_BUF_TYPE_SDR_OUTPUT: | |||
| 265 | return put_v4l2_sdr_format(&kp->fmt.sdr, &up->fmt.sdr); | |||
| 266 | default: | |||
| 267 | pr_info("compat_ioctl32: unexpected VIDIOC_FMT type %d\n",printk("\001" "6" "compat_ioctl32: unexpected VIDIOC_FMT type %d\n" , kp->type) | |||
| 268 | kp->type)printk("\001" "6" "compat_ioctl32: unexpected VIDIOC_FMT type %d\n" , kp->type); | |||
| 269 | return -EINVAL22; | |||
| 270 | } | |||
| 271 | } | |||
| 272 | ||||
| 273 | static int put_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user *up) | |||
| 274 | { | |||
| 275 | if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_format32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_format32), (get_current()->thread.addr_limit. seg)); }))) | |||
| 276 | return -EFAULT14; | |||
| 277 | return __put_v4l2_format32(kp, up); | |||
| 278 | } | |||
| 279 | ||||
| 280 | static int put_v4l2_create32(struct v4l2_create_buffers *kp, struct v4l2_create_buffers32 __user *up) | |||
| 281 | { | |||
| 282 | if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_create_buffers32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_create_buffers32), (get_current()->thread.addr_limit .seg)); })) || | |||
| 283 | copy_to_user(up, kp, offsetof(struct v4l2_create_buffers32, format)__builtin_offsetof(struct v4l2_create_buffers32, format)) || | |||
| 284 | copy_to_user(up->reserved, kp->reserved, sizeof(kp->reserved))) | |||
| 285 | return -EFAULT14; | |||
| 286 | return __put_v4l2_format32(&kp->format, &up->format); | |||
| 287 | } | |||
| 288 | ||||
| 289 | struct v4l2_standard32 { | |||
| 290 | __u32 index; | |||
| 291 | compat_u64 id; | |||
| 292 | __u8 name[24]; | |||
| 293 | struct v4l2_fract frameperiod; /* Frames, not fields */ | |||
| 294 | __u32 framelines; | |||
| 295 | __u32 reserved[4]; | |||
| 296 | }; | |||
| 297 | ||||
| 298 | static int get_v4l2_standard32(struct v4l2_standard *kp, struct v4l2_standard32 __user *up) | |||
| 299 | { | |||
| 300 | /* other fields are not set by the user, nor used by the driver */ | |||
| 301 | if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_standard32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_standard32), (get_current()->thread.addr_limit .seg)); })) || | |||
| 302 | get_user(kp->index, &up->index)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->index)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 302); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->index), "i" (sizeof(*(&up-> index)))); (kp->index) = ( __typeof__(*(&up->index) )) __val_gu; clang_analyzer_taint(&kp->index); __builtin_expect (__ret_gu, 0); })) | |||
| 303 | return -EFAULT14; | |||
| 304 | return 0; | |||
| 305 | } | |||
| 306 | ||||
| 307 | static int put_v4l2_standard32(struct v4l2_standard *kp, struct v4l2_standard32 __user *up) | |||
| 308 | { | |||
| 309 | if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_standard32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_standard32), (get_current()->thread.addr_limit .seg)); })) || | |||
| 310 | put_user(kp->index, &up->index)({ int __ret_pu; __typeof__(*(&up->index)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 310); __pu_val = kp->index; switch (sizeof(*(&up-> index))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->index)))(__pu_val)), "c" (&up->index) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->index)))(__pu_val)), "c" (&up->index) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->index)))(__pu_val)), "c" (& up->index) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->index)))( __pu_val)), "c" (&up->index) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ( (typeof(*(&up->index)))(__pu_val)), "c" (&up->index ) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 311 | put_user(kp->id, &up->id)({ int __ret_pu; __typeof__(*(&up->id)) __pu_val; (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 311); __pu_val = kp->id; switch (sizeof(*(&up->id ))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->id)))(__pu_val)), "c" (&up ->id) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->id)))(__pu_val )), "c" (&up->id) : "ebx"); break; case 4: asm volatile ("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(& up->id)))(__pu_val)), "c" (&up->id) : "ebx"); break ; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->id)))(__pu_val)), "c" (&up ->id) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->id)))(__pu_val )), "c" (&up->id) : "ebx"); break; } __builtin_expect( __ret_pu, 0); }) || | |||
| 312 | copy_to_user(up->name, kp->name, 24) || | |||
| 313 | copy_to_user(&up->frameperiod, &kp->frameperiod, sizeof(kp->frameperiod)) || | |||
| 314 | put_user(kp->framelines, &up->framelines)({ int __ret_pu; __typeof__(*(&up->framelines)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 314); __pu_val = kp->framelines; switch (sizeof(*(&up ->framelines))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->framelines))) (__pu_val)), "c" (&up->framelines) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->framelines)))(__pu_val)), "c" (&up ->framelines) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&up->framelines )))(__pu_val)), "c" (&up->framelines) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->framelines)))(__pu_val)), "c" ( &up->framelines) : "ebx"); break; default: asm volatile ("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(& up->framelines)))(__pu_val)), "c" (&up->framelines) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 315 | copy_to_user(up->reserved, kp->reserved, 4 * sizeof(__u32))) | |||
| 316 | return -EFAULT14; | |||
| 317 | return 0; | |||
| 318 | } | |||
| 319 | ||||
| 320 | struct v4l2_plane32 { | |||
| 321 | __u32 bytesused; | |||
| 322 | __u32 length; | |||
| 323 | union { | |||
| 324 | __u32 mem_offset; | |||
| 325 | compat_long_t userptr; | |||
| 326 | __s32 fd; | |||
| 327 | } m; | |||
| 328 | __u32 data_offset; | |||
| 329 | __u32 reserved[11]; | |||
| 330 | }; | |||
| 331 | ||||
| 332 | struct v4l2_buffer32 { | |||
| 333 | __u32 index; | |||
| 334 | __u32 type; /* enum v4l2_buf_type */ | |||
| 335 | __u32 bytesused; | |||
| 336 | __u32 flags; | |||
| 337 | __u32 field; /* enum v4l2_field */ | |||
| 338 | struct compat_timeval timestamp; | |||
| 339 | struct v4l2_timecode timecode; | |||
| 340 | __u32 sequence; | |||
| 341 | ||||
| 342 | /* memory location */ | |||
| 343 | __u32 memory; /* enum v4l2_memory */ | |||
| 344 | union { | |||
| 345 | __u32 offset; | |||
| 346 | compat_long_t userptr; | |||
| 347 | compat_caddr_t planes; | |||
| 348 | __s32 fd; | |||
| 349 | } m; | |||
| 350 | __u32 length; | |||
| 351 | __u32 reserved2; | |||
| 352 | __u32 reserved; | |||
| 353 | }; | |||
| 354 | ||||
| 355 | static int get_v4l2_plane32(struct v4l2_plane __user *up, struct v4l2_plane32 __user *up32, | |||
| 356 | enum v4l2_memory memory) | |||
| 357 | { | |||
| 358 | void __user *up_pln; | |||
| 359 | compat_long_t p; | |||
| 360 | ||||
| 361 | if (copy_in_user(up, up32, 2 * sizeof(__u32)) || | |||
| 362 | copy_in_user(&up->data_offset, &up32->data_offset, | |||
| 363 | sizeof(__u32))) | |||
| 364 | return -EFAULT14; | |||
| 365 | ||||
| 366 | if (memory == V4L2_MEMORY_USERPTR) { | |||
| 367 | if (get_user(p, &up32->m.userptr)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up32->m.userptr)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 367); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up32->m.userptr), "i" (sizeof(*(&up32 ->m.userptr)))); (p) = ( __typeof__(*(&up32->m.userptr ))) __val_gu; clang_analyzer_taint(&p); __builtin_expect( __ret_gu, 0); })) | |||
| 368 | return -EFAULT14; | |||
| 369 | up_pln = compat_ptr(p); | |||
| 370 | if (put_user((unsigned long)up_pln, &up->m.userptr)({ int __ret_pu; __typeof__(*(&up->m.userptr)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 370); __pu_val = (unsigned long)up_pln; switch (sizeof(*(& up->m.userptr))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.userptr )))(__pu_val)), "c" (&up->m.userptr) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.userptr)))(__pu_val)), "c" (&up ->m.userptr) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.userptr )))(__pu_val)), "c" (&up->m.userptr) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.userptr)))(__pu_val)), "c" (&up ->m.userptr) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.userptr )))(__pu_val)), "c" (&up->m.userptr) : "ebx"); break; } __builtin_expect(__ret_pu, 0); })) | |||
| 371 | return -EFAULT14; | |||
| 372 | } else if (memory == V4L2_MEMORY_DMABUF) { | |||
| 373 | if (copy_in_user(&up->m.fd, &up32->m.fd, sizeof(int))) | |||
| 374 | return -EFAULT14; | |||
| 375 | } else { | |||
| 376 | if (copy_in_user(&up->m.mem_offset, &up32->m.mem_offset, | |||
| 377 | sizeof(__u32))) | |||
| 378 | return -EFAULT14; | |||
| 379 | } | |||
| 380 | ||||
| 381 | return 0; | |||
| 382 | } | |||
| 383 | ||||
| 384 | static int put_v4l2_plane32(struct v4l2_plane __user *up, struct v4l2_plane32 __user *up32, | |||
| 385 | enum v4l2_memory memory) | |||
| 386 | { | |||
| 387 | if (copy_in_user(up32, up, 2 * sizeof(__u32)) || | |||
| 388 | copy_in_user(&up32->data_offset, &up->data_offset, | |||
| 389 | sizeof(__u32))) | |||
| 390 | return -EFAULT14; | |||
| 391 | ||||
| 392 | /* For MMAP, driver might've set up the offset, so copy it back. | |||
| 393 | * USERPTR stays the same (was userspace-provided), so no copying. */ | |||
| 394 | if (memory == V4L2_MEMORY_MMAP) | |||
| 395 | if (copy_in_user(&up32->m.mem_offset, &up->m.mem_offset, | |||
| 396 | sizeof(__u32))) | |||
| 397 | return -EFAULT14; | |||
| 398 | /* For DMABUF, driver might've set up the fd, so copy it back. */ | |||
| 399 | if (memory == V4L2_MEMORY_DMABUF) | |||
| 400 | if (copy_in_user(&up32->m.fd, &up->m.fd, | |||
| 401 | sizeof(int))) | |||
| 402 | return -EFAULT14; | |||
| 403 | ||||
| 404 | return 0; | |||
| 405 | } | |||
| 406 | ||||
| 407 | static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user *up) | |||
| 408 | { | |||
| 409 | struct v4l2_plane32 __user *uplane32; | |||
| 410 | struct v4l2_plane __user *uplane; | |||
| 411 | compat_caddr_t p; | |||
| 412 | int num_planes; | |||
| 413 | int ret; | |||
| 414 | ||||
| 415 | if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_buffer32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_buffer32), (get_current()->thread.addr_limit. seg)); })) || | |||
| 416 | get_user(kp->index, &up->index)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->index)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 416); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->index), "i" (sizeof(*(&up-> index)))); (kp->index) = ( __typeof__(*(&up->index) )) __val_gu; clang_analyzer_taint(&kp->index); __builtin_expect (__ret_gu, 0); }) || | |||
| 417 | get_user(kp->type, &up->type)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->type)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm ("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 417); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->type), "i" (sizeof(*(&up->type )))); (kp->type) = ( __typeof__(*(&up->type))) __val_gu ; clang_analyzer_taint(&kp->type); __builtin_expect(__ret_gu , 0); }) || | |||
| 418 | get_user(kp->flags, &up->flags)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->flags)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 418); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->flags), "i" (sizeof(*(&up-> flags)))); (kp->flags) = ( __typeof__(*(&up->flags) )) __val_gu; clang_analyzer_taint(&kp->flags); __builtin_expect (__ret_gu, 0); }) || | |||
| 419 | get_user(kp->memory, &up->memory)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->memory)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 419); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->memory), "i" (sizeof(*(&up-> memory)))); (kp->memory) = ( __typeof__(*(&up->memory ))) __val_gu; clang_analyzer_taint(&kp->memory); __builtin_expect (__ret_gu, 0); }) || | |||
| 420 | get_user(kp->length, &up->length)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->length)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 420); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->length), "i" (sizeof(*(&up-> length)))); (kp->length) = ( __typeof__(*(&up->length ))) __val_gu; clang_analyzer_taint(&kp->length); __builtin_expect (__ret_gu, 0); })) | |||
| 421 | return -EFAULT14; | |||
| 422 | ||||
| 423 | if (V4L2_TYPE_IS_OUTPUT(kp->type)((kp->type) == V4L2_BUF_TYPE_VIDEO_OUTPUT || (kp->type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE || (kp->type) == V4L2_BUF_TYPE_VIDEO_OVERLAY || (kp->type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY || (kp ->type) == V4L2_BUF_TYPE_VBI_OUTPUT || (kp->type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT || (kp->type) == V4L2_BUF_TYPE_SDR_OUTPUT)) | |||
| 424 | if (get_user(kp->bytesused, &up->bytesused)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->bytesused)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 424); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->bytesused), "i" (sizeof(*(&up-> bytesused)))); (kp->bytesused) = ( __typeof__(*(&up-> bytesused))) __val_gu; clang_analyzer_taint(&kp->bytesused ); __builtin_expect(__ret_gu, 0); }) || | |||
| 425 | get_user(kp->field, &up->field)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->field)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 425); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->field), "i" (sizeof(*(&up-> field)))); (kp->field) = ( __typeof__(*(&up->field) )) __val_gu; clang_analyzer_taint(&kp->field); __builtin_expect (__ret_gu, 0); }) || | |||
| 426 | get_user(kp->timestamp.tv_sec, &up->timestamp.tv_sec)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->timestamp.tv_sec)) > sizeof(0UL), 0ULL, 0UL )) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 426); asm volatile("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->timestamp.tv_sec ), "i" (sizeof(*(&up->timestamp.tv_sec)))); (kp->timestamp .tv_sec) = ( __typeof__(*(&up->timestamp.tv_sec))) __val_gu ; clang_analyzer_taint(&kp->timestamp.tv_sec); __builtin_expect (__ret_gu, 0); }) || | |||
| 427 | get_user(kp->timestamp.tv_usec,({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->timestamp.tv_usec)) > sizeof(0UL), 0ULL, 0UL )) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 428); asm volatile("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->timestamp.tv_usec ), "i" (sizeof(*(&up->timestamp.tv_usec)))); (kp->timestamp .tv_usec) = ( __typeof__(*(&up->timestamp.tv_usec))) __val_gu ; clang_analyzer_taint(&kp->timestamp.tv_usec); __builtin_expect (__ret_gu, 0); }) | |||
| 428 | &up->timestamp.tv_usec)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->timestamp.tv_usec)) > sizeof(0UL), 0ULL, 0UL )) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 428); asm volatile("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->timestamp.tv_usec ), "i" (sizeof(*(&up->timestamp.tv_usec)))); (kp->timestamp .tv_usec) = ( __typeof__(*(&up->timestamp.tv_usec))) __val_gu ; clang_analyzer_taint(&kp->timestamp.tv_usec); __builtin_expect (__ret_gu, 0); })) | |||
| 429 | return -EFAULT14; | |||
| 430 | ||||
| 431 | if (V4L2_TYPE_IS_MULTIPLANAR(kp->type)((kp->type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE || (kp-> type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)) { | |||
| 432 | num_planes = kp->length; | |||
| 433 | if (num_planes == 0) { | |||
| 434 | kp->m.planes = NULL((void *)0); | |||
| 435 | /* num_planes == 0 is legal, e.g. when userspace doesn't | |||
| 436 | * need planes array on DQBUF*/ | |||
| 437 | return 0; | |||
| 438 | } | |||
| 439 | ||||
| 440 | if (get_user(p, &up->m.planes)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->m.planes)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 440); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->m.planes), "i" (sizeof(*(&up-> m.planes)))); (p) = ( __typeof__(*(&up->m.planes))) __val_gu ; clang_analyzer_taint(&p); __builtin_expect(__ret_gu, 0) ; })) | |||
| 441 | return -EFAULT14; | |||
| 442 | ||||
| 443 | uplane32 = compat_ptr(p); | |||
| 444 | if (!access_ok(VERIFY_READ, uplane32,(!({ (void)0; __chk_range_not_ok((unsigned long )(uplane32), num_planes * sizeof(struct v4l2_plane32), (get_current()->thread.addr_limit .seg)); })) | |||
| 445 | num_planes * sizeof(struct v4l2_plane32))(!({ (void)0; __chk_range_not_ok((unsigned long )(uplane32), num_planes * sizeof(struct v4l2_plane32), (get_current()->thread.addr_limit .seg)); }))) | |||
| 446 | return -EFAULT14; | |||
| 447 | ||||
| 448 | /* We don't really care if userspace decides to kill itself | |||
| 449 | * by passing a very big num_planes value */ | |||
| 450 | uplane = compat_alloc_user_space(num_planes * | |||
| 451 | sizeof(struct v4l2_plane)); | |||
| 452 | kp->m.planes = (__force struct v4l2_plane *)uplane; | |||
| 453 | ||||
| 454 | while (--num_planes >= 0) { | |||
| 455 | ret = get_v4l2_plane32(uplane, uplane32, kp->memory); | |||
| 456 | if (ret) | |||
| 457 | return ret; | |||
| 458 | ++uplane; | |||
| 459 | ++uplane32; | |||
| 460 | } | |||
| 461 | } else { | |||
| 462 | switch (kp->memory) { | |||
| 463 | case V4L2_MEMORY_MMAP: | |||
| 464 | if (get_user(kp->m.offset, &up->m.offset)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->m.offset)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 464); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->m.offset), "i" (sizeof(*(&up-> m.offset)))); (kp->m.offset) = ( __typeof__(*(&up-> m.offset))) __val_gu; clang_analyzer_taint(&kp->m.offset ); __builtin_expect(__ret_gu, 0); })) | |||
| 465 | return -EFAULT14; | |||
| 466 | break; | |||
| 467 | case V4L2_MEMORY_USERPTR: | |||
| 468 | { | |||
| 469 | compat_long_t tmp; | |||
| 470 | ||||
| 471 | if (get_user(tmp, &up->m.userptr)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->m.userptr)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 471); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->m.userptr), "i" (sizeof(*(&up-> m.userptr)))); (tmp) = ( __typeof__(*(&up->m.userptr)) ) __val_gu; clang_analyzer_taint(&tmp); __builtin_expect( __ret_gu, 0); })) | |||
| 472 | return -EFAULT14; | |||
| 473 | ||||
| 474 | kp->m.userptr = (unsigned long)compat_ptr(tmp); | |||
| 475 | } | |||
| 476 | break; | |||
| 477 | case V4L2_MEMORY_OVERLAY: | |||
| 478 | if (get_user(kp->m.offset, &up->m.offset)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->m.offset)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 478); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->m.offset), "i" (sizeof(*(&up-> m.offset)))); (kp->m.offset) = ( __typeof__(*(&up-> m.offset))) __val_gu; clang_analyzer_taint(&kp->m.offset ); __builtin_expect(__ret_gu, 0); })) | |||
| 479 | return -EFAULT14; | |||
| 480 | break; | |||
| 481 | case V4L2_MEMORY_DMABUF: | |||
| 482 | if (get_user(kp->m.fd, &up->m.fd)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->m.fd)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm ("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 482); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->m.fd), "i" (sizeof(*(&up->m .fd)))); (kp->m.fd) = ( __typeof__(*(&up->m.fd))) __val_gu ; clang_analyzer_taint(&kp->m.fd); __builtin_expect(__ret_gu , 0); })) | |||
| 483 | return -EFAULT14; | |||
| 484 | break; | |||
| 485 | } | |||
| 486 | } | |||
| 487 | ||||
| 488 | return 0; | |||
| 489 | } | |||
| 490 | ||||
| 491 | static int put_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user *up) | |||
| 492 | { | |||
| 493 | struct v4l2_plane32 __user *uplane32; | |||
| 494 | struct v4l2_plane __user *uplane; | |||
| 495 | compat_caddr_t p; | |||
| 496 | int num_planes; | |||
| 497 | int ret; | |||
| 498 | ||||
| 499 | if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_buffer32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_buffer32), (get_current()->thread.addr_limit. seg)); })) || | |||
| 500 | put_user(kp->index, &up->index)({ int __ret_pu; __typeof__(*(&up->index)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 500); __pu_val = kp->index; switch (sizeof(*(&up-> index))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->index)))(__pu_val)), "c" (&up->index) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->index)))(__pu_val)), "c" (&up->index) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->index)))(__pu_val)), "c" (& up->index) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->index)))( __pu_val)), "c" (&up->index) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ( (typeof(*(&up->index)))(__pu_val)), "c" (&up->index ) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 501 | put_user(kp->type, &up->type)({ int __ret_pu; __typeof__(*(&up->type)) __pu_val; (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 501); __pu_val = kp->type; switch (sizeof(*(&up-> type))) { case 1: asm volatile("call __put_user_" "1" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->type)))(__pu_val)), "c" (&up->type) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->type)))(__pu_val )), "c" (&up->type) : "ebx"); break; case 4: asm volatile ("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(& up->type)))(__pu_val)), "c" (&up->type) : "ebx"); break ; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->type)))(__pu_val)), "c" (& up->type) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->type)))(__pu_val )), "c" (&up->type) : "ebx"); break; } __builtin_expect (__ret_pu, 0); }) || | |||
| 502 | put_user(kp->flags, &up->flags)({ int __ret_pu; __typeof__(*(&up->flags)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 502); __pu_val = kp->flags; switch (sizeof(*(&up-> flags))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->flags)))(__pu_val)), "c" (&up->flags) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->flags)))(__pu_val)), "c" (&up->flags) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->flags)))(__pu_val)), "c" (& up->flags) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->flags)))( __pu_val)), "c" (&up->flags) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ( (typeof(*(&up->flags)))(__pu_val)), "c" (&up->flags ) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 503 | put_user(kp->memory, &up->memory)({ int __ret_pu; __typeof__(*(&up->memory)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 503); __pu_val = kp->memory; switch (sizeof(*(&up-> memory))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->memory)))(__pu_val)) , "c" (&up->memory) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->memory)))(__pu_val)), "c" (&up->memory) : "ebx" ); break; case 4: asm volatile("call __put_user_" "4" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->memory)))(__pu_val)), "c" (&up->memory) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->memory))) (__pu_val)), "c" (&up->memory) : "ebx"); break; default : asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->memory)))(__pu_val)), "c" (&up-> memory) : "ebx"); break; } __builtin_expect(__ret_pu, 0); })) | |||
| 504 | return -EFAULT14; | |||
| 505 | ||||
| 506 | if (put_user(kp->bytesused, &up->bytesused)({ int __ret_pu; __typeof__(*(&up->bytesused)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 506); __pu_val = kp->bytesused; switch (sizeof(*(&up ->bytesused))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->bytesused)))( __pu_val)), "c" (&up->bytesused) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->bytesused)))(__pu_val)), "c" (&up ->bytesused) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&up->bytesused )))(__pu_val)), "c" (&up->bytesused) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->bytesused)))(__pu_val)), "c" (&up ->bytesused) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->bytesused )))(__pu_val)), "c" (&up->bytesused) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 507 | put_user(kp->field, &up->field)({ int __ret_pu; __typeof__(*(&up->field)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 507); __pu_val = kp->field; switch (sizeof(*(&up-> field))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->field)))(__pu_val)), "c" (&up->field) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->field)))(__pu_val)), "c" (&up->field) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->field)))(__pu_val)), "c" (& up->field) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->field)))( __pu_val)), "c" (&up->field) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ( (typeof(*(&up->field)))(__pu_val)), "c" (&up->field ) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 508 | put_user(kp->timestamp.tv_sec, &up->timestamp.tv_sec)({ int __ret_pu; __typeof__(*(&up->timestamp.tv_sec)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 508); __pu_val = kp->timestamp.tv_sec; switch (sizeof(*( &up->timestamp.tv_sec))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->timestamp .tv_sec)))(__pu_val)), "c" (&up->timestamp.tv_sec) : "ebx" ); break; case 2: asm volatile("call __put_user_" "2" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->timestamp.tv_sec)))(__pu_val )), "c" (&up->timestamp.tv_sec) : "ebx"); break; case 4 : asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&up->timestamp.tv_sec)))(__pu_val)), "c" ( &up->timestamp.tv_sec) : "ebx"); break; case 8: asm volatile ("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(& up->timestamp.tv_sec)))(__pu_val)), "c" (&up->timestamp .tv_sec) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->timestamp .tv_sec)))(__pu_val)), "c" (&up->timestamp.tv_sec) : "ebx" ); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 509 | put_user(kp->timestamp.tv_usec, &up->timestamp.tv_usec)({ int __ret_pu; __typeof__(*(&up->timestamp.tv_usec)) __pu_val; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 509); __pu_val = kp->timestamp.tv_usec; switch (sizeof(* (&up->timestamp.tv_usec))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->timestamp .tv_usec)))(__pu_val)), "c" (&up->timestamp.tv_usec) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->timestamp.tv_usec )))(__pu_val)), "c" (&up->timestamp.tv_usec) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->timestamp.tv_usec)))(__pu_val) ), "c" (&up->timestamp.tv_usec) : "ebx"); break; case 8 : asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->timestamp.tv_usec)))(__pu_val)), "c" ( &up->timestamp.tv_usec) : "ebx"); break; default: asm volatile ("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(& up->timestamp.tv_usec)))(__pu_val)), "c" (&up->timestamp .tv_usec) : "ebx"); break; } __builtin_expect(__ret_pu, 0); } ) || | |||
| 510 | copy_to_user(&up->timecode, &kp->timecode, sizeof(struct v4l2_timecode)) || | |||
| 511 | put_user(kp->sequence, &up->sequence)({ int __ret_pu; __typeof__(*(&up->sequence)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 511); __pu_val = kp->sequence; switch (sizeof(*(&up-> sequence))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->sequence)))(__pu_val )), "c" (&up->sequence) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->sequence)))(__pu_val)), "c" (&up->sequence) : "ebx" ); break; case 4: asm volatile("call __put_user_" "4" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->sequence)))(__pu_val)) , "c" (&up->sequence) : "ebx"); break; case 8: asm volatile ("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(& up->sequence)))(__pu_val)), "c" (&up->sequence) : "ebx" ); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->sequence)))(__pu_val )), "c" (&up->sequence) : "ebx"); break; } __builtin_expect (__ret_pu, 0); }) || | |||
| 512 | put_user(kp->reserved2, &up->reserved2)({ int __ret_pu; __typeof__(*(&up->reserved2)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 512); __pu_val = kp->reserved2; switch (sizeof(*(&up ->reserved2))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->reserved2)))( __pu_val)), "c" (&up->reserved2) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->reserved2)))(__pu_val)), "c" (&up ->reserved2) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&up->reserved2 )))(__pu_val)), "c" (&up->reserved2) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->reserved2)))(__pu_val)), "c" (&up ->reserved2) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->reserved2 )))(__pu_val)), "c" (&up->reserved2) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 513 | put_user(kp->reserved, &up->reserved)({ int __ret_pu; __typeof__(*(&up->reserved)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 513); __pu_val = kp->reserved; switch (sizeof(*(&up-> reserved))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->reserved)))(__pu_val )), "c" (&up->reserved) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->reserved)))(__pu_val)), "c" (&up->reserved) : "ebx" ); break; case 4: asm volatile("call __put_user_" "4" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->reserved)))(__pu_val)) , "c" (&up->reserved) : "ebx"); break; case 8: asm volatile ("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(& up->reserved)))(__pu_val)), "c" (&up->reserved) : "ebx" ); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->reserved)))(__pu_val )), "c" (&up->reserved) : "ebx"); break; } __builtin_expect (__ret_pu, 0); }) || | |||
| 514 | put_user(kp->length, &up->length)({ int __ret_pu; __typeof__(*(&up->length)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 514); __pu_val = kp->length; switch (sizeof(*(&up-> length))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->length)))(__pu_val)) , "c" (&up->length) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->length)))(__pu_val)), "c" (&up->length) : "ebx" ); break; case 4: asm volatile("call __put_user_" "4" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->length)))(__pu_val)), "c" (&up->length) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->length))) (__pu_val)), "c" (&up->length) : "ebx"); break; default : asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->length)))(__pu_val)), "c" (&up-> length) : "ebx"); break; } __builtin_expect(__ret_pu, 0); })) | |||
| 515 | return -EFAULT14; | |||
| 516 | ||||
| 517 | if (V4L2_TYPE_IS_MULTIPLANAR(kp->type)((kp->type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE || (kp-> type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)) { | |||
| 518 | num_planes = kp->length; | |||
| 519 | if (num_planes == 0) | |||
| 520 | return 0; | |||
| 521 | ||||
| 522 | uplane = (__force struct v4l2_plane __user *)kp->m.planes; | |||
| 523 | if (get_user(p, &up->m.planes)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->m.planes)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 523); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->m.planes), "i" (sizeof(*(&up-> m.planes)))); (p) = ( __typeof__(*(&up->m.planes))) __val_gu ; clang_analyzer_taint(&p); __builtin_expect(__ret_gu, 0) ; })) | |||
| 524 | return -EFAULT14; | |||
| 525 | uplane32 = compat_ptr(p); | |||
| 526 | ||||
| 527 | while (--num_planes >= 0) { | |||
| 528 | ret = put_v4l2_plane32(uplane, uplane32, kp->memory); | |||
| 529 | if (ret) | |||
| 530 | return ret; | |||
| 531 | ++uplane; | |||
| 532 | ++uplane32; | |||
| 533 | } | |||
| 534 | } else { | |||
| 535 | switch (kp->memory) { | |||
| 536 | case V4L2_MEMORY_MMAP: | |||
| 537 | if (put_user(kp->m.offset, &up->m.offset)({ int __ret_pu; __typeof__(*(&up->m.offset)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 537); __pu_val = kp->m.offset; switch (sizeof(*(&up-> m.offset))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.offset)))(__pu_val )), "c" (&up->m.offset) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->m.offset)))(__pu_val)), "c" (&up->m.offset) : "ebx" ); break; case 4: asm volatile("call __put_user_" "4" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->m.offset)))(__pu_val)) , "c" (&up->m.offset) : "ebx"); break; case 8: asm volatile ("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(& up->m.offset)))(__pu_val)), "c" (&up->m.offset) : "ebx" ); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.offset)))(__pu_val )), "c" (&up->m.offset) : "ebx"); break; } __builtin_expect (__ret_pu, 0); })) | |||
| 538 | return -EFAULT14; | |||
| 539 | break; | |||
| 540 | case V4L2_MEMORY_USERPTR: | |||
| 541 | if (put_user(kp->m.userptr, &up->m.userptr)({ int __ret_pu; __typeof__(*(&up->m.userptr)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 541); __pu_val = kp->m.userptr; switch (sizeof(*(&up ->m.userptr))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.userptr)))( __pu_val)), "c" (&up->m.userptr) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.userptr)))(__pu_val)), "c" (&up ->m.userptr) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.userptr )))(__pu_val)), "c" (&up->m.userptr) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.userptr)))(__pu_val)), "c" (&up ->m.userptr) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.userptr )))(__pu_val)), "c" (&up->m.userptr) : "ebx"); break; } __builtin_expect(__ret_pu, 0); })) | |||
| 542 | return -EFAULT14; | |||
| 543 | break; | |||
| 544 | case V4L2_MEMORY_OVERLAY: | |||
| 545 | if (put_user(kp->m.offset, &up->m.offset)({ int __ret_pu; __typeof__(*(&up->m.offset)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 545); __pu_val = kp->m.offset; switch (sizeof(*(&up-> m.offset))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.offset)))(__pu_val )), "c" (&up->m.offset) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->m.offset)))(__pu_val)), "c" (&up->m.offset) : "ebx" ); break; case 4: asm volatile("call __put_user_" "4" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->m.offset)))(__pu_val)) , "c" (&up->m.offset) : "ebx"); break; case 8: asm volatile ("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(& up->m.offset)))(__pu_val)), "c" (&up->m.offset) : "ebx" ); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.offset)))(__pu_val )), "c" (&up->m.offset) : "ebx"); break; } __builtin_expect (__ret_pu, 0); })) | |||
| 546 | return -EFAULT14; | |||
| 547 | break; | |||
| 548 | case V4L2_MEMORY_DMABUF: | |||
| 549 | if (put_user(kp->m.fd, &up->m.fd)({ int __ret_pu; __typeof__(*(&up->m.fd)) __pu_val; (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 549); __pu_val = kp->m.fd; switch (sizeof(*(&up-> m.fd))) { case 1: asm volatile("call __put_user_" "1" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->m.fd)))(__pu_val)), "c" (&up->m.fd) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.fd)))(__pu_val )), "c" (&up->m.fd) : "ebx"); break; case 4: asm volatile ("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(& up->m.fd)))(__pu_val)), "c" (&up->m.fd) : "ebx"); break ; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->m.fd)))(__pu_val)), "c" (& up->m.fd) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->m.fd)))(__pu_val )), "c" (&up->m.fd) : "ebx"); break; } __builtin_expect (__ret_pu, 0); })) | |||
| 550 | return -EFAULT14; | |||
| 551 | break; | |||
| 552 | } | |||
| 553 | } | |||
| 554 | ||||
| 555 | return 0; | |||
| 556 | } | |||
| 557 | ||||
| 558 | struct v4l2_framebuffer32 { | |||
| 559 | __u32 capability; | |||
| 560 | __u32 flags; | |||
| 561 | compat_caddr_t base; | |||
| 562 | struct { | |||
| 563 | __u32 width; | |||
| 564 | __u32 height; | |||
| 565 | __u32 pixelformat; | |||
| 566 | __u32 field; | |||
| 567 | __u32 bytesperline; | |||
| 568 | __u32 sizeimage; | |||
| 569 | __u32 colorspace; | |||
| 570 | __u32 priv; | |||
| 571 | } fmt; | |||
| 572 | }; | |||
| 573 | ||||
| 574 | static int get_v4l2_framebuffer32(struct v4l2_framebuffer *kp, struct v4l2_framebuffer32 __user *up) | |||
| 575 | { | |||
| 576 | u32 tmp; | |||
| 577 | ||||
| 578 | if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_framebuffer32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_framebuffer32), (get_current()->thread.addr_limit .seg)); })) || | |||
| 579 | get_user(tmp, &up->base)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->base)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm ("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 579); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->base), "i" (sizeof(*(&up->base )))); (tmp) = ( __typeof__(*(&up->base))) __val_gu; clang_analyzer_taint (&tmp); __builtin_expect(__ret_gu, 0); }) || | |||
| 580 | get_user(kp->capability, &up->capability)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->capability)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 580); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->capability), "i" (sizeof(*(&up ->capability)))); (kp->capability) = ( __typeof__(*(& up->capability))) __val_gu; clang_analyzer_taint(&kp-> capability); __builtin_expect(__ret_gu, 0); }) || | |||
| 581 | get_user(kp->flags, &up->flags)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->flags)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 581); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->flags), "i" (sizeof(*(&up-> flags)))); (kp->flags) = ( __typeof__(*(&up->flags) )) __val_gu; clang_analyzer_taint(&kp->flags); __builtin_expect (__ret_gu, 0); }) || | |||
| 582 | copy_from_user(&kp->fmt, &up->fmt, sizeof(up->fmt))) | |||
| 583 | return -EFAULT14; | |||
| 584 | kp->base = (__force void *)compat_ptr(tmp); | |||
| 585 | return 0; | |||
| 586 | } | |||
| 587 | ||||
| 588 | static int put_v4l2_framebuffer32(struct v4l2_framebuffer *kp, struct v4l2_framebuffer32 __user *up) | |||
| 589 | { | |||
| 590 | u32 tmp = (u32)((unsigned long)kp->base); | |||
| 591 | ||||
| 592 | if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_framebuffer32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_framebuffer32), (get_current()->thread.addr_limit .seg)); })) || | |||
| 593 | put_user(tmp, &up->base)({ int __ret_pu; __typeof__(*(&up->base)) __pu_val; (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 593); __pu_val = tmp; switch (sizeof(*(&up->base))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->base)))(__pu_val)), "c" (& up->base) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->base)))(__pu_val )), "c" (&up->base) : "ebx"); break; case 4: asm volatile ("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(& up->base)))(__pu_val)), "c" (&up->base) : "ebx"); break ; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->base)))(__pu_val)), "c" (& up->base) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->base)))(__pu_val )), "c" (&up->base) : "ebx"); break; } __builtin_expect (__ret_pu, 0); }) || | |||
| 594 | put_user(kp->capability, &up->capability)({ int __ret_pu; __typeof__(*(&up->capability)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 594); __pu_val = kp->capability; switch (sizeof(*(&up ->capability))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->capability))) (__pu_val)), "c" (&up->capability) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->capability)))(__pu_val)), "c" (&up ->capability) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&up->capability )))(__pu_val)), "c" (&up->capability) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->capability)))(__pu_val)), "c" ( &up->capability) : "ebx"); break; default: asm volatile ("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(& up->capability)))(__pu_val)), "c" (&up->capability) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 595 | put_user(kp->flags, &up->flags)({ int __ret_pu; __typeof__(*(&up->flags)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 595); __pu_val = kp->flags; switch (sizeof(*(&up-> flags))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->flags)))(__pu_val)), "c" (&up->flags) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->flags)))(__pu_val)), "c" (&up->flags) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->flags)))(__pu_val)), "c" (& up->flags) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->flags)))( __pu_val)), "c" (&up->flags) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ( (typeof(*(&up->flags)))(__pu_val)), "c" (&up->flags ) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 596 | copy_to_user(&up->fmt, &kp->fmt, sizeof(up->fmt))) | |||
| 597 | return -EFAULT14; | |||
| 598 | return 0; | |||
| 599 | } | |||
| 600 | ||||
| 601 | struct v4l2_input32 { | |||
| 602 | __u32 index; /* Which input */ | |||
| 603 | __u8 name[32]; /* Label */ | |||
| 604 | __u32 type; /* Type of input */ | |||
| 605 | __u32 audioset; /* Associated audios (bitfield) */ | |||
| 606 | __u32 tuner; /* Associated tuner */ | |||
| 607 | compat_u64 std; | |||
| 608 | __u32 status; | |||
| 609 | __u32 reserved[4]; | |||
| 610 | }; | |||
| 611 | ||||
| 612 | /* The 64-bit v4l2_input struct has extra padding at the end of the struct. | |||
| 613 | Otherwise it is identical to the 32-bit version. */ | |||
| 614 | static inlineinline __attribute__((no_instrument_function)) int get_v4l2_input32(struct v4l2_input *kp, struct v4l2_input32 __user *up) | |||
| 615 | { | |||
| 616 | if (copy_from_user(kp, up, sizeof(struct v4l2_input32))) | |||
| 617 | return -EFAULT14; | |||
| 618 | return 0; | |||
| 619 | } | |||
| 620 | ||||
| 621 | static inlineinline __attribute__((no_instrument_function)) int put_v4l2_input32(struct v4l2_input *kp, struct v4l2_input32 __user *up) | |||
| 622 | { | |||
| 623 | if (copy_to_user(up, kp, sizeof(struct v4l2_input32))) | |||
| 624 | return -EFAULT14; | |||
| 625 | return 0; | |||
| 626 | } | |||
| 627 | ||||
| 628 | struct v4l2_ext_controls32 { | |||
| 629 | __u32 which; | |||
| 630 | __u32 count; | |||
| 631 | __u32 error_idx; | |||
| 632 | __u32 reserved[2]; | |||
| 633 | compat_caddr_t controls; /* actually struct v4l2_ext_control32 * */ | |||
| 634 | }; | |||
| 635 | ||||
| 636 | struct v4l2_ext_control32 { | |||
| 637 | __u32 id; | |||
| 638 | __u32 size; | |||
| 639 | __u32 reserved2[1]; | |||
| 640 | union { | |||
| 641 | __s32 value; | |||
| 642 | __s64 value64; | |||
| 643 | compat_caddr_t string; /* actually char * */ | |||
| 644 | }; | |||
| 645 | } __attribute__ ((packed)); | |||
| 646 | ||||
| 647 | /* The following function really belong in v4l2-common, but that causes | |||
| 648 | a circular dependency between modules. We need to think about this, but | |||
| 649 | for now this will do. */ | |||
| 650 | ||||
| 651 | /* Return non-zero if this control is a pointer type. Currently only | |||
| 652 | type STRING is a pointer type. */ | |||
| 653 | static inlineinline __attribute__((no_instrument_function)) int ctrl_is_pointer(u32 id) | |||
| 654 | { | |||
| 655 | switch (id) { | |||
| 656 | case V4L2_CID_RDS_TX_PS_NAME((0x009b0000 | 0x900) + 5): | |||
| 657 | case V4L2_CID_RDS_TX_RADIO_TEXT((0x009b0000 | 0x900) + 6): | |||
| 658 | return 1; | |||
| 659 | default: | |||
| 660 | return 0; | |||
| 661 | } | |||
| 662 | } | |||
| 663 | ||||
| 664 | static int get_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext_controls32 __user *up) | |||
| 665 | { | |||
| 666 | struct v4l2_ext_control32 __user *ucontrols; | |||
| 667 | struct v4l2_ext_control __user *kcontrols; | |||
| 668 | int n; | |||
| 669 | compat_caddr_t p; | |||
| 670 | ||||
| 671 | if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_ext_controls32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_ext_controls32), (get_current()->thread.addr_limit .seg)); })) || | |||
| 672 | get_user(kp->which, &up->which)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->which)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 672); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->which), "i" (sizeof(*(&up-> which)))); (kp->which) = ( __typeof__(*(&up->which) )) __val_gu; clang_analyzer_taint(&kp->which); __builtin_expect (__ret_gu, 0); }) || | |||
| 673 | get_user(kp->count, &up->count)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->count)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 673); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->count), "i" (sizeof(*(&up-> count)))); (kp->count) = ( __typeof__(*(&up->count) )) __val_gu; clang_analyzer_taint(&kp->count); __builtin_expect (__ret_gu, 0); }) || | |||
| 674 | get_user(kp->error_idx, &up->error_idx)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->error_idx)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 674); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->error_idx), "i" (sizeof(*(&up-> error_idx)))); (kp->error_idx) = ( __typeof__(*(&up-> error_idx))) __val_gu; clang_analyzer_taint(&kp->error_idx ); __builtin_expect(__ret_gu, 0); }) || | |||
| 675 | copy_from_user(kp->reserved, up->reserved, | |||
| 676 | sizeof(kp->reserved))) | |||
| 677 | return -EFAULT14; | |||
| 678 | n = kp->count; | |||
| 679 | if (n == 0) { | |||
| 680 | kp->controls = NULL((void *)0); | |||
| 681 | return 0; | |||
| 682 | } | |||
| 683 | if (get_user(p, &up->controls)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->controls)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 683); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->controls), "i" (sizeof(*(&up-> controls)))); (p) = ( __typeof__(*(&up->controls))) __val_gu ; clang_analyzer_taint(&p); __builtin_expect(__ret_gu, 0) ; })) | |||
| 684 | return -EFAULT14; | |||
| 685 | ucontrols = compat_ptr(p); | |||
| 686 | if (!access_ok(VERIFY_READ, ucontrols,(!({ (void)0; __chk_range_not_ok((unsigned long )(ucontrols), n * sizeof(struct v4l2_ext_control32), (get_current()->thread .addr_limit.seg)); })) | |||
| 687 | n * sizeof(struct v4l2_ext_control32))(!({ (void)0; __chk_range_not_ok((unsigned long )(ucontrols), n * sizeof(struct v4l2_ext_control32), (get_current()->thread .addr_limit.seg)); }))) | |||
| 688 | return -EFAULT14; | |||
| 689 | kcontrols = compat_alloc_user_space(n * sizeof(struct v4l2_ext_control)); | |||
| 690 | kp->controls = (__force struct v4l2_ext_control *)kcontrols; | |||
| 691 | while (--n >= 0) { | |||
| 692 | u32 id; | |||
| 693 | ||||
| 694 | if (copy_in_user(kcontrols, ucontrols, sizeof(*ucontrols))) | |||
| 695 | return -EFAULT14; | |||
| 696 | if (get_user(id, &kcontrols->id)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&kcontrols->id)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 696); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&kcontrols->id), "i" (sizeof(*(&kcontrols ->id)))); (id) = ( __typeof__(*(&kcontrols->id))) __val_gu ; clang_analyzer_taint(&id); __builtin_expect(__ret_gu, 0 ); })) | |||
| 697 | return -EFAULT14; | |||
| 698 | if (ctrl_is_pointer(id)) { | |||
| 699 | void __user *s; | |||
| 700 | ||||
| 701 | if (get_user(p, &ucontrols->string)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&ucontrols->string)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 701); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&ucontrols->string), "i" (sizeof(*(& ucontrols->string)))); (p) = ( __typeof__(*(&ucontrols ->string))) __val_gu; clang_analyzer_taint(&p); __builtin_expect (__ret_gu, 0); })) | |||
| 702 | return -EFAULT14; | |||
| 703 | s = compat_ptr(p); | |||
| 704 | if (put_user(s, &kcontrols->string)({ int __ret_pu; __typeof__(*(&kcontrols->string)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 704); __pu_val = s; switch (sizeof(*(&kcontrols->string ))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu ) : "0" ((typeof(*(&kcontrols->string)))(__pu_val)), "c" (&kcontrols->string) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& kcontrols->string)))(__pu_val)), "c" (&kcontrols->string ) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&kcontrols->string )))(__pu_val)), "c" (&kcontrols->string) : "ebx"); break ; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&kcontrols->string)))(__pu_val)), "c" (&kcontrols->string) : "ebx"); break; default: asm volatile ("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(& kcontrols->string)))(__pu_val)), "c" (&kcontrols->string ) : "ebx"); break; } __builtin_expect(__ret_pu, 0); })) | |||
| 705 | return -EFAULT14; | |||
| 706 | } | |||
| 707 | ucontrols++; | |||
| 708 | kcontrols++; | |||
| 709 | } | |||
| 710 | return 0; | |||
| 711 | } | |||
| 712 | ||||
| 713 | static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext_controls32 __user *up) | |||
| 714 | { | |||
| 715 | struct v4l2_ext_control32 __user *ucontrols; | |||
| 716 | struct v4l2_ext_control __user *kcontrols = | |||
| 717 | (__force struct v4l2_ext_control __user *)kp->controls; | |||
| 718 | int n = kp->count; | |||
| 719 | compat_caddr_t p; | |||
| 720 | ||||
| 721 | if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_ext_controls32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_ext_controls32), (get_current()->thread.addr_limit .seg)); })) || | |||
| 722 | put_user(kp->which, &up->which)({ int __ret_pu; __typeof__(*(&up->which)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 722); __pu_val = kp->which; switch (sizeof(*(&up-> which))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->which)))(__pu_val)), "c" (&up->which) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->which)))(__pu_val)), "c" (&up->which) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->which)))(__pu_val)), "c" (& up->which) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->which)))( __pu_val)), "c" (&up->which) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ( (typeof(*(&up->which)))(__pu_val)), "c" (&up->which ) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 723 | put_user(kp->count, &up->count)({ int __ret_pu; __typeof__(*(&up->count)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 723); __pu_val = kp->count; switch (sizeof(*(&up-> count))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->count)))(__pu_val)), "c" (&up->count) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->count)))(__pu_val)), "c" (&up->count) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->count)))(__pu_val)), "c" (& up->count) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->count)))( __pu_val)), "c" (&up->count) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ( (typeof(*(&up->count)))(__pu_val)), "c" (&up->count ) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 724 | put_user(kp->error_idx, &up->error_idx)({ int __ret_pu; __typeof__(*(&up->error_idx)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 724); __pu_val = kp->error_idx; switch (sizeof(*(&up ->error_idx))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->error_idx)))( __pu_val)), "c" (&up->error_idx) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->error_idx)))(__pu_val)), "c" (&up ->error_idx) : "ebx"); break; case 4: asm volatile("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(&up->error_idx )))(__pu_val)), "c" (&up->error_idx) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->error_idx)))(__pu_val)), "c" (&up ->error_idx) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->error_idx )))(__pu_val)), "c" (&up->error_idx) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 725 | copy_to_user(up->reserved, kp->reserved, sizeof(up->reserved))) | |||
| 726 | return -EFAULT14; | |||
| 727 | if (!kp->count) | |||
| 728 | return 0; | |||
| 729 | ||||
| 730 | if (get_user(p, &up->controls)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->controls)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 730); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->controls), "i" (sizeof(*(&up-> controls)))); (p) = ( __typeof__(*(&up->controls))) __val_gu ; clang_analyzer_taint(&p); __builtin_expect(__ret_gu, 0) ; })) | |||
| 731 | return -EFAULT14; | |||
| 732 | ucontrols = compat_ptr(p); | |||
| 733 | if (!access_ok(VERIFY_WRITE, ucontrols,(!({ (void)0; __chk_range_not_ok((unsigned long )(ucontrols), n * sizeof(struct v4l2_ext_control32), (get_current()->thread .addr_limit.seg)); })) | |||
| 734 | n * sizeof(struct v4l2_ext_control32))(!({ (void)0; __chk_range_not_ok((unsigned long )(ucontrols), n * sizeof(struct v4l2_ext_control32), (get_current()->thread .addr_limit.seg)); }))) | |||
| 735 | return -EFAULT14; | |||
| 736 | ||||
| 737 | while (--n >= 0) { | |||
| 738 | unsigned size = sizeof(*ucontrols); | |||
| 739 | u32 id; | |||
| 740 | ||||
| 741 | if (get_user(id, &kcontrols->id)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&kcontrols->id)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 741); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&kcontrols->id), "i" (sizeof(*(&kcontrols ->id)))); (id) = ( __typeof__(*(&kcontrols->id))) __val_gu ; clang_analyzer_taint(&id); __builtin_expect(__ret_gu, 0 ); })) | |||
| 742 | return -EFAULT14; | |||
| 743 | /* Do not modify the pointer when copying a pointer control. | |||
| 744 | The contents of the pointer was changed, not the pointer | |||
| 745 | itself. */ | |||
| 746 | if (ctrl_is_pointer(id)) | |||
| 747 | size -= sizeof(ucontrols->value64); | |||
| 748 | if (copy_in_user(ucontrols, kcontrols, size)) | |||
| 749 | return -EFAULT14; | |||
| 750 | ucontrols++; | |||
| 751 | kcontrols++; | |||
| 752 | } | |||
| 753 | return 0; | |||
| 754 | } | |||
| 755 | ||||
| 756 | struct v4l2_event32 { | |||
| 757 | __u32 type; | |||
| 758 | union { | |||
| 759 | compat_s64 value64; | |||
| 760 | __u8 data[64]; | |||
| 761 | } u; | |||
| 762 | __u32 pending; | |||
| 763 | __u32 sequence; | |||
| 764 | struct compat_timespec timestamp; | |||
| 765 | __u32 id; | |||
| 766 | __u32 reserved[8]; | |||
| 767 | }; | |||
| 768 | ||||
| 769 | static int put_v4l2_event32(struct v4l2_event *kp, struct v4l2_event32 __user *up) | |||
| 770 | { | |||
| 771 | if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_event32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_event32), (get_current()->thread.addr_limit.seg )); })) || | |||
| 772 | put_user(kp->type, &up->type)({ int __ret_pu; __typeof__(*(&up->type)) __pu_val; (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 772); __pu_val = kp->type; switch (sizeof(*(&up-> type))) { case 1: asm volatile("call __put_user_" "1" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->type)))(__pu_val)), "c" (&up->type) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->type)))(__pu_val )), "c" (&up->type) : "ebx"); break; case 4: asm volatile ("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(& up->type)))(__pu_val)), "c" (&up->type) : "ebx"); break ; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->type)))(__pu_val)), "c" (& up->type) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->type)))(__pu_val )), "c" (&up->type) : "ebx"); break; } __builtin_expect (__ret_pu, 0); }) || | |||
| 773 | copy_to_user(&up->u, &kp->u, sizeof(kp->u)) || | |||
| ||||
| 774 | put_user(kp->pending, &up->pending)({ int __ret_pu; __typeof__(*(&up->pending)) __pu_val; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 774); __pu_val = kp->pending; switch (sizeof(*(&up-> pending))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->pending)))(__pu_val) ), "c" (&up->pending) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->pending)))(__pu_val)), "c" (&up->pending) : "ebx" ); break; case 4: asm volatile("call __put_user_" "4" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->pending)))(__pu_val)), "c" (&up->pending) : "ebx"); break; case 8: asm volatile ("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(& up->pending)))(__pu_val)), "c" (&up->pending) : "ebx" ); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->pending)))(__pu_val) ), "c" (&up->pending) : "ebx"); break; } __builtin_expect (__ret_pu, 0); }) || | |||
| 775 | put_user(kp->sequence, &up->sequence)({ int __ret_pu; __typeof__(*(&up->sequence)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 775); __pu_val = kp->sequence; switch (sizeof(*(&up-> sequence))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->sequence)))(__pu_val )), "c" (&up->sequence) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->sequence)))(__pu_val)), "c" (&up->sequence) : "ebx" ); break; case 4: asm volatile("call __put_user_" "4" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->sequence)))(__pu_val)) , "c" (&up->sequence) : "ebx"); break; case 8: asm volatile ("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(& up->sequence)))(__pu_val)), "c" (&up->sequence) : "ebx" ); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->sequence)))(__pu_val )), "c" (&up->sequence) : "ebx"); break; } __builtin_expect (__ret_pu, 0); }) || | |||
| 776 | compat_put_timespec(&kp->timestamp, &up->timestamp) || | |||
| 777 | put_user(kp->id, &up->id)({ int __ret_pu; __typeof__(*(&up->id)) __pu_val; (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 777); __pu_val = kp->id; switch (sizeof(*(&up->id ))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->id)))(__pu_val)), "c" (&up ->id) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->id)))(__pu_val )), "c" (&up->id) : "ebx"); break; case 4: asm volatile ("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(& up->id)))(__pu_val)), "c" (&up->id) : "ebx"); break ; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->id)))(__pu_val)), "c" (&up ->id) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->id)))(__pu_val )), "c" (&up->id) : "ebx"); break; } __builtin_expect( __ret_pu, 0); }) || | |||
| 778 | copy_to_user(up->reserved, kp->reserved, 8 * sizeof(__u32))) | |||
| 779 | return -EFAULT14; | |||
| 780 | return 0; | |||
| 781 | } | |||
| 782 | ||||
| 783 | struct v4l2_edid32 { | |||
| 784 | __u32 pad; | |||
| 785 | __u32 start_block; | |||
| 786 | __u32 blocks; | |||
| 787 | __u32 reserved[5]; | |||
| 788 | compat_caddr_t edid; | |||
| 789 | }; | |||
| 790 | ||||
| 791 | static int get_v4l2_edid32(struct v4l2_edid *kp, struct v4l2_edid32 __user *up) | |||
| 792 | { | |||
| 793 | u32 tmp; | |||
| 794 | ||||
| 795 | if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_edid32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_edid32), (get_current()->thread.addr_limit.seg )); })) || | |||
| 796 | get_user(kp->pad, &up->pad)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->pad)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm ("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 796); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->pad), "i" (sizeof(*(&up->pad )))); (kp->pad) = ( __typeof__(*(&up->pad))) __val_gu ; clang_analyzer_taint(&kp->pad); __builtin_expect(__ret_gu , 0); }) || | |||
| 797 | get_user(kp->start_block, &up->start_block)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->start_block)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 797); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->start_block), "i" (sizeof(*(&up ->start_block)))); (kp->start_block) = ( __typeof__(*(& up->start_block))) __val_gu; clang_analyzer_taint(&kp-> start_block); __builtin_expect(__ret_gu, 0); }) || | |||
| 798 | get_user(kp->blocks, &up->blocks)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->blocks)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 798); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->blocks), "i" (sizeof(*(&up-> blocks)))); (kp->blocks) = ( __typeof__(*(&up->blocks ))) __val_gu; clang_analyzer_taint(&kp->blocks); __builtin_expect (__ret_gu, 0); }) || | |||
| 799 | get_user(tmp, &up->edid)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*(&up->edid)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm ("%""rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 799); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" (&up->edid), "i" (sizeof(*(&up->edid )))); (tmp) = ( __typeof__(*(&up->edid))) __val_gu; clang_analyzer_taint (&tmp); __builtin_expect(__ret_gu, 0); }) || | |||
| 800 | copy_from_user(kp->reserved, up->reserved, sizeof(kp->reserved))) | |||
| 801 | return -EFAULT14; | |||
| 802 | kp->edid = (__force u8 *)compat_ptr(tmp); | |||
| 803 | return 0; | |||
| 804 | } | |||
| 805 | ||||
| 806 | static int put_v4l2_edid32(struct v4l2_edid *kp, struct v4l2_edid32 __user *up) | |||
| 807 | { | |||
| 808 | u32 tmp = (u32)((unsigned long)kp->edid); | |||
| 809 | ||||
| 810 | if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_edid32))(!({ (void)0; __chk_range_not_ok((unsigned long )(up), sizeof (struct v4l2_edid32), (get_current()->thread.addr_limit.seg )); })) || | |||
| 811 | put_user(kp->pad, &up->pad)({ int __ret_pu; __typeof__(*(&up->pad)) __pu_val; (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 811); __pu_val = kp->pad; switch (sizeof(*(&up->pad ))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->pad)))(__pu_val)), "c" (&up ->pad) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->pad)))(__pu_val )), "c" (&up->pad) : "ebx"); break; case 4: asm volatile ("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(& up->pad)))(__pu_val)), "c" (&up->pad) : "ebx"); break ; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->pad)))(__pu_val)), "c" (&up ->pad) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->pad)))(__pu_val )), "c" (&up->pad) : "ebx"); break; } __builtin_expect (__ret_pu, 0); }) || | |||
| 812 | put_user(kp->start_block, &up->start_block)({ int __ret_pu; __typeof__(*(&up->start_block)) __pu_val ; (void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 812); __pu_val = kp->start_block; switch (sizeof(*(& up->start_block))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->start_block )))(__pu_val)), "c" (&up->start_block) : "ebx"); break ; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->start_block)))(__pu_val)), "c" (&up->start_block) : "ebx"); break; case 4: asm volatile ("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(& up->start_block)))(__pu_val)), "c" (&up->start_block ) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->start_block)) )(__pu_val)), "c" (&up->start_block) : "ebx"); break; default : asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->start_block)))(__pu_val)), "c" (& up->start_block) : "ebx"); break; } __builtin_expect(__ret_pu , 0); }) || | |||
| 813 | put_user(kp->blocks, &up->blocks)({ int __ret_pu; __typeof__(*(&up->blocks)) __pu_val; ( void)0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 813); __pu_val = kp->blocks; switch (sizeof(*(&up-> blocks))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof(*(&up->blocks)))(__pu_val)) , "c" (&up->blocks) : "ebx"); break; case 2: asm volatile ("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(& up->blocks)))(__pu_val)), "c" (&up->blocks) : "ebx" ); break; case 4: asm volatile("call __put_user_" "4" : "=a" ( __ret_pu) : "0" ((typeof(*(&up->blocks)))(__pu_val)), "c" (&up->blocks) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*(&up->blocks))) (__pu_val)), "c" (&up->blocks) : "ebx"); break; default : asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->blocks)))(__pu_val)), "c" (&up-> blocks) : "ebx"); break; } __builtin_expect(__ret_pu, 0); }) || | |||
| 814 | put_user(tmp, &up->edid)({ int __ret_pu; __typeof__(*(&up->edid)) __pu_val; (void )0; __might_fault("drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , 814); __pu_val = tmp; switch (sizeof(*(&up->edid))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->edid)))(__pu_val)), "c" (& up->edid) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*(&up->edid)))(__pu_val )), "c" (&up->edid) : "ebx"); break; case 4: asm volatile ("call __put_user_" "4" : "=a" (__ret_pu) : "0" ((typeof(*(& up->edid)))(__pu_val)), "c" (&up->edid) : "ebx"); break ; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu ) : "0" ((typeof(*(&up->edid)))(__pu_val)), "c" (& up->edid) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*(&up->edid)))(__pu_val )), "c" (&up->edid) : "ebx"); break; } __builtin_expect (__ret_pu, 0); }) || | |||
| 815 | copy_to_user(up->reserved, kp->reserved, sizeof(up->reserved))) | |||
| 816 | return -EFAULT14; | |||
| 817 | return 0; | |||
| 818 | } | |||
| 819 | ||||
| 820 | ||||
| 821 | #define VIDIOC_G_FMT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((4)) << 0) | (((((sizeof(struct v4l2_format32) == sizeof(struct v4l2_format32[1]) && sizeof(struct v4l2_format32 ) < (1 << 14)) ? sizeof(struct v4l2_format32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 4, struct v4l2_format32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((4)) << 0) | (((((sizeof(struct v4l2_format32) == sizeof(struct v4l2_format32[1]) && sizeof(struct v4l2_format32 ) < (1 << 14)) ? sizeof(struct v4l2_format32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 822 | #define VIDIOC_S_FMT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((5)) << 0) | (((((sizeof(struct v4l2_format32) == sizeof(struct v4l2_format32[1]) && sizeof(struct v4l2_format32 ) < (1 << 14)) ? sizeof(struct v4l2_format32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 5, struct v4l2_format32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((5)) << 0) | (((((sizeof(struct v4l2_format32) == sizeof(struct v4l2_format32[1]) && sizeof(struct v4l2_format32 ) < (1 << 14)) ? sizeof(struct v4l2_format32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 823 | #define VIDIOC_QUERYBUF32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((9)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 9, struct v4l2_buffer32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((9)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 824 | #define VIDIOC_G_FBUF32(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((10)) << 0) | (((((sizeof(struct v4l2_framebuffer32) == sizeof(struct v4l2_framebuffer32[1]) && sizeof(struct v4l2_framebuffer32) < (1 << 14)) ? sizeof(struct v4l2_framebuffer32 ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) _IOR ('V', 10, struct v4l2_framebuffer32)(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((10)) << 0) | (((((sizeof(struct v4l2_framebuffer32) == sizeof(struct v4l2_framebuffer32[1]) && sizeof(struct v4l2_framebuffer32) < (1 << 14)) ? sizeof(struct v4l2_framebuffer32 ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) | |||
| 825 | #define VIDIOC_S_FBUF32(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((11)) << 0) | (((((sizeof(struct v4l2_framebuffer32) == sizeof(struct v4l2_framebuffer32[1]) && sizeof(struct v4l2_framebuffer32) < (1 << 14)) ? sizeof(struct v4l2_framebuffer32 ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) _IOW ('V', 11, struct v4l2_framebuffer32)(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((11)) << 0) | (((((sizeof(struct v4l2_framebuffer32) == sizeof(struct v4l2_framebuffer32[1]) && sizeof(struct v4l2_framebuffer32) < (1 << 14)) ? sizeof(struct v4l2_framebuffer32 ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) | |||
| 826 | #define VIDIOC_QBUF32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((15)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 15, struct v4l2_buffer32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((15)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 827 | #define VIDIOC_DQBUF32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((17)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 17, struct v4l2_buffer32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((17)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 828 | #define VIDIOC_ENUMSTD32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((25)) << 0) | (((((sizeof(struct v4l2_standard32 ) == sizeof(struct v4l2_standard32[1]) && sizeof(struct v4l2_standard32) < (1 << 14)) ? sizeof(struct v4l2_standard32 ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) _IOWR('V', 25, struct v4l2_standard32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((25)) << 0) | (((((sizeof(struct v4l2_standard32 ) == sizeof(struct v4l2_standard32[1]) && sizeof(struct v4l2_standard32) < (1 << 14)) ? sizeof(struct v4l2_standard32 ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) | |||
| 829 | #define VIDIOC_ENUMINPUT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((26)) << 0) | (((((sizeof(struct v4l2_input32) == sizeof(struct v4l2_input32[1]) && sizeof(struct v4l2_input32 ) < (1 << 14)) ? sizeof(struct v4l2_input32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 26, struct v4l2_input32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((26)) << 0) | (((((sizeof(struct v4l2_input32) == sizeof(struct v4l2_input32[1]) && sizeof(struct v4l2_input32 ) < (1 << 14)) ? sizeof(struct v4l2_input32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 830 | #define VIDIOC_G_EDID32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((40)) << 0) | (((((sizeof(struct v4l2_edid32) == sizeof(struct v4l2_edid32[1]) && sizeof(struct v4l2_edid32 ) < (1 << 14)) ? sizeof(struct v4l2_edid32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 40, struct v4l2_edid32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((40)) << 0) | (((((sizeof(struct v4l2_edid32) == sizeof(struct v4l2_edid32[1]) && sizeof(struct v4l2_edid32 ) < (1 << 14)) ? sizeof(struct v4l2_edid32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 831 | #define VIDIOC_S_EDID32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((41)) << 0) | (((((sizeof(struct v4l2_edid32) == sizeof(struct v4l2_edid32[1]) && sizeof(struct v4l2_edid32 ) < (1 << 14)) ? sizeof(struct v4l2_edid32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 41, struct v4l2_edid32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((41)) << 0) | (((((sizeof(struct v4l2_edid32) == sizeof(struct v4l2_edid32[1]) && sizeof(struct v4l2_edid32 ) < (1 << 14)) ? sizeof(struct v4l2_edid32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 832 | #define VIDIOC_TRY_FMT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((64)) << 0) | (((((sizeof(struct v4l2_format32) == sizeof(struct v4l2_format32[1]) && sizeof(struct v4l2_format32 ) < (1 << 14)) ? sizeof(struct v4l2_format32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 64, struct v4l2_format32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((64)) << 0) | (((((sizeof(struct v4l2_format32) == sizeof(struct v4l2_format32[1]) && sizeof(struct v4l2_format32 ) < (1 << 14)) ? sizeof(struct v4l2_format32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 833 | #define VIDIOC_G_EXT_CTRLS32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((71)) << 0) | (((((sizeof(struct v4l2_ext_controls32 ) == sizeof(struct v4l2_ext_controls32[1]) && sizeof( struct v4l2_ext_controls32) < (1 << 14)) ? sizeof(struct v4l2_ext_controls32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) _IOWR('V', 71, struct v4l2_ext_controls32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((71)) << 0) | (((((sizeof(struct v4l2_ext_controls32 ) == sizeof(struct v4l2_ext_controls32[1]) && sizeof( struct v4l2_ext_controls32) < (1 << 14)) ? sizeof(struct v4l2_ext_controls32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) | |||
| 834 | #define VIDIOC_S_EXT_CTRLS32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((72)) << 0) | (((((sizeof(struct v4l2_ext_controls32 ) == sizeof(struct v4l2_ext_controls32[1]) && sizeof( struct v4l2_ext_controls32) < (1 << 14)) ? sizeof(struct v4l2_ext_controls32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) _IOWR('V', 72, struct v4l2_ext_controls32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((72)) << 0) | (((((sizeof(struct v4l2_ext_controls32 ) == sizeof(struct v4l2_ext_controls32[1]) && sizeof( struct v4l2_ext_controls32) < (1 << 14)) ? sizeof(struct v4l2_ext_controls32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) | |||
| 835 | #define VIDIOC_TRY_EXT_CTRLS32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((73)) << 0) | (((((sizeof(struct v4l2_ext_controls32 ) == sizeof(struct v4l2_ext_controls32[1]) && sizeof( struct v4l2_ext_controls32) < (1 << 14)) ? sizeof(struct v4l2_ext_controls32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) _IOWR('V', 73, struct v4l2_ext_controls32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((73)) << 0) | (((((sizeof(struct v4l2_ext_controls32 ) == sizeof(struct v4l2_ext_controls32[1]) && sizeof( struct v4l2_ext_controls32) < (1 << 14)) ? sizeof(struct v4l2_ext_controls32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) | |||
| 836 | #define VIDIOC_DQEVENT32(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((89)) << 0) | (((((sizeof(struct v4l2_event32) == sizeof (struct v4l2_event32[1]) && sizeof(struct v4l2_event32 ) < (1 << 14)) ? sizeof(struct v4l2_event32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOR ('V', 89, struct v4l2_event32)(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((89)) << 0) | (((((sizeof(struct v4l2_event32) == sizeof (struct v4l2_event32[1]) && sizeof(struct v4l2_event32 ) < (1 << 14)) ? sizeof(struct v4l2_event32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 837 | #define VIDIOC_CREATE_BUFS32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((92)) << 0) | (((((sizeof(struct v4l2_create_buffers32 ) == sizeof(struct v4l2_create_buffers32[1]) && sizeof (struct v4l2_create_buffers32) < (1 << 14)) ? sizeof (struct v4l2_create_buffers32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 92, struct v4l2_create_buffers32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((92)) << 0) | (((((sizeof(struct v4l2_create_buffers32 ) == sizeof(struct v4l2_create_buffers32[1]) && sizeof (struct v4l2_create_buffers32) < (1 << 14)) ? sizeof (struct v4l2_create_buffers32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 838 | #define VIDIOC_PREPARE_BUF32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((93)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOWR('V', 93, struct v4l2_buffer32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((93)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 839 | ||||
| 840 | #define VIDIOC_OVERLAY32(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((14)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOW ('V', 14, s32)(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((14)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 841 | #define VIDIOC_STREAMON32(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((18)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOW ('V', 18, s32)(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((18)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 842 | #define VIDIOC_STREAMOFF32(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((19)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOW ('V', 19, s32)(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((19)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 843 | #define VIDIOC_G_INPUT32(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((38)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOR ('V', 38, s32)(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((38)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 844 | #define VIDIOC_S_INPUT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((39)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) _IOWR('V', 39, s32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((39)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) | |||
| 845 | #define VIDIOC_G_OUTPUT32(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((46)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) _IOR ('V', 46, s32)(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((46)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))) | |||
| 846 | #define VIDIOC_S_OUTPUT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((47)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) _IOWR('V', 47, s32)(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((47)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))) | |||
| 847 | ||||
| 848 | static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 849 | { | |||
| 850 | union { | |||
| 851 | struct v4l2_format v2f; | |||
| 852 | struct v4l2_buffer v2b; | |||
| 853 | struct v4l2_framebuffer v2fb; | |||
| 854 | struct v4l2_input v2i; | |||
| 855 | struct v4l2_standard v2s; | |||
| 856 | struct v4l2_ext_controls v2ecs; | |||
| 857 | struct v4l2_event v2ev; | |||
| 858 | struct v4l2_create_buffers v2crt; | |||
| 859 | struct v4l2_edid v2edid; | |||
| 860 | unsigned long vx; | |||
| 861 | int vi; | |||
| 862 | } karg; | |||
| 863 | void __user *up = compat_ptr(arg); | |||
| 864 | int compatible_arg = 1; | |||
| 865 | long err = 0; | |||
| 866 | ||||
| 867 | /* First, convert the command. */ | |||
| 868 | switch (cmd) { | |||
| ||||
| 869 | case VIDIOC_G_FMT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((4)) << 0) | (((((sizeof(struct v4l2_format32) == sizeof(struct v4l2_format32[1]) && sizeof(struct v4l2_format32 ) < (1 << 14)) ? sizeof(struct v4l2_format32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_G_FMT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((4)) << 0) | (((((sizeof(struct v4l2_format) == sizeof (struct v4l2_format[1]) && sizeof(struct v4l2_format) < (1 << 14)) ? sizeof(struct v4l2_format) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 870 | case VIDIOC_S_FMT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((5)) << 0) | (((((sizeof(struct v4l2_format32) == sizeof(struct v4l2_format32[1]) && sizeof(struct v4l2_format32 ) < (1 << 14)) ? sizeof(struct v4l2_format32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_S_FMT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((5)) << 0) | (((((sizeof(struct v4l2_format) == sizeof (struct v4l2_format[1]) && sizeof(struct v4l2_format) < (1 << 14)) ? sizeof(struct v4l2_format) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 871 | case VIDIOC_QUERYBUF32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((9)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_QUERYBUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((9)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof (struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 872 | case VIDIOC_G_FBUF32(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((10)) << 0) | (((((sizeof(struct v4l2_framebuffer32) == sizeof(struct v4l2_framebuffer32[1]) && sizeof(struct v4l2_framebuffer32) < (1 << 14)) ? sizeof(struct v4l2_framebuffer32 ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): cmd = VIDIOC_G_FBUF(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((10)) << 0) | (((((sizeof(struct v4l2_framebuffer) == sizeof(struct v4l2_framebuffer[1]) && sizeof(struct v4l2_framebuffer ) < (1 << 14)) ? sizeof(struct v4l2_framebuffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 873 | case VIDIOC_S_FBUF32(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((11)) << 0) | (((((sizeof(struct v4l2_framebuffer32) == sizeof(struct v4l2_framebuffer32[1]) && sizeof(struct v4l2_framebuffer32) < (1 << 14)) ? sizeof(struct v4l2_framebuffer32 ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): cmd = VIDIOC_S_FBUF(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((11)) << 0) | (((((sizeof(struct v4l2_framebuffer) == sizeof(struct v4l2_framebuffer[1]) && sizeof(struct v4l2_framebuffer ) < (1 << 14)) ? sizeof(struct v4l2_framebuffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 874 | case VIDIOC_QBUF32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((15)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_QBUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((15)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof(struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer ) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 875 | case VIDIOC_DQBUF32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((17)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_DQBUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((17)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof(struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer ) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 876 | case VIDIOC_ENUMSTD32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((25)) << 0) | (((((sizeof(struct v4l2_standard32 ) == sizeof(struct v4l2_standard32[1]) && sizeof(struct v4l2_standard32) < (1 << 14)) ? sizeof(struct v4l2_standard32 ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): cmd = VIDIOC_ENUMSTD(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((25)) << 0) | (((((sizeof(struct v4l2_standard) == sizeof(struct v4l2_standard[1]) && sizeof(struct v4l2_standard ) < (1 << 14)) ? sizeof(struct v4l2_standard) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 877 | case VIDIOC_ENUMINPUT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((26)) << 0) | (((((sizeof(struct v4l2_input32) == sizeof(struct v4l2_input32[1]) && sizeof(struct v4l2_input32 ) < (1 << 14)) ? sizeof(struct v4l2_input32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_ENUMINPUT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((26)) << 0) | (((((sizeof(struct v4l2_input) == sizeof (struct v4l2_input[1]) && sizeof(struct v4l2_input) < (1 << 14)) ? sizeof(struct v4l2_input) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 878 | case VIDIOC_TRY_FMT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((64)) << 0) | (((((sizeof(struct v4l2_format32) == sizeof(struct v4l2_format32[1]) && sizeof(struct v4l2_format32 ) < (1 << 14)) ? sizeof(struct v4l2_format32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_TRY_FMT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((64)) << 0) | (((((sizeof(struct v4l2_format) == sizeof(struct v4l2_format[1]) && sizeof(struct v4l2_format ) < (1 << 14)) ? sizeof(struct v4l2_format) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 879 | case VIDIOC_G_EXT_CTRLS32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((71)) << 0) | (((((sizeof(struct v4l2_ext_controls32 ) == sizeof(struct v4l2_ext_controls32[1]) && sizeof( struct v4l2_ext_controls32) < (1 << 14)) ? sizeof(struct v4l2_ext_controls32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): cmd = VIDIOC_G_EXT_CTRLS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((71)) << 0) | (((((sizeof(struct v4l2_ext_controls ) == sizeof(struct v4l2_ext_controls[1]) && sizeof(struct v4l2_ext_controls) < (1 << 14)) ? sizeof(struct v4l2_ext_controls ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))); break; | |||
| 880 | case VIDIOC_S_EXT_CTRLS32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((72)) << 0) | (((((sizeof(struct v4l2_ext_controls32 ) == sizeof(struct v4l2_ext_controls32[1]) && sizeof( struct v4l2_ext_controls32) < (1 << 14)) ? sizeof(struct v4l2_ext_controls32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): cmd = VIDIOC_S_EXT_CTRLS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((72)) << 0) | (((((sizeof(struct v4l2_ext_controls ) == sizeof(struct v4l2_ext_controls[1]) && sizeof(struct v4l2_ext_controls) < (1 << 14)) ? sizeof(struct v4l2_ext_controls ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))); break; | |||
| 881 | case VIDIOC_TRY_EXT_CTRLS32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((73)) << 0) | (((((sizeof(struct v4l2_ext_controls32 ) == sizeof(struct v4l2_ext_controls32[1]) && sizeof( struct v4l2_ext_controls32) < (1 << 14)) ? sizeof(struct v4l2_ext_controls32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): cmd = VIDIOC_TRY_EXT_CTRLS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((73)) << 0) | (((((sizeof(struct v4l2_ext_controls ) == sizeof(struct v4l2_ext_controls[1]) && sizeof(struct v4l2_ext_controls) < (1 << 14)) ? sizeof(struct v4l2_ext_controls ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))); break; | |||
| 882 | case VIDIOC_DQEVENT32(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((89)) << 0) | (((((sizeof(struct v4l2_event32) == sizeof (struct v4l2_event32[1]) && sizeof(struct v4l2_event32 ) < (1 << 14)) ? sizeof(struct v4l2_event32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_DQEVENT(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((89)) << 0) | (((((sizeof(struct v4l2_event) == sizeof (struct v4l2_event[1]) && sizeof(struct v4l2_event) < (1 << 14)) ? sizeof(struct v4l2_event) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 883 | case VIDIOC_OVERLAY32(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((14)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_OVERLAY(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((14)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 884 | case VIDIOC_STREAMON32(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((18)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_STREAMON(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((18)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 885 | case VIDIOC_STREAMOFF32(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((19)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_STREAMOFF(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((19)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 886 | case VIDIOC_G_INPUT32(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((38)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_G_INPUT(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((38)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 887 | case VIDIOC_S_INPUT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((39)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): cmd = VIDIOC_S_INPUT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((39)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))); break; | |||
| 888 | case VIDIOC_G_OUTPUT32(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((46)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_G_OUTPUT(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((46)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 889 | case VIDIOC_S_OUTPUT32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((47)) << 0) | (((((sizeof(s32) == sizeof(s32[1]) && sizeof(s32) < (1 << 14)) ? sizeof(s32) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): cmd = VIDIOC_S_OUTPUT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((47)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))); break; | |||
| 890 | case VIDIOC_CREATE_BUFS32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((92)) << 0) | (((((sizeof(struct v4l2_create_buffers32 ) == sizeof(struct v4l2_create_buffers32[1]) && sizeof (struct v4l2_create_buffers32) < (1 << 14)) ? sizeof (struct v4l2_create_buffers32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_CREATE_BUFS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((92)) << 0) | (((((sizeof(struct v4l2_create_buffers ) == sizeof(struct v4l2_create_buffers[1]) && sizeof( struct v4l2_create_buffers) < (1 << 14)) ? sizeof(struct v4l2_create_buffers) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))); break; | |||
| 891 | case VIDIOC_PREPARE_BUF32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((93)) << 0) | (((((sizeof(struct v4l2_buffer32) == sizeof(struct v4l2_buffer32[1]) && sizeof(struct v4l2_buffer32 ) < (1 << 14)) ? sizeof(struct v4l2_buffer32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_PREPARE_BUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((93)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof(struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer ) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 892 | case VIDIOC_G_EDID32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((40)) << 0) | (((((sizeof(struct v4l2_edid32) == sizeof(struct v4l2_edid32[1]) && sizeof(struct v4l2_edid32 ) < (1 << 14)) ? sizeof(struct v4l2_edid32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_G_EDID(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((40)) << 0) | (((((sizeof(struct v4l2_edid) == sizeof (struct v4l2_edid[1]) && sizeof(struct v4l2_edid) < (1 << 14)) ? sizeof(struct v4l2_edid) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 893 | case VIDIOC_S_EDID32(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((41)) << 0) | (((((sizeof(struct v4l2_edid32) == sizeof(struct v4l2_edid32[1]) && sizeof(struct v4l2_edid32 ) < (1 << 14)) ? sizeof(struct v4l2_edid32) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): cmd = VIDIOC_S_EDID(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((41)) << 0) | (((((sizeof(struct v4l2_edid) == sizeof (struct v4l2_edid[1]) && sizeof(struct v4l2_edid) < (1 << 14)) ? sizeof(struct v4l2_edid) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))); break; | |||
| 894 | } | |||
| 895 | ||||
| 896 | switch (cmd) { | |||
| 897 | case VIDIOC_OVERLAY(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((14)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 898 | case VIDIOC_STREAMON(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((18)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 899 | case VIDIOC_STREAMOFF(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((19)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 900 | case VIDIOC_S_INPUT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((39)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 901 | case VIDIOC_S_OUTPUT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((47)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 902 | err = get_user(karg.vi, (s32 __user *)up)({ int __ret_gu; register __typeof__(__builtin_choose_expr(sizeof (*((s32 *)up)) > sizeof(0UL), 0ULL, 0UL)) __val_gu asm("%" "rdx"); register void *__sp asm("rsp"); (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 902); asm volatile ("call __get_user_%P4" : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) : "0" ((s32 *)up), "i" (sizeof(*((s32 *)up)))); (karg .vi) = ( __typeof__(*((s32 *)up))) __val_gu; clang_analyzer_taint (&karg.vi); __builtin_expect(__ret_gu, 0); }); | |||
| 903 | compatible_arg = 0; | |||
| 904 | break; | |||
| 905 | ||||
| 906 | case VIDIOC_G_INPUT(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((38)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 907 | case VIDIOC_G_OUTPUT(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((46)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 908 | compatible_arg = 0; | |||
| 909 | break; | |||
| 910 | ||||
| 911 | case VIDIOC_G_EDID(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((40)) << 0) | (((((sizeof(struct v4l2_edid) == sizeof (struct v4l2_edid[1]) && sizeof(struct v4l2_edid) < (1 << 14)) ? sizeof(struct v4l2_edid) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 912 | case VIDIOC_S_EDID(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((41)) << 0) | (((((sizeof(struct v4l2_edid) == sizeof (struct v4l2_edid[1]) && sizeof(struct v4l2_edid) < (1 << 14)) ? sizeof(struct v4l2_edid) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 913 | err = get_v4l2_edid32(&karg.v2edid, up); | |||
| 914 | compatible_arg = 0; | |||
| 915 | break; | |||
| 916 | ||||
| 917 | case VIDIOC_G_FMT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((4)) << 0) | (((((sizeof(struct v4l2_format) == sizeof (struct v4l2_format[1]) && sizeof(struct v4l2_format) < (1 << 14)) ? sizeof(struct v4l2_format) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 918 | case VIDIOC_S_FMT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((5)) << 0) | (((((sizeof(struct v4l2_format) == sizeof (struct v4l2_format[1]) && sizeof(struct v4l2_format) < (1 << 14)) ? sizeof(struct v4l2_format) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 919 | case VIDIOC_TRY_FMT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((64)) << 0) | (((((sizeof(struct v4l2_format) == sizeof(struct v4l2_format[1]) && sizeof(struct v4l2_format ) < (1 << 14)) ? sizeof(struct v4l2_format) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 920 | err = get_v4l2_format32(&karg.v2f, up); | |||
| 921 | compatible_arg = 0; | |||
| 922 | break; | |||
| 923 | ||||
| 924 | case VIDIOC_CREATE_BUFS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((92)) << 0) | (((((sizeof(struct v4l2_create_buffers ) == sizeof(struct v4l2_create_buffers[1]) && sizeof( struct v4l2_create_buffers) < (1 << 14)) ? sizeof(struct v4l2_create_buffers) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 925 | err = get_v4l2_create32(&karg.v2crt, up); | |||
| 926 | compatible_arg = 0; | |||
| 927 | break; | |||
| 928 | ||||
| 929 | case VIDIOC_PREPARE_BUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((93)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof(struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer ) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 930 | case VIDIOC_QUERYBUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((9)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof (struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 931 | case VIDIOC_QBUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((15)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof(struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer ) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 932 | case VIDIOC_DQBUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((17)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof(struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer ) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 933 | err = get_v4l2_buffer32(&karg.v2b, up); | |||
| 934 | compatible_arg = 0; | |||
| 935 | break; | |||
| 936 | ||||
| 937 | case VIDIOC_S_FBUF(((1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((11)) << 0) | (((((sizeof(struct v4l2_framebuffer) == sizeof(struct v4l2_framebuffer[1]) && sizeof(struct v4l2_framebuffer ) < (1 << 14)) ? sizeof(struct v4l2_framebuffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 938 | err = get_v4l2_framebuffer32(&karg.v2fb, up); | |||
| 939 | compatible_arg = 0; | |||
| 940 | break; | |||
| 941 | ||||
| 942 | case VIDIOC_G_FBUF(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((10)) << 0) | (((((sizeof(struct v4l2_framebuffer) == sizeof(struct v4l2_framebuffer[1]) && sizeof(struct v4l2_framebuffer ) < (1 << 14)) ? sizeof(struct v4l2_framebuffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 943 | compatible_arg = 0; | |||
| 944 | break; | |||
| 945 | ||||
| 946 | case VIDIOC_ENUMSTD(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((25)) << 0) | (((((sizeof(struct v4l2_standard) == sizeof(struct v4l2_standard[1]) && sizeof(struct v4l2_standard ) < (1 << 14)) ? sizeof(struct v4l2_standard) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 947 | err = get_v4l2_standard32(&karg.v2s, up); | |||
| 948 | compatible_arg = 0; | |||
| 949 | break; | |||
| 950 | ||||
| 951 | case VIDIOC_ENUMINPUT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((26)) << 0) | (((((sizeof(struct v4l2_input) == sizeof (struct v4l2_input[1]) && sizeof(struct v4l2_input) < (1 << 14)) ? sizeof(struct v4l2_input) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 952 | err = get_v4l2_input32(&karg.v2i, up); | |||
| 953 | compatible_arg = 0; | |||
| 954 | break; | |||
| 955 | ||||
| 956 | case VIDIOC_G_EXT_CTRLS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((71)) << 0) | (((((sizeof(struct v4l2_ext_controls ) == sizeof(struct v4l2_ext_controls[1]) && sizeof(struct v4l2_ext_controls) < (1 << 14)) ? sizeof(struct v4l2_ext_controls ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 957 | case VIDIOC_S_EXT_CTRLS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((72)) << 0) | (((((sizeof(struct v4l2_ext_controls ) == sizeof(struct v4l2_ext_controls[1]) && sizeof(struct v4l2_ext_controls) < (1 << 14)) ? sizeof(struct v4l2_ext_controls ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 958 | case VIDIOC_TRY_EXT_CTRLS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((73)) << 0) | (((((sizeof(struct v4l2_ext_controls ) == sizeof(struct v4l2_ext_controls[1]) && sizeof(struct v4l2_ext_controls) < (1 << 14)) ? sizeof(struct v4l2_ext_controls ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 959 | err = get_v4l2_ext_controls32(&karg.v2ecs, up); | |||
| 960 | compatible_arg = 0; | |||
| 961 | break; | |||
| 962 | case VIDIOC_DQEVENT(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((89)) << 0) | (((((sizeof(struct v4l2_event) == sizeof (struct v4l2_event[1]) && sizeof(struct v4l2_event) < (1 << 14)) ? sizeof(struct v4l2_event) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 963 | compatible_arg = 0; | |||
| 964 | break; | |||
| 965 | } | |||
| 966 | if (err) | |||
| 967 | return err; | |||
| 968 | ||||
| 969 | if (compatible_arg) | |||
| 970 | err = native_ioctl(file, cmd, (unsigned long)up); | |||
| 971 | else { | |||
| 972 | mm_segment_t old_fs = get_fs()(get_current()->thread.addr_limit); | |||
| 973 | ||||
| 974 | set_fs(KERNEL_DS)(get_current()->thread.addr_limit = (((mm_segment_t) { (-1UL ) }))); | |||
| 975 | err = native_ioctl(file, cmd, (unsigned long)&karg); | |||
| 976 | set_fs(old_fs)(get_current()->thread.addr_limit = (old_fs)); | |||
| 977 | } | |||
| 978 | ||||
| 979 | /* Special case: even after an error we need to put the | |||
| 980 | results back for these ioctls since the error_idx will | |||
| 981 | contain information on which control failed. */ | |||
| 982 | switch (cmd) { | |||
| 983 | case VIDIOC_G_EXT_CTRLS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((71)) << 0) | (((((sizeof(struct v4l2_ext_controls ) == sizeof(struct v4l2_ext_controls[1]) && sizeof(struct v4l2_ext_controls) < (1 << 14)) ? sizeof(struct v4l2_ext_controls ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 984 | case VIDIOC_S_EXT_CTRLS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((72)) << 0) | (((((sizeof(struct v4l2_ext_controls ) == sizeof(struct v4l2_ext_controls[1]) && sizeof(struct v4l2_ext_controls) < (1 << 14)) ? sizeof(struct v4l2_ext_controls ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 985 | case VIDIOC_TRY_EXT_CTRLS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((73)) << 0) | (((((sizeof(struct v4l2_ext_controls ) == sizeof(struct v4l2_ext_controls[1]) && sizeof(struct v4l2_ext_controls) < (1 << 14)) ? sizeof(struct v4l2_ext_controls ) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 986 | if (put_v4l2_ext_controls32(&karg.v2ecs, up)) | |||
| 987 | err = -EFAULT14; | |||
| 988 | break; | |||
| 989 | } | |||
| 990 | if (err) | |||
| 991 | return err; | |||
| 992 | ||||
| 993 | switch (cmd) { | |||
| 994 | case VIDIOC_S_INPUT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((39)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 995 | case VIDIOC_S_OUTPUT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((47)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 996 | case VIDIOC_G_INPUT(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((38)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 997 | case VIDIOC_G_OUTPUT(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((46)) << 0) | (((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ? sizeof(int) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 998 | err = put_user(((s32)karg.vi), (s32 __user *)up)({ int __ret_pu; __typeof__(*((s32 *)up)) __pu_val; (void)0; __might_fault ("drivers/media/v4l2-core/v4l2-compat-ioctl32.c", 998); __pu_val = ((s32)karg.vi); switch (sizeof(*((s32 *)up))) { case 1: asm volatile("call __put_user_" "1" : "=a" (__ret_pu) : "0" ((typeof (*((s32 *)up)))(__pu_val)), "c" ((s32 *)up) : "ebx"); break; case 2: asm volatile("call __put_user_" "2" : "=a" (__ret_pu) : "0" ((typeof(*((s32 *)up)))(__pu_val)), "c" ((s32 *)up) : "ebx") ; break; case 4: asm volatile("call __put_user_" "4" : "=a" ( __ret_pu) : "0" ((typeof(*((s32 *)up)))(__pu_val)), "c" ((s32 *)up) : "ebx"); break; case 8: asm volatile("call __put_user_" "8" : "=a" (__ret_pu) : "0" ((typeof(*((s32 *)up)))(__pu_val )), "c" ((s32 *)up) : "ebx"); break; default: asm volatile("call __put_user_" "X" : "=a" (__ret_pu) : "0" ((typeof(*((s32 *)up)))(__pu_val )), "c" ((s32 *)up) : "ebx"); break; } __builtin_expect(__ret_pu , 0); }); | |||
| 999 | break; | |||
| 1000 | ||||
| 1001 | case VIDIOC_G_FBUF(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((10)) << 0) | (((((sizeof(struct v4l2_framebuffer) == sizeof(struct v4l2_framebuffer[1]) && sizeof(struct v4l2_framebuffer ) < (1 << 14)) ? sizeof(struct v4l2_framebuffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1002 | err = put_v4l2_framebuffer32(&karg.v2fb, up); | |||
| 1003 | break; | |||
| 1004 | ||||
| 1005 | case VIDIOC_DQEVENT(((2U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8)) | (((89)) << 0) | (((((sizeof(struct v4l2_event) == sizeof (struct v4l2_event[1]) && sizeof(struct v4l2_event) < (1 << 14)) ? sizeof(struct v4l2_event) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1006 | err = put_v4l2_event32(&karg.v2ev, up); | |||
| 1007 | break; | |||
| 1008 | ||||
| 1009 | case VIDIOC_G_EDID(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((40)) << 0) | (((((sizeof(struct v4l2_edid) == sizeof (struct v4l2_edid[1]) && sizeof(struct v4l2_edid) < (1 << 14)) ? sizeof(struct v4l2_edid) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1010 | case VIDIOC_S_EDID(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((41)) << 0) | (((((sizeof(struct v4l2_edid) == sizeof (struct v4l2_edid[1]) && sizeof(struct v4l2_edid) < (1 << 14)) ? sizeof(struct v4l2_edid) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1011 | err = put_v4l2_edid32(&karg.v2edid, up); | |||
| 1012 | break; | |||
| 1013 | ||||
| 1014 | case VIDIOC_G_FMT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((4)) << 0) | (((((sizeof(struct v4l2_format) == sizeof (struct v4l2_format[1]) && sizeof(struct v4l2_format) < (1 << 14)) ? sizeof(struct v4l2_format) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1015 | case VIDIOC_S_FMT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((5)) << 0) | (((((sizeof(struct v4l2_format) == sizeof (struct v4l2_format[1]) && sizeof(struct v4l2_format) < (1 << 14)) ? sizeof(struct v4l2_format) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1016 | case VIDIOC_TRY_FMT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((64)) << 0) | (((((sizeof(struct v4l2_format) == sizeof(struct v4l2_format[1]) && sizeof(struct v4l2_format ) < (1 << 14)) ? sizeof(struct v4l2_format) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1017 | err = put_v4l2_format32(&karg.v2f, up); | |||
| 1018 | break; | |||
| 1019 | ||||
| 1020 | case VIDIOC_CREATE_BUFS(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((92)) << 0) | (((((sizeof(struct v4l2_create_buffers ) == sizeof(struct v4l2_create_buffers[1]) && sizeof( struct v4l2_create_buffers) < (1 << 14)) ? sizeof(struct v4l2_create_buffers) : __invalid_size_argument_for_IOC))) << ((0 +8)+8))): | |||
| 1021 | err = put_v4l2_create32(&karg.v2crt, up); | |||
| 1022 | break; | |||
| 1023 | ||||
| 1024 | case VIDIOC_QUERYBUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((9)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof (struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1025 | case VIDIOC_QBUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((15)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof(struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer ) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1026 | case VIDIOC_DQBUF(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((17)) << 0) | (((((sizeof(struct v4l2_buffer) == sizeof(struct v4l2_buffer[1]) && sizeof(struct v4l2_buffer ) < (1 << 14)) ? sizeof(struct v4l2_buffer) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1027 | err = put_v4l2_buffer32(&karg.v2b, up); | |||
| 1028 | break; | |||
| 1029 | ||||
| 1030 | case VIDIOC_ENUMSTD(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((25)) << 0) | (((((sizeof(struct v4l2_standard) == sizeof(struct v4l2_standard[1]) && sizeof(struct v4l2_standard ) < (1 << 14)) ? sizeof(struct v4l2_standard) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1031 | err = put_v4l2_standard32(&karg.v2s, up); | |||
| 1032 | break; | |||
| 1033 | ||||
| 1034 | case VIDIOC_ENUMINPUT(((2U|1U) << (((0 +8)+8)+14)) | ((('V')) << (0 +8 )) | (((26)) << 0) | (((((sizeof(struct v4l2_input) == sizeof (struct v4l2_input[1]) && sizeof(struct v4l2_input) < (1 << 14)) ? sizeof(struct v4l2_input) : __invalid_size_argument_for_IOC ))) << ((0 +8)+8))): | |||
| 1035 | err = put_v4l2_input32(&karg.v2i, up); | |||
| 1036 | break; | |||
| 1037 | } | |||
| 1038 | return err; | |||
| 1039 | } | |||
| 1040 | ||||
| 1041 | long v4l2_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 1042 | { | |||
| 1043 | struct video_device *vdev = video_devdata(file); | |||
| 1044 | long ret = -ENOIOCTLCMD515; | |||
| 1045 | ||||
| 1046 | if (!file->f_op->unlocked_ioctl) | |||
| 1047 | return ret; | |||
| 1048 | ||||
| 1049 | if (_IOC_TYPE(cmd)(((cmd) >> (0 +8)) & ((1 << 8)-1)) == 'V' && _IOC_NR(cmd)(((cmd) >> 0) & ((1 << 8)-1)) < BASE_VIDIOC_PRIVATE192) | |||
| 1050 | ret = do_video_ioctl(file, cmd, arg); | |||
| 1051 | else if (vdev->fops->compat_ioctl32) | |||
| 1052 | ret = vdev->fops->compat_ioctl32(file, cmd, arg); | |||
| 1053 | ||||
| 1054 | if (ret == -ENOIOCTLCMD515) | |||
| 1055 | pr_debug("compat_ioctl32: unknown ioctl '%c', dir=%d, #%d (0x%08x)\n",do { static struct _ddebug __attribute__((aligned(8))) __attribute__ ((section("__verbose"))) descriptor = { .modname = "videodev" , .function = __func__, .filename = "drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , .format = ("compat_ioctl32: unknown ioctl '%c', dir=%d, #%d (0x%08x)\n" ), .lineno = 1056, .flags = 0, }; if ((descriptor.flags & (1<<0))) __dynamic_pr_debug(&descriptor, "compat_ioctl32: unknown ioctl '%c', dir=%d, #%d (0x%08x)\n" , (((cmd) >> (0 +8)) & ((1 << 8)-1)), (((cmd) >> (((0 +8)+8)+14)) & ((1 << 2)-1)), (((cmd) >> 0) & ((1 << 8)-1)), cmd); } while (0) | |||
| 1056 | _IOC_TYPE(cmd), _IOC_DIR(cmd), _IOC_NR(cmd), cmd)do { static struct _ddebug __attribute__((aligned(8))) __attribute__ ((section("__verbose"))) descriptor = { .modname = "videodev" , .function = __func__, .filename = "drivers/media/v4l2-core/v4l2-compat-ioctl32.c" , .format = ("compat_ioctl32: unknown ioctl '%c', dir=%d, #%d (0x%08x)\n" ), .lineno = 1056, .flags = 0, }; if ((descriptor.flags & (1<<0))) __dynamic_pr_debug(&descriptor, "compat_ioctl32: unknown ioctl '%c', dir=%d, #%d (0x%08x)\n" , (((cmd) >> (0 +8)) & ((1 << 8)-1)), (((cmd) >> (((0 +8)+8)+14)) & ((1 << 2)-1)), (((cmd) >> 0) & ((1 << 8)-1)), cmd); } while (0); | |||
| 1057 | return ret; | |||
| 1058 | } | |||
| 1059 | EXPORT_SYMBOL_GPL(v4l2_compat_ioctl32)extern typeof(v4l2_compat_ioctl32) v4l2_compat_ioctl32; extern void *__crc_v4l2_compat_ioctl32 __attribute__((weak)); static const unsigned long __kcrctab_v4l2_compat_ioctl32 __attribute__ ((__used__)) __attribute__((section("___kcrctab" "_gpl" "+" "v4l2_compat_ioctl32" ), used)) = (unsigned long) &__crc_v4l2_compat_ioctl32; static const char __kstrtab_v4l2_compat_ioctl32[] __attribute__((section ("__ksymtab_strings"), aligned(1))) = "v4l2_compat_ioctl32"; static const struct kernel_symbol __ksymtab_v4l2_compat_ioctl32 __attribute__ ((__used__)) __attribute__((section("___ksymtab" "_gpl" "+" "v4l2_compat_ioctl32" ), used)) = { (unsigned long)&v4l2_compat_ioctl32, __kstrtab_v4l2_compat_ioctl32 }; |