/** * check_zeroed_user: check if a userspace buffer only contains zero bytes * @from: Source address, in userspace. * @size: Size of buffer. * * This is effectively shorthand for "memchr_inv(from, 0, size) == NULL" for * userspace addresses (and is more efficient because we don't care where the * first non-zero byte is). * * Returns: * * 0: There were non-zero bytes present in the buffer. * * 1: The buffer was full of zero bytes. * * -EFAULT: access to userspace failed.
*/ int check_zeroed_user(constvoid __user *from, size_t size)
{ unsignedlong val;
uintptr_t align = (uintptr_t) from % sizeof(unsignedlong);
if (unlikely(size == 0)) return 1;
from -= align;
size += align;
if (!user_read_access_begin(from, size)) return -EFAULT;
unsafe_get_user(val, (unsignedlong __user *) from, err_fault); if (align)
val &= ~aligned_byte_mask(align);
while (size > sizeof(unsignedlong)) { if (unlikely(val)) goto done;
from += sizeof(unsignedlong);
size -= sizeof(unsignedlong);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.