• J. Bruce Fields's avatar
    locks: fix posix lock range overflow handling · ef12e72a
    J. Bruce Fields authored
    In the 32-bit case fcntl assigns the 64-bit f_pos and i_size to a 32-bit
    off_t.
    
    The existing range checks also seem to depend on signed arithmetic
    wrapping when it overflows.  In practice maybe that works, but we can be
    more careful.  That also allows us to make a more reliable distinction
    between -EINVAL and -EOVERFLOW.
    
    Note that in the 32-bit case SEEK_CUR or SEEK_END might allow the caller
    to set a lock with starting point no longer representable as a 32-bit
    value.  We could return -EOVERFLOW in such cases, but the locks code is
    capable of handling such ranges, so we choose to be lenient here.  The
    only problem is that subsequent GETLK calls on such a lock will fail
    with EOVERFLOW.
    
    While we're here, do some cleanup including consolidating code for the
    flock and flock64 cases.
    Signed-off-by: default avatarJ. Bruce Fields <bfields@fieldses.org>
    Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
    ef12e72a
locks.c 66.1 KB