diff options
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 1 | ||||
-rw-r--r-- | arch/arm/kernel/sys_oabi-compat.c | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index bc5f50799d75..9f157e7c51e7 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -295,6 +295,7 @@ __und_svc_fault: | |||
295 | bl __und_fault | 295 | bl __und_fault |
296 | 296 | ||
297 | __und_svc_finish: | 297 | __und_svc_finish: |
298 | get_thread_info tsk | ||
298 | ldr r5, [sp, #S_PSR] @ Get SVC cpsr | 299 | ldr r5, [sp, #S_PSR] @ Get SVC cpsr |
299 | svc_exit r5 @ return from exception | 300 | svc_exit r5 @ return from exception |
300 | UNWIND(.fnend ) | 301 | UNWIND(.fnend ) |
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c index 087acb569b63..5f221acd21ae 100644 --- a/arch/arm/kernel/sys_oabi-compat.c +++ b/arch/arm/kernel/sys_oabi-compat.c | |||
@@ -279,8 +279,12 @@ asmlinkage long sys_oabi_epoll_wait(int epfd, | |||
279 | mm_segment_t fs; | 279 | mm_segment_t fs; |
280 | long ret, err, i; | 280 | long ret, err, i; |
281 | 281 | ||
282 | if (maxevents <= 0 || maxevents > (INT_MAX/sizeof(struct epoll_event))) | 282 | if (maxevents <= 0 || |
283 | maxevents > (INT_MAX/sizeof(*kbuf)) || | ||
284 | maxevents > (INT_MAX/sizeof(*events))) | ||
283 | return -EINVAL; | 285 | return -EINVAL; |
286 | if (!access_ok(VERIFY_WRITE, events, sizeof(*events) * maxevents)) | ||
287 | return -EFAULT; | ||
284 | kbuf = kmalloc(sizeof(*kbuf) * maxevents, GFP_KERNEL); | 288 | kbuf = kmalloc(sizeof(*kbuf) * maxevents, GFP_KERNEL); |
285 | if (!kbuf) | 289 | if (!kbuf) |
286 | return -ENOMEM; | 290 | return -ENOMEM; |
@@ -317,6 +321,8 @@ asmlinkage long sys_oabi_semtimedop(int semid, | |||
317 | 321 | ||
318 | if (nsops < 1 || nsops > SEMOPM) | 322 | if (nsops < 1 || nsops > SEMOPM) |
319 | return -EINVAL; | 323 | return -EINVAL; |
324 | if (!access_ok(VERIFY_READ, tsops, sizeof(*tsops) * nsops)) | ||
325 | return -EFAULT; | ||
320 | sops = kmalloc(sizeof(*sops) * nsops, GFP_KERNEL); | 326 | sops = kmalloc(sizeof(*sops) * nsops, GFP_KERNEL); |
321 | if (!sops) | 327 | if (!sops) |
322 | return -ENOMEM; | 328 | return -ENOMEM; |