Re: [PATCH] mm: avoid undefined behavior in hardened usercopy check

2016-08-19 Thread Kees Cook
On Fri, Aug 19, 2016 at 12:15 PM, Eric Biggers wrote: > check_bogus_address() checked for pointer overflow using this expression, > where 'ptr' has type 'const void *': > > ptr + n < ptr > > Since pointer wraparound is undefined behavior, gcc at -O2 by default >

Re: [PATCH] mm: avoid undefined behavior in hardened usercopy check

2016-08-19 Thread Kees Cook
On Fri, Aug 19, 2016 at 12:15 PM, Eric Biggers wrote: > check_bogus_address() checked for pointer overflow using this expression, > where 'ptr' has type 'const void *': > > ptr + n < ptr > > Since pointer wraparound is undefined behavior, gcc at -O2 by default > treats it like the

[PATCH] mm: avoid undefined behavior in hardened usercopy check

2016-08-19 Thread Eric Biggers
check_bogus_address() checked for pointer overflow using this expression, where 'ptr' has type 'const void *': ptr + n < ptr Since pointer wraparound is undefined behavior, gcc at -O2 by default treats it like the following, which would not behave as intended: (long)n < 0

[PATCH] mm: avoid undefined behavior in hardened usercopy check

2016-08-19 Thread Eric Biggers
check_bogus_address() checked for pointer overflow using this expression, where 'ptr' has type 'const void *': ptr + n < ptr Since pointer wraparound is undefined behavior, gcc at -O2 by default treats it like the following, which would not behave as intended: (long)n < 0