• Christoph Hellwig's avatar
    iov_iter: refactor rw_copy_check_uvector and import_iovec · bfdc5970
    Christoph Hellwig authored
    Split rw_copy_check_uvector into two new helpers with more sensible
    calling conventions:
    
     - iovec_from_user copies a iovec from userspace either into the provided
       stack buffer if it fits, or allocates a new buffer for it.  Returns
       the actually used iovec.  It also verifies that iov_len does fit a
       signed type, and handles compat iovecs if the compat flag is set.
     - __import_iovec consolidates the native and compat versions of
       import_iovec. It calls iovec_from_user, then validates each iovec
       actually points to user addresses, and ensures the total length
       doesn't overflow.
    
    This has two major implications:
    
     - the access_process_vm case loses the total lenght checking, which
       wasn't required anyway, given that each call receives two iovecs
       for the local and remote side of the operation, and it verifies
       the total length on the local side already.
     - instead of a single loop there now are two loops over the iovecs.
       Given that the iovecs are cache hot this doesn't make a major
       difference
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    bfdc5970
iov_iter.c 44.7 KB