• Al Viro's avatar
    io_uring/cmd: fix breakage in SOCKET_URING_OP_SIOC* implementation · 1ba0e9d6
    Al Viro authored
    	In 8e9fad0e "io_uring: Add io_uring command support for sockets"
    you've got an include of asm-generic/ioctls.h done in io_uring/uring_cmd.c.
    That had been done for the sake of this chunk -
    +               ret = prot->ioctl(sk, SIOCINQ, &arg);
    +               if (ret)
    +                       return ret;
    +               return arg;
    +       case SOCKET_URING_OP_SIOCOUTQ:
    +               ret = prot->ioctl(sk, SIOCOUTQ, &arg);
    
    SIOC{IN,OUT}Q are defined to symbols (FIONREAD and TIOCOUTQ) that come from
    ioctls.h, all right, but the values vary by the architecture.
    
    FIONREAD is
    	0x467F on mips
    	0x4004667F on alpha, powerpc and sparc
    	0x8004667F on sh and xtensa
    	0x541B everywhere else
    TIOCOUTQ is
    	0x7472 on mips
    	0x40047473 on alpha, powerpc and sparc
    	0x80047473 on sh and xtensa
    	0x5411 everywhere else
    
    ->ioctl() expects the same values it would've gotten from userland; all
    places where we compare with SIOC{IN,OUT}Q are using asm/ioctls.h, so
    they pick the correct values.  io_uring_cmd_sock(), OTOH, ends up
    passing the default ones.
    
    Fixes: 8e9fad0e ("io_uring: Add io_uring command support for sockets")
    Cc:  <stable@vger.kernel.org>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    Link: https://lore.kernel.org/r/20231214213408.GT1674809@ZenIVSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    1ba0e9d6
uring_cmd.c 7.77 KB