History

Merge branch 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm

Pull ARM fixes from Russell King: "A couple of fixes from Kees concerning problems he spotted with our user access support" * 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm: ARM: 8658/1: uaccess: fix zeroing of 64-bit get_user() ARM: 8657/1: uaccess: consistently check object sizes

Linus Torvalds committed 9 years ago

Commit b92ce302 parents 17a984b 9e344042 files · +33 −13Browse files

Unified · Split

2 files
  1. arch/arm/include/asm/uaccess.h +32 −12
  2. arch/arm/lib/getuser.S +1 −1
arch/arm/include/asm/uaccess.h+32−12
@@ -478,11 +478,10 @@ extern unsigned long __must_check · 477 unmodified lines
478478 arm_copy_from_user(void *to, const void __user *from, unsigned long n);
479479
480480 static inline unsigned long __must_check
481−__copy_from_user(void *to, const void __user *from, unsigned long n)
481+__arch_copy_from_user(void *to, const void __user *from, unsigned long n)
482482 {
483483 unsigned int __ua_flags;
484484
485− check_object_size(to, n, false);
486485 __ua_flags = uaccess_save_and_enable();
487486 n = arm_copy_from_user(to, from, n);
488487 uaccess_restore(__ua_flags);
@@ -495,18 +494,15 @@ extern unsigned long __must_check · 6 unmodified lines
495494 __copy_to_user_std(void __user *to, const void *from, unsigned long n);
496495
497496 static inline unsigned long __must_check
498−__copy_to_user(void __user *to, const void *from, unsigned long n)
497+__arch_copy_to_user(void __user *to, const void *from, unsigned long n)
499498 {
500499 #ifndef CONFIG_UACCESS_WITH_MEMCPY
501500 unsigned int __ua_flags;
502−
503− check_object_size(from, n, true);
504501 __ua_flags = uaccess_save_and_enable();
505502 n = arm_copy_to_user(to, from, n);
506503 uaccess_restore(__ua_flags);
507504 return n;
508505 #else
509− check_object_size(from, n, true);
510506 return arm_copy_to_user(to, from, n);
511507 #endif
512508 }
@@ -526,25 +522,49 @@ __clear_user(void __user *addr, unsigned long n) · 13 unmodified lines
526522 }
527523
528524 #else
529−#define __copy_from_user(to, from, n) (memcpy(to, (void __force *)from, n), 0)
530−#define __copy_to_user(to, from, n) (memcpy((void __force *)to, from, n), 0)
525+#define __arch_copy_from_user(to, from, n) \
526+ (memcpy(to, (void __force *)from, n), 0)
527+#define __arch_copy_to_user(to, from, n) \
528+ (memcpy((void __force *)to, from, n), 0)
531529 #define __clear_user(addr, n) (memset((void __force *)addr, 0, n), 0)
532530 #endif
533531
534−static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long n)
532+static inline unsigned long __must_check
533+__copy_from_user(void *to, const void __user *from, unsigned long n)
534+{
535+ check_object_size(to, n, false);
536+ return __arch_copy_from_user(to, from, n);
537+}
538+
539+static inline unsigned long __must_check
540+copy_from_user(void *to, const void __user *from, unsigned long n)
535541 {
536542 unsigned long res = n;
543+
544+ check_object_size(to, n, false);
545+
537546 if (likely(access_ok(VERIFY_READ, from, n)))
538− res = __copy_from_user(to, from, n);
547+ res = __arch_copy_from_user(to, from, n);
539548 if (unlikely(res))
540549 memset(to + (n - res), 0, res);
541550 return res;
542551 }
543552
544−static inline unsigned long __must_check copy_to_user(void __user *to, const void *from, unsigned long n)
553+static inline unsigned long __must_check
554+__copy_to_user(void __user *to, const void *from, unsigned long n)
545555 {
556+ check_object_size(from, n, true);
557+
558+ return __arch_copy_to_user(to, from, n);
559+}
560+
561+static inline unsigned long __must_check
562+copy_to_user(void __user *to, const void *from, unsigned long n)
563+{
564+ check_object_size(from, n, true);
565+
546566 if (access_ok(VERIFY_WRITE, to, n))
547− n = __copy_to_user(to, from, n);
567+ n = __arch_copy_to_user(to, from, n);
548568 return n;
549569 }
550570
arch/arm/lib/getuser.S+1−1
@@ -67,7 +67,7 @@ ENTRY(__get_user_4) · 66 unmodified lines
6767 ENDPROC(__get_user_4)
6868
6969 ENTRY(__get_user_8)
70− check_uaccess r0, 8, r1, r2, __get_user_bad
70+ check_uaccess r0, 8, r1, r2, __get_user_bad8
7171 #ifdef CONFIG_THUMB2_KERNEL
7272 5: TUSER(ldr) r2, [r0]
7373 6: TUSER(ldr) r3, [r0, #4]

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t