dev_ioctl: pass SIOCDEVPRIVATE data separately
authorArnd Bergmann <arnd@arndb.de>
Tue, 27 Jul 2021 13:45:12 +0000 (15:45 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Jul 2021 19:11:44 +0000 (20:11 +0100)
commita554bf96b49db4c208e305ae92546422e9489380
tree6fce988f6f02fc3df0e3abb197f610ca2a1bfbec
parent8fb75b79cd98944c118861ff3194caf731f5ec5a
dev_ioctl: pass SIOCDEVPRIVATE data separately

The compat handlers for SIOCDEVPRIVATE are incorrect for any driver that
passes data as part of struct ifreq rather than as an ifr_data pointer, or
that passes data back this way, since the compat_ifr_data_ioctl() helper
overwrites the ifr_data pointer and does not copy anything back out.

Since all drivers using devprivate commands are now converted to the
new .ndo_siocdevprivate callback, fix this by adding the missing piece
and passing the pointer separately the whole way.

This further unifies the native and compat logic for socket ioctls,
as the new code now passes the correct pointer as well as the correct
data for both native and compat ioctls.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdevice.h
net/core/dev_ioctl.c
net/ethtool/ioctl.c
net/socket.c