• Jens Axboe's avatar
    io_uring: ensure openat sets O_LARGEFILE if needed · 08a1d26e
    Jens Axboe authored
    OPENAT2 correctly sets O_LARGEFILE if it has to, but that escaped the
    OPENAT opcode. Dmitry reports that his test case that compares openat()
    and IORING_OP_OPENAT sees failures on large files:
    
    *** sync openat
    openat succeeded
    sync write at offset 0
    write succeeded
    sync write at offset 4294967296
    write succeeded
    
    *** sync openat
    openat succeeded
    io_uring write at offset 0
    write succeeded
    io_uring write at offset 4294967296
    write succeeded
    
    *** io_uring openat
    openat succeeded
    sync write at offset 0
    write succeeded
    sync write at offset 4294967296
    write failed: File too large
    
    *** io_uring openat
    openat succeeded
    io_uring write at offset 0
    write succeeded
    io_uring write at offset 4294967296
    write failed: File too large
    
    Ensure we set O_LARGEFILE, if force_o_largefile() is true.
    
    Cc: stable@vger.kernel.org # v5.6
    Fixes: 15b71abe ("io_uring: add support for IORING_OP_OPENAT")
    Reported-by: default avatarDmitry Kadashev <dkadashev@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    08a1d26e
io_uring.c 190 KB