|
@@ -279,8 +279,12 @@ asmlinkage long sys_oabi_epoll_wait(int epfd,
|
|
|
mm_segment_t fs;
|
|
|
long ret, err, i;
|
|
|
|
|
|
- if (maxevents <= 0 || maxevents > (INT_MAX/sizeof(struct epoll_event)))
|
|
|
+ if (maxevents <= 0 ||
|
|
|
+ maxevents > (INT_MAX/sizeof(*kbuf)) ||
|
|
|
+ maxevents > (INT_MAX/sizeof(*events)))
|
|
|
return -EINVAL;
|
|
|
+ if (!access_ok(VERIFY_WRITE, events, sizeof(*events) * maxevents))
|
|
|
+ return -EFAULT;
|
|
|
kbuf = kmalloc(sizeof(*kbuf) * maxevents, GFP_KERNEL);
|
|
|
if (!kbuf)
|
|
|
return -ENOMEM;
|
|
@@ -317,6 +321,8 @@ asmlinkage long sys_oabi_semtimedop(int semid,
|
|
|
|
|
|
if (nsops < 1 || nsops > SEMOPM)
|
|
|
return -EINVAL;
|
|
|
+ if (!access_ok(VERIFY_READ, tsops, sizeof(*tsops) * nsops))
|
|
|
+ return -EFAULT;
|
|
|
sops = kmalloc(sizeof(*sops) * nsops, GFP_KERNEL);
|
|
|
if (!sops)
|
|
|
return -ENOMEM;
|