File: | drivers/media/v4l2-core/v4l2-compat-ioctl32.c |
Warning: | line 145, column 6 Copies out a struct with uncleared padding (>= 2 bytes) |
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 }; |