On Wed, Sep 25, 2019 at 10:00 AM Aleksa Sarai <cyphar@xxxxxxxxxx> wrote: > > +int is_zeroed_user(const void __user *from, size_t size) I like how you've done this, but it's buggy and only works on 64-bit. All the "u64" and "8" cases need to be "unsigned long" and "sizeof(unsigned long)". Part of that requirement is: > + unsafe_get_user(val, (u64 __user *) from, err_fault); This part works fine - although 64-bit accesses migth be much more expensive and the win of unrolling might not be sufficient - but: > + if (align) { > + /* @from is unaligned. */ > + val &= ~aligned_byte_mask(align); > + align = 0; > + } This part fundamentally only works on 'unsigned long'. Linus