• Stefan Metzmacher's avatar
    io_uring: call req_set_fail_links() on short send[msg]()/recv[msg]() with MSG_WAITALL · 0031275d
    Stefan Metzmacher authored
    Without that it's not safe to use them in a linked combination with
    others.
    
    Now combinations like IORING_OP_SENDMSG followed by IORING_OP_SPLICE
    should be possible.
    
    We already handle short reads and writes for the following opcodes:
    
    - IORING_OP_READV
    - IORING_OP_READ_FIXED
    - IORING_OP_READ
    - IORING_OP_WRITEV
    - IORING_OP_WRITE_FIXED
    - IORING_OP_WRITE
    - IORING_OP_SPLICE
    - IORING_OP_TEE
    
    Now we have it for these as well:
    
    - IORING_OP_SENDMSG
    - IORING_OP_SEND
    - IORING_OP_RECVMSG
    - IORING_OP_RECV
    
    For IORING_OP_RECVMSG we also check for the MSG_TRUNC and MSG_CTRUNC
    flags in order to call req_set_fail_links().
    
    There might be applications arround depending on the behavior
    that even short send[msg]()/recv[msg]() retuns continue an
    IOSQE_IO_LINK chain.
    
    It's very unlikely that such applications pass in MSG_WAITALL,
    which is only defined in 'man 2 recvmsg', but not in 'man 2 sendmsg'.
    
    It's expected that the low level sock_sendmsg() call just ignores
    MSG_WAITALL, as MSG_ZEROCOPY is also ignored without explicitly set
    SO_ZEROCOPY.
    
    We also expect the caller to know about the implicit truncation to
    MAX_RW_COUNT, which we don't detect.
    
    cc: netdev@vger.kernel.org
    Link: https://lore.kernel.org/r/c4e1a4cc0d905314f4d5dc567e65a7b09621aab3.1615908477.git.metze@samba.orgSigned-off-by: default avatarStefan Metzmacher <metze@samba.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    0031275d
io_uring.c 242 KB