mirror of
https://github.com/tbsdtv/media_build.git
synced 2025-07-23 04:13:02 +02:00
Update backports/v4.20_access_ok.patch
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
@@ -11,259 +11,3 @@ index 95a56cce9b65..02c03ec6e3c6 100644
|
||||
IVTVFB_WARN("Invalid userspace pointer %p\n", source);
|
||||
|
||||
IVTVFB_DEBUG_WARN("access_ok() failed for offset 0x%08lx source %p count %d\n",
|
||||
diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
|
||||
index a99e82ec9ab6..878a1497c971 100644
|
||||
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
|
||||
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
|
||||
@@ -159,7 +159,7 @@ static int get_v4l2_window32(struct v4l2_window __user *p64,
|
||||
compat_caddr_t p;
|
||||
u32 clipcount;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
copy_in_user(&p64->w, &p32->w, sizeof(p32->w)) ||
|
||||
assign_in_user(&p64->field, &p32->field) ||
|
||||
assign_in_user(&p64->chromakey, &p32->chromakey) ||
|
||||
@@ -284,7 +284,7 @@ static int __bufsize_v4l2_format(struct v4l2_format32 __user *p32, u32 *size)
|
||||
|
||||
static int bufsize_v4l2_format(struct v4l2_format32 __user *p32, u32 *size)
|
||||
{
|
||||
- if (!access_ok(p32, sizeof(*p32)))
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)))
|
||||
return -EFAULT;
|
||||
return __bufsize_v4l2_format(p32, size);
|
||||
}
|
||||
@@ -336,7 +336,7 @@ static int get_v4l2_format32(struct v4l2_format __user *p64,
|
||||
struct v4l2_format32 __user *p32,
|
||||
void __user *aux_buf, u32 aux_space)
|
||||
{
|
||||
- if (!access_ok(p32, sizeof(*p32)))
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)))
|
||||
return -EFAULT;
|
||||
return __get_v4l2_format32(p64, p32, aux_buf, aux_space);
|
||||
}
|
||||
@@ -344,7 +344,7 @@ static int get_v4l2_format32(struct v4l2_format __user *p64,
|
||||
static int bufsize_v4l2_create(struct v4l2_create_buffers32 __user *p32,
|
||||
u32 *size)
|
||||
{
|
||||
- if (!access_ok(p32, sizeof(*p32)))
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)))
|
||||
return -EFAULT;
|
||||
return __bufsize_v4l2_format(&p32->format, size);
|
||||
}
|
||||
@@ -353,7 +353,7 @@ static int get_v4l2_create32(struct v4l2_create_buffers __user *p64,
|
||||
struct v4l2_create_buffers32 __user *p32,
|
||||
void __user *aux_buf, u32 aux_space)
|
||||
{
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
copy_in_user(p64, p32,
|
||||
offsetof(struct v4l2_create_buffers32, format)))
|
||||
return -EFAULT;
|
||||
@@ -405,7 +405,7 @@ static int __put_v4l2_format32(struct v4l2_format __user *p64,
|
||||
static int put_v4l2_format32(struct v4l2_format __user *p64,
|
||||
struct v4l2_format32 __user *p32)
|
||||
{
|
||||
- if (!access_ok(p32, sizeof(*p32)))
|
||||
+ if (!access_ok(VERIFY_WRITE, p32, sizeof(*p32)))
|
||||
return -EFAULT;
|
||||
return __put_v4l2_format32(p64, p32);
|
||||
}
|
||||
@@ -413,7 +413,7 @@ static int put_v4l2_format32(struct v4l2_format __user *p64,
|
||||
static int put_v4l2_create32(struct v4l2_create_buffers __user *p64,
|
||||
struct v4l2_create_buffers32 __user *p32)
|
||||
{
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_WRITE, p32, sizeof(*p32)) ||
|
||||
copy_in_user(p32, p64,
|
||||
offsetof(struct v4l2_create_buffers32, format)) ||
|
||||
assign_in_user(&p32->capabilities, &p64->capabilities) ||
|
||||
@@ -435,7 +435,7 @@ static int get_v4l2_standard32(struct v4l2_standard __user *p64,
|
||||
struct v4l2_standard32 __user *p32)
|
||||
{
|
||||
/* other fields are not set by the user, nor used by the driver */
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p64->index, &p32->index))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
@@ -444,7 +444,7 @@ static int get_v4l2_standard32(struct v4l2_standard __user *p64,
|
||||
static int put_v4l2_standard32(struct v4l2_standard __user *p64,
|
||||
struct v4l2_standard32 __user *p32)
|
||||
{
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_WRITE, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p32->index, &p64->index) ||
|
||||
assign_in_user(&p32->id, &p64->id) ||
|
||||
copy_in_user(p32->name, p64->name, sizeof(p32->name)) ||
|
||||
@@ -591,7 +591,7 @@ static int bufsize_v4l2_buffer(struct v4l2_buffer32 __user *p32, u32 *size)
|
||||
u32 type;
|
||||
u32 length;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
get_user(type, &p32->type) ||
|
||||
get_user(length, &p32->length))
|
||||
return -EFAULT;
|
||||
@@ -616,7 +616,7 @@ static int bufsize_v4l2_buffer_time32(struct v4l2_buffer32_time32 __user *p32, u
|
||||
u32 type;
|
||||
u32 length;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
get_user(type, &p32->type) ||
|
||||
get_user(length, &p32->length))
|
||||
return -EFAULT;
|
||||
@@ -649,7 +649,7 @@ static int get_v4l2_buffer32(struct v4l2_buffer __user *p64,
|
||||
compat_caddr_t p;
|
||||
int ret;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p64->index, &p32->index) ||
|
||||
get_user(type, &p32->type) ||
|
||||
put_user(type, &p64->type) ||
|
||||
@@ -688,7 +688,7 @@ static int get_v4l2_buffer32(struct v4l2_buffer __user *p64,
|
||||
return -EFAULT;
|
||||
|
||||
uplane32 = compat_ptr(p);
|
||||
- if (!access_ok(uplane32,
|
||||
+ if (!access_ok(VERIFY_READ, uplane32,
|
||||
num_planes * sizeof(*uplane32)))
|
||||
return -EFAULT;
|
||||
|
||||
@@ -749,7 +749,7 @@ static int get_v4l2_buffer32_time32(struct v4l2_buffer_time32 __user *p64,
|
||||
compat_caddr_t p;
|
||||
int ret;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p64->index, &p32->index) ||
|
||||
get_user(type, &p32->type) ||
|
||||
put_user(type, &p64->type) ||
|
||||
@@ -788,7 +788,7 @@ static int get_v4l2_buffer32_time32(struct v4l2_buffer_time32 __user *p64,
|
||||
return -EFAULT;
|
||||
|
||||
uplane32 = compat_ptr(p);
|
||||
- if (!access_ok(uplane32,
|
||||
+ if (!access_ok(VERIFY_READ, uplane32,
|
||||
num_planes * sizeof(*uplane32)))
|
||||
return -EFAULT;
|
||||
|
||||
@@ -847,7 +847,7 @@ static int put_v4l2_buffer32(struct v4l2_buffer __user *p64,
|
||||
compat_caddr_t p;
|
||||
int ret;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_WRITE, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p32->index, &p64->index) ||
|
||||
get_user(type, &p64->type) ||
|
||||
put_user(type, &p32->type) ||
|
||||
@@ -927,7 +927,7 @@ static int put_v4l2_buffer32_time32(struct v4l2_buffer_time32 __user *p64,
|
||||
compat_caddr_t p;
|
||||
int ret;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_WRITE, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p32->index, &p64->index) ||
|
||||
get_user(type, &p64->type) ||
|
||||
put_user(type, &p32->type) ||
|
||||
@@ -1017,7 +1017,7 @@ static int get_v4l2_framebuffer32(struct v4l2_framebuffer __user *p64,
|
||||
{
|
||||
compat_caddr_t tmp;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
get_user(tmp, &p32->base) ||
|
||||
put_user_force(compat_ptr(tmp), &p64->base) ||
|
||||
assign_in_user(&p64->capability, &p32->capability) ||
|
||||
@@ -1032,7 +1032,7 @@ static int put_v4l2_framebuffer32(struct v4l2_framebuffer __user *p64,
|
||||
{
|
||||
void *base;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_WRITE, p32, sizeof(*p32)) ||
|
||||
get_user(base, &p64->base) ||
|
||||
put_user(ptr_to_compat((void __user *)base), &p32->base) ||
|
||||
assign_in_user(&p32->capability, &p64->capability) ||
|
||||
@@ -1129,7 +1129,7 @@ static int bufsize_v4l2_ext_controls(struct v4l2_ext_controls32 __user *p32,
|
||||
{
|
||||
u32 count;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
get_user(count, &p32->count))
|
||||
return -EFAULT;
|
||||
if (count > V4L2_CID_MAX_CTRLS)
|
||||
@@ -1149,7 +1149,7 @@ static int get_v4l2_ext_controls32(struct file *file,
|
||||
u32 n;
|
||||
compat_caddr_t p;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p64->which, &p32->which) ||
|
||||
get_user(count, &p32->count) ||
|
||||
put_user(count, &p64->count) ||
|
||||
@@ -1165,7 +1165,7 @@ static int get_v4l2_ext_controls32(struct file *file,
|
||||
if (get_user(p, &p32->controls))
|
||||
return -EFAULT;
|
||||
ucontrols = compat_ptr(p);
|
||||
- if (!access_ok(ucontrols, count * sizeof(*ucontrols)))
|
||||
+ if (!access_ok(VERIFY_READ, ucontrols, count * sizeof(*ucontrols)))
|
||||
return -EFAULT;
|
||||
if (aux_space < count * sizeof(*kcontrols))
|
||||
return -EFAULT;
|
||||
@@ -1215,7 +1215,7 @@ static int put_v4l2_ext_controls32(struct file *file,
|
||||
* with __user causes smatch warnings, so instead declare it
|
||||
* without __user and cast it as a userspace pointer where needed.
|
||||
*/
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_WRITE, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p32->which, &p64->which) ||
|
||||
get_user(count, &p64->count) ||
|
||||
put_user(count, &p32->count) ||
|
||||
@@ -1230,7 +1230,7 @@ static int put_v4l2_ext_controls32(struct file *file,
|
||||
if (get_user(p, &p32->controls))
|
||||
return -EFAULT;
|
||||
ucontrols = compat_ptr(p);
|
||||
- if (!access_ok(ucontrols, count * sizeof(*ucontrols)))
|
||||
+ if (!access_ok(VERIFY_WRITE, ucontrols, count * sizeof(*ucontrols)))
|
||||
return -EFAULT;
|
||||
|
||||
for (n = 0; n < count; n++) {
|
||||
@@ -1304,7 +1304,7 @@ struct v4l2_event32_time32 {
|
||||
static int put_v4l2_event32(struct v4l2_event __user *p64,
|
||||
struct v4l2_event32 __user *p32)
|
||||
{
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_WRITE, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p32->type, &p64->type) ||
|
||||
copy_in_user(&p32->u, &p64->u, sizeof(p64->u)) ||
|
||||
assign_in_user(&p32->pending, &p64->pending) ||
|
||||
@@ -1320,7 +1320,7 @@ static int put_v4l2_event32(struct v4l2_event __user *p64,
|
||||
static int put_v4l2_event32_time32(struct v4l2_event_time32 __user *p64,
|
||||
struct v4l2_event32_time32 __user *p32)
|
||||
{
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_WRITE, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p32->type, &p64->type) ||
|
||||
copy_in_user(&p32->u, &p64->u, sizeof(p64->u)) ||
|
||||
assign_in_user(&p32->pending, &p64->pending) ||
|
||||
@@ -1347,7 +1347,7 @@ static int get_v4l2_edid32(struct v4l2_edid __user *p64,
|
||||
{
|
||||
compat_uptr_t tmp;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p64->pad, &p32->pad) ||
|
||||
assign_in_user(&p64->start_block, &p32->start_block) ||
|
||||
assign_in_user_cast(&p64->blocks, &p32->blocks) ||
|
||||
@@ -1363,7 +1363,7 @@ static int put_v4l2_edid32(struct v4l2_edid __user *p64,
|
||||
{
|
||||
void *edid;
|
||||
|
||||
- if (!access_ok(p32, sizeof(*p32)) ||
|
||||
+ if (!access_ok(VERIFY_WRITE, p32, sizeof(*p32)) ||
|
||||
assign_in_user(&p32->pad, &p64->pad) ||
|
||||
assign_in_user(&p32->start_block, &p64->start_block) ||
|
||||
assign_in_user(&p32->blocks, &p64->blocks) ||
|
||||
|
Reference in New Issue
Block a user