compat: Make compat_alloc_user_space() incorporate the access_ok()
commit c41d68a5 upstream. compat_alloc_user_space() expects the caller to independently call access_ok() to verify the returned area. A missing call could introduce problems on some architectures. This patch incorporates the access_ok() check into compat_alloc_user_space() and also adds a sanity check on the length. The existing compat_alloc_user_space() implementations are renamed arch_compat_alloc_user_space() and are used as part of the implementation of the new global function. This patch assumes NULL will cause __get_user()/__put_user() to either fail or access userspace on all architectures. This should be followed by checking the return value of compat_access_user_space() for NULL in the callers, at which time the access_ok() in the callers can also be removed. Reported-by:Ben Hawkes <hawkes@sota.gen.nz> Signed-off-by:
H. Peter Anvin <hpa@linux.intel.com> Acked-by:
Benjamin Herrenschmidt <benh@...>
Showing
- arch/ia64/include/asm/compat.h 1 addition, 1 deletionarch/ia64/include/asm/compat.h
- arch/powerpc/include/asm/compat.h 1 addition, 1 deletionarch/powerpc/include/asm/compat.h
- arch/s390/include/asm/compat.h 1 addition, 1 deletionarch/s390/include/asm/compat.h
- arch/sparc/include/asm/compat.h 1 addition, 1 deletionarch/sparc/include/asm/compat.h
- include/asm-mips/compat.h 1 addition, 1 deletioninclude/asm-mips/compat.h
- include/asm-parisc/compat.h 1 addition, 1 deletioninclude/asm-parisc/compat.h
- include/asm-x86/compat.h 1 addition, 1 deletioninclude/asm-x86/compat.h
- include/linux/compat.h 2 additions, 0 deletionsinclude/linux/compat.h
- kernel/compat.c 22 additions, 0 deletionskernel/compat.c
Please register or sign in to comment