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 from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html