From: Willem de Bruijn > Sent: 13 April 2023 15:25 ... > > For instance the raw_ioctl()/rawv6_ioctl() case. The "arg" argument is > > used in different ways (one for input and one for output): > > > > 1) If cmd == SIOCOUTQ or SIOCINQ, then the return value will be > > returned to userspace: > > put_user(amount, (int __user *)arg) There is always the option of defining alternate ioctl 'cmd' codes that user IOR() and IOW() and requiring that io_uring applications use the alternate forms. Then have two 'ioctl' functions with a new one for IOR() type commands and the existing one for compatibility that might just do a translation (or return a translated command to avoid extra stack use). You may still want to pass through both the kernel and user (if a user request) buffer addresses to allow for those broken requests where the buffer direction bits are wrong. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)