On Wed, 1 Sep 2021 11:01:32 -0700 Peter Collingbourne wrote:
To stop the copy_from_user() faulting when the user buffer isn't long enough. In particular for iasatty() on arm with tagged pointers.
Let me rephrase. is_socket_ioctl_cmd() is always true here. There were only two callers, both check cmd is of specific, "sockety" type.
I see, it looks like we don't need the check on the compat path then.
I can send a followup to clean this up but given that I got a comment from another reviewer saying that we should try to make the native and compat paths as similar as possible, maybe it isn't too bad to leave things as is?
I have a weak preference to get rid of it, the code is a little complex and extra dead code makes it harder to follow, but up to you.
IMO the "right place" for the check is:
static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg) [...] default: /* --> here <-- */ err = sock_do_ioctl(net, sock, cmd, arg); break;
Since that's the point where we take all the remaining cmd values and call a function which assumes struct ifreq.
Compat code does not have a default statement.
But as I said no big deal, feel free to ignore.