On 07/28/2014 02:36 AM, Kirill A. Shutemov wrote: > +++ b/mm/memory.c > @@ -2786,7 +2786,8 @@ static int fault_around_bytes_set(void *data, u64 val) > { > if (val / PAGE_SIZE > PTRS_PER_PTE) > return -EINVAL; > - fault_around_bytes = val; > + /* rounddown_pow_of_two(0) is not defined */ > + fault_around_bytes = max(val, PAGE_SIZE); > return 0; > } It's also possible to race and have fault_around_bytes change between when fault_around_mask() and fault_around_pages() are called so that they don't match any more. The min()/max() in do_fault_around() should keep this from doing anything _too_ nasty, but it's worth thinking about at least. The safest thing to do might be to use an ACCESS_ONCE() at the beginning of do_fault_around() for fault_around_bytes and generate fault_around_mask() from the ACCESS_ONCE() result. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>