* [PATCH net-next v3 00/31] ndo_ioctl rework
@ 2021-07-27 13:44 Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 16/31] qeth: use ndo_siocdevprivate Arnd Bergmann
2021-07-27 20:00 ` [PATCH net-next v3 00/31] ndo_ioctl rework patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Arnd Bergmann @ 2021-07-27 13:44 UTC (permalink / raw)
To: netdev
Cc: linux-kernel, Jakub Kicinski, David S. Miller, Arnd Bergmann,
Jay Vosburgh, Veaceslav Falico, Andy Gospodarek, Raju Rangoju,
Thomas Sailer, Joerg Reuter, Jean-Paul Roubelat, Jes Sorensen,
Krzysztof Halasa, Kevin Curtis, Zhao Qiang, Martin Schiller,
Kalle Valo, Jouni Malinen, Julian Wiedmann, Karsten Graul,
Hideaki YOSHIFUJI, David Ahern, Roopa Prabhu, Nikolay Aleksandrov,
Steffen Klassert, Herbert Xu, Remi Denis-Courmont, Andrew Lunn,
Christoph Hellwig, linux-parisc, linux-hams, linux-hippi,
linux-ppp, linux-usb, linux-x25, linux-wireless, linux-s390,
bridge, linux-arm-kernel, linux-mediatek
From: Arnd Bergmann <arnd@arndb.de>
This series is a follow-up to the series for removing
compat_alloc_user_space() and copy_in_user() that has now
been merged.
I wanted to be sure I address all the ways that 'struct ifreq' is used
in device drivers through .ndo_do_ioctl, originally to prove that
my approach of changing the struct definition was correct, but then
I discarded that approach and went on anyway.
Roughly, the contents here are:
- split out all the users of SIOCDEVPRIVATE ioctls into a
separate ndo_siocdevprivate callback, to better see what
gets used where
- fix compat handling for those drivers that pass data
directly inside of 'ifreq' rather than using an indirect
ifr_data pointer
- remove unreachable code in ndo_ioctl handlers that relies
on command codes we never pass into that, in particular
for wireless drivers
- split out the ethernet specific ioctls into yet another
ndo_eth_ioctl callback, as these are by far the most
common use of ndo_do_ioctl today. I considered splitting
them further into MII and timestamp controls, but
went with the simpler change for now.
- split out bonding and wandev ioctls into separate helpers
- rework the bridge handling with a separate callback
At this point, only a few oddball things remain in ndo_do_ioctl:
appletalk and ieee802154 pass down SIOCSIFADDR/SIOCGIFADDR and
some wireless drivers have completely dead code.
I have thoroughly compile tested this on randconfig builds,
but not done any notable runtime testing, so please review.
All of it is also available as part of a larger branch at
https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground.git \
compat-alloc-user-space-12
Changes since v2:
- rebase to net-next
- fix qeth regression
- Cc driver maintainers for each patch and in cover letter
Changes since v1:
- rebase to linux-5.14-rc2
- add conversion for ndo_siowandev, bridge and bonding drivers
- leave broken wifi drivers untouched for now
Link: https://lore.kernel.org/netdev/20201106221743.3271965-14-arnd@kernel.org/
Arnd Bergmann (31):
net: split out SIOCDEVPRIVATE handling from dev_ioctl
staging: rtlwifi: use siocdevprivate
staging: wlan-ng: use siocdevprivate
hostap: use ndo_siocdevprivate
bridge: use ndo_siocdevprivate
phonet: use siocdevprivate
tulip: use ndo_siocdevprivate
bonding: use siocdevprivate
appletalk: use ndo_siocdevprivate
hamachi: use ndo_siocdevprivate
tehuti: use ndo_siocdevprivate
eql: use ndo_siocdevprivate
fddi: use ndo_siocdevprivate
net: usb: use ndo_siocdevprivate
slip/plip: use ndo_siocdevprivate
qeth: use ndo_siocdevprivate
cxgb3: use ndo_siocdevprivate
hamradio: use ndo_siocdevprivate
airo: use ndo_siocdevprivate
ip_tunnel: use ndo_siocdevprivate
hippi: use ndo_siocdevprivate
sb1000: use ndo_siocdevprivate
ppp: use ndo_siocdevprivate
wan: use ndo_siocdevprivate
wan: cosa: remove dead cosa_net_ioctl() function
dev_ioctl: pass SIOCDEVPRIVATE data separately
dev_ioctl: split out ndo_eth_ioctl
net: split out ndo_siowandev ioctl
net: socket: return changed ifreq from SIOCDEVPRIVATE
net: bridge: move bridge ioctls out of .ndo_do_ioctl
net: bonding: move ioctl handling to private ndo operation
Documentation/networking/netdevices.rst | 29 +++++
Documentation/networking/timestamping.rst | 6 +-
drivers/char/pcmcia/synclink_cs.c | 23 ++--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 8 +-
drivers/net/appletalk/ipddp.c | 16 ++-
drivers/net/bonding/bond_main.c | 74 ++++++++---
drivers/net/eql.c | 24 ++--
drivers/net/ethernet/3com/3c574_cs.c | 2 +-
drivers/net/ethernet/3com/3c59x.c | 4 +-
drivers/net/ethernet/8390/ax88796.c | 2 +-
drivers/net/ethernet/8390/axnet_cs.c | 2 +-
drivers/net/ethernet/8390/pcnet_cs.c | 2 +-
drivers/net/ethernet/actions/owl-emac.c | 6 +-
drivers/net/ethernet/adaptec/starfire.c | 2 +-
drivers/net/ethernet/agere/et131x.c | 2 +-
drivers/net/ethernet/allwinner/sun4i-emac.c | 2 +-
drivers/net/ethernet/amd/amd8111e.c | 2 +-
drivers/net/ethernet/amd/au1000_eth.c | 2 +-
drivers/net/ethernet/amd/pcnet32.c | 2 +-
drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 2 +-
.../net/ethernet/aquantia/atlantic/aq_main.c | 2 +-
drivers/net/ethernet/arc/emac_main.c | 2 +-
drivers/net/ethernet/atheros/ag71xx.c | 2 +-
drivers/net/ethernet/atheros/alx/main.c | 2 +-
.../net/ethernet/atheros/atl1c/atl1c_main.c | 2 +-
.../net/ethernet/atheros/atl1e/atl1e_main.c | 2 +-
drivers/net/ethernet/atheros/atlx/atl1.c | 2 +-
drivers/net/ethernet/atheros/atlx/atl2.c | 2 +-
drivers/net/ethernet/broadcom/b44.c | 2 +-
drivers/net/ethernet/broadcom/bcm63xx_enet.c | 4 +-
drivers/net/ethernet/broadcom/bgmac.c | 2 +-
drivers/net/ethernet/broadcom/bnx2.c | 2 +-
.../net/ethernet/broadcom/bnx2x/bnx2x_main.c | 2 +-
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +-
.../net/ethernet/broadcom/genet/bcmgenet.c | 2 +-
drivers/net/ethernet/broadcom/sb1250-mac.c | 2 +-
drivers/net/ethernet/broadcom/tg3.c | 2 +-
drivers/net/ethernet/cadence/macb_main.c | 4 +-
.../net/ethernet/cavium/liquidio/lio_main.c | 2 +-
.../ethernet/cavium/liquidio/lio_vf_main.c | 2 +-
.../net/ethernet/cavium/octeon/octeon_mgmt.c | 2 +-
.../net/ethernet/cavium/thunder/nicvf_main.c | 2 +-
drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 2 +-
.../net/ethernet/chelsio/cxgb3/cxgb3_main.c | 14 +-
.../net/ethernet/chelsio/cxgb4/cxgb4_main.c | 2 +-
.../ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 2 +-
drivers/net/ethernet/cirrus/ep93xx_eth.c | 2 +-
drivers/net/ethernet/davicom/dm9000.c | 2 +-
drivers/net/ethernet/dec/tulip/de4x5.c | 11 +-
drivers/net/ethernet/dec/tulip/tulip_core.c | 2 +-
drivers/net/ethernet/dec/tulip/winbond-840.c | 2 +-
drivers/net/ethernet/dlink/dl2k.c | 2 +-
drivers/net/ethernet/dlink/sundance.c | 2 +-
drivers/net/ethernet/dnet.c | 2 +-
drivers/net/ethernet/ethoc.c | 2 +-
drivers/net/ethernet/faraday/ftgmac100.c | 2 +-
drivers/net/ethernet/faraday/ftmac100.c | 2 +-
drivers/net/ethernet/fealnx.c | 2 +-
.../net/ethernet/freescale/dpaa/dpaa_eth.c | 2 +-
.../net/ethernet/freescale/dpaa2/dpaa2-eth.c | 2 +-
.../net/ethernet/freescale/enetc/enetc_pf.c | 2 +-
.../net/ethernet/freescale/enetc/enetc_vf.c | 2 +-
drivers/net/ethernet/freescale/fec_main.c | 2 +-
drivers/net/ethernet/freescale/fec_mpc52xx.c | 2 +-
.../ethernet/freescale/fs_enet/fs_enet-main.c | 2 +-
drivers/net/ethernet/freescale/gianfar.c | 2 +-
drivers/net/ethernet/freescale/ucc_geth.c | 2 +-
drivers/net/ethernet/hisilicon/hisi_femac.c | 2 +-
drivers/net/ethernet/hisilicon/hns/hns_enet.c | 2 +-
.../net/ethernet/hisilicon/hns3/hns3_enet.c | 2 +-
drivers/net/ethernet/ibm/emac/core.c | 4 +-
drivers/net/ethernet/ibm/ibmveth.c | 2 +-
drivers/net/ethernet/intel/e100.c | 2 +-
drivers/net/ethernet/intel/e1000/e1000_main.c | 2 +-
drivers/net/ethernet/intel/e1000e/netdev.c | 2 +-
drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
drivers/net/ethernet/intel/ice/ice_main.c | 6 +-
drivers/net/ethernet/intel/igb/igb_main.c | 2 +-
drivers/net/ethernet/intel/igbvf/netdev.c | 2 +-
drivers/net/ethernet/intel/igc/igc_main.c | 2 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 +-
drivers/net/ethernet/jme.c | 2 +-
drivers/net/ethernet/korina.c | 2 +-
drivers/net/ethernet/lantiq_etop.c | 2 +-
drivers/net/ethernet/marvell/mv643xx_eth.c | 2 +-
drivers/net/ethernet/marvell/mvneta.c | 2 +-
.../net/ethernet/marvell/mvpp2/mvpp2_main.c | 2 +-
.../ethernet/marvell/octeontx2/nic/otx2_pf.c | 2 +-
drivers/net/ethernet/marvell/pxa168_eth.c | 2 +-
drivers/net/ethernet/marvell/skge.c | 2 +-
drivers/net/ethernet/marvell/sky2.c | 4 +-
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 +-
drivers/net/ethernet/mediatek/mtk_star_emac.c | 2 +-
.../net/ethernet/mellanox/mlx4/en_netdev.c | 2 +-
.../net/ethernet/mellanox/mlx5/core/en_main.c | 2 +-
.../ethernet/mellanox/mlx5/core/ipoib/ipoib.c | 2 +-
.../mellanox/mlx5/core/ipoib/ipoib_vlan.c | 2 +-
.../mellanox/mlxbf_gige/mlxbf_gige_main.c | 4 +-
.../net/ethernet/mellanox/mlxsw/spectrum.c | 2 +-
drivers/net/ethernet/micrel/ks8851_common.c | 2 +-
drivers/net/ethernet/micrel/ksz884x.c | 2 +-
drivers/net/ethernet/microchip/lan743x_main.c | 2 +-
drivers/net/ethernet/mscc/ocelot_net.c | 2 +-
drivers/net/ethernet/natsemi/natsemi.c | 2 +-
drivers/net/ethernet/neterion/s2io.c | 2 +-
.../net/ethernet/neterion/vxge/vxge-main.c | 2 +-
drivers/net/ethernet/nxp/lpc_eth.c | 2 +-
.../ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 2 +-
drivers/net/ethernet/packetengines/hamachi.c | 63 +++++----
.../net/ethernet/packetengines/yellowfin.c | 2 +-
.../net/ethernet/pensando/ionic/ionic_lif.c | 4 +-
drivers/net/ethernet/qlogic/qede/qede_main.c | 2 +-
drivers/net/ethernet/qualcomm/emac/emac.c | 2 +-
drivers/net/ethernet/rdc/r6040.c | 2 +-
drivers/net/ethernet/realtek/8139cp.c | 2 +-
drivers/net/ethernet/realtek/8139too.c | 2 +-
drivers/net/ethernet/realtek/r8169_main.c | 2 +-
drivers/net/ethernet/renesas/ravb_main.c | 2 +-
drivers/net/ethernet/renesas/sh_eth.c | 4 +-
.../net/ethernet/samsung/sxgbe/sxgbe_main.c | 2 +-
drivers/net/ethernet/sfc/efx.c | 2 +-
drivers/net/ethernet/sfc/falcon/efx.c | 2 +-
drivers/net/ethernet/sgi/ioc3-eth.c | 2 +-
drivers/net/ethernet/sgi/meth.c | 2 +-
drivers/net/ethernet/sis/sis190.c | 2 +-
drivers/net/ethernet/sis/sis900.c | 2 +-
drivers/net/ethernet/smsc/epic100.c | 2 +-
drivers/net/ethernet/smsc/smc91c92_cs.c | 2 +-
drivers/net/ethernet/smsc/smsc911x.c | 2 +-
drivers/net/ethernet/smsc/smsc9420.c | 2 +-
drivers/net/ethernet/socionext/netsec.c | 2 +-
drivers/net/ethernet/socionext/sni_ave.c | 2 +-
.../net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
drivers/net/ethernet/sun/cassini.c | 2 +-
drivers/net/ethernet/sun/niu.c | 2 +-
drivers/net/ethernet/sun/sungem.c | 2 +-
.../net/ethernet/synopsys/dwc-xlgmac-net.c | 2 +-
drivers/net/ethernet/tehuti/tehuti.c | 18 +--
drivers/net/ethernet/ti/am65-cpsw-nuss.c | 2 +-
drivers/net/ethernet/ti/cpmac.c | 2 +-
drivers/net/ethernet/ti/cpsw.c | 2 +-
drivers/net/ethernet/ti/cpsw_new.c | 2 +-
drivers/net/ethernet/ti/davinci_emac.c | 2 +-
drivers/net/ethernet/ti/netcp_core.c | 2 +-
drivers/net/ethernet/ti/tlan.c | 2 +-
drivers/net/ethernet/toshiba/spider_net.c | 2 +-
drivers/net/ethernet/toshiba/tc35815.c | 2 +-
drivers/net/ethernet/tundra/tsi108_eth.c | 2 +-
drivers/net/ethernet/via/via-rhine.c | 2 +-
drivers/net/ethernet/via/via-velocity.c | 2 +-
drivers/net/ethernet/xilinx/ll_temac_main.c | 2 +-
.../net/ethernet/xilinx/xilinx_axienet_main.c | 2 +-
drivers/net/ethernet/xilinx/xilinx_emaclite.c | 2 +-
drivers/net/ethernet/xircom/xirc2ps_cs.c | 2 +-
drivers/net/ethernet/xscale/ixp4xx_eth.c | 2 +-
drivers/net/fddi/skfp/skfddi.c | 19 ++-
drivers/net/hamradio/baycom_epp.c | 9 +-
drivers/net/hamradio/baycom_par.c | 12 +-
drivers/net/hamradio/baycom_ser_fdx.c | 12 +-
drivers/net/hamradio/baycom_ser_hdx.c | 12 +-
drivers/net/hamradio/bpqether.c | 9 +-
drivers/net/hamradio/dmascc.c | 18 ++-
drivers/net/hamradio/hdlcdrv.c | 20 +--
drivers/net/hamradio/scc.c | 13 +-
drivers/net/hamradio/yam.c | 19 ++-
drivers/net/hippi/rrunner.c | 11 +-
drivers/net/hippi/rrunner.h | 3 +-
drivers/net/macvlan.c | 8 +-
drivers/net/phy/phy.c | 4 +-
drivers/net/plip/plip.c | 12 +-
drivers/net/ppp/ppp_generic.c | 6 +-
drivers/net/sb1000.c | 20 +--
drivers/net/slip/slip.c | 13 +-
drivers/net/usb/asix_devices.c | 6 +-
drivers/net/usb/ax88172a.c | 2 +-
drivers/net/usb/ax88179_178a.c | 2 +-
drivers/net/usb/cdc-phonet.c | 5 +-
drivers/net/usb/dm9601.c | 2 +-
drivers/net/usb/lan78xx.c | 2 +-
drivers/net/usb/mcs7830.c | 2 +-
drivers/net/usb/pegasus.c | 5 +-
drivers/net/usb/r8152.c | 2 +-
drivers/net/usb/rtl8150.c | 5 +-
drivers/net/usb/smsc75xx.c | 2 +-
drivers/net/usb/smsc95xx.c | 2 +-
drivers/net/usb/sr9700.c | 2 +-
drivers/net/usb/sr9800.c | 2 +-
drivers/net/wan/c101.c | 33 +++--
drivers/net/wan/cosa.c | 15 +--
drivers/net/wan/farsync.c | 123 ++++++++++--------
drivers/net/wan/fsl_ucc_hdlc.c | 19 ++-
drivers/net/wan/hdlc.c | 9 +-
drivers/net/wan/hdlc_cisco.c | 14 +-
drivers/net/wan/hdlc_fr.c | 40 +++---
drivers/net/wan/hdlc_ppp.c | 8 +-
drivers/net/wan/hdlc_raw.c | 14 +-
drivers/net/wan/hdlc_raw_eth.c | 14 +-
drivers/net/wan/hdlc_x25.c | 16 +--
drivers/net/wan/hostess_sv11.c | 7 +-
drivers/net/wan/ixp4xx_hss.c | 19 ++-
drivers/net/wan/lmc/lmc.h | 2 +-
drivers/net/wan/lmc/lmc_main.c | 33 +++--
drivers/net/wan/lmc/lmc_proto.c | 7 -
drivers/net/wan/lmc/lmc_proto.h | 1 -
drivers/net/wan/n2.c | 32 +++--
drivers/net/wan/pc300too.c | 44 ++++---
drivers/net/wan/pci200syn.c | 32 +++--
drivers/net/wan/sbni.c | 15 ++-
drivers/net/wan/sealevel.c | 10 +-
drivers/net/wan/wanxl.c | 21 ++-
drivers/net/wireless/cisco/airo.c | 15 ++-
drivers/net/wireless/intersil/hostap/hostap.h | 3 +-
.../wireless/intersil/hostap/hostap_ioctl.c | 30 ++++-
.../wireless/intersil/hostap/hostap_main.c | 3 +
drivers/s390/net/qeth_core.h | 5 +-
drivers/s390/net/qeth_core_main.c | 35 +++--
drivers/s390/net/qeth_l2_main.c | 3 +-
drivers/s390/net/qeth_l3_main.c | 12 +-
drivers/staging/octeon/ethernet.c | 12 +-
.../staging/rtl8188eu/include/osdep_intf.h | 2 +
.../staging/rtl8188eu/include/rtw_android.h | 3 +-
.../staging/rtl8188eu/os_dep/ioctl_linux.c | 3 -
drivers/staging/rtl8188eu/os_dep/os_intfs.c | 1 +
.../staging/rtl8188eu/os_dep/rtw_android.c | 14 +-
.../staging/rtl8723bs/include/osdep_intf.h | 2 +
.../staging/rtl8723bs/os_dep/ioctl_linux.c | 18 ++-
drivers/staging/rtl8723bs/os_dep/os_intfs.c | 1 +
drivers/staging/wlan-ng/p80211netdev.c | 76 ++---------
drivers/tty/synclink_gt.c | 19 ++-
include/linux/hdlc.h | 4 +-
include/linux/hdlcdrv.h | 2 +-
include/linux/if_bridge.h | 7 +-
include/linux/netdevice.h | 28 +++-
include/net/dsa.h | 14 +-
include/net/ip_tunnels.h | 3 +-
net/8021q/vlan_dev.c | 6 +-
net/bridge/br.c | 2 +-
net/bridge/br_device.c | 2 +-
net/bridge/br_ioctl.c | 52 ++++----
net/bridge/br_private.h | 7 +-
net/core/dev_ioctl.c | 104 +++++++++++----
net/dsa/master.c | 6 +-
net/dsa/slave.c | 2 +-
net/ethtool/ioctl.c | 3 +-
net/ipv4/ip_gre.c | 2 +-
net/ipv4/ip_tunnel.c | 9 +-
net/ipv4/ip_vti.c | 2 +-
net/ipv4/ipip.c | 2 +-
net/ipv6/ip6_gre.c | 17 +--
net/ipv6/ip6_tunnel.c | 21 +--
net/ipv6/ip6_vti.c | 21 +--
net/ipv6/sit.c | 35 ++---
net/phonet/pn_dev.c | 6 +-
net/socket.c | 90 ++++++-------
254 files changed, 1134 insertions(+), 957 deletions(-)
--
2.29.2
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Jay Vosburgh <j.vosburgh@gmail.com>
Cc: Veaceslav Falico <vfalico@gmail.com>
Cc: Andy Gospodarek <andy@greyhouse.net>
Cc: Raju Rangoju <rajur@chelsio.com>
Cc: Thomas Sailer <t.sailer@alumni.ethz.ch>
Cc: Joerg Reuter <jreuter@yaina.de>
Cc: Jean-Paul Roubelat <jpr@f6fbb.org>
Cc: Jes Sorensen <jes@trained-monkey.org>
Cc: Krzysztof Halasa <khc@pm.waw.pl>
Cc: "Jan \"Yenya\" Kasprzak" <kas@fi.muni.cz>
Cc: Kevin Curtis <kevin.curtis@farsite.co.uk>
Cc: Zhao Qiang <qiang.zhao@nxp.com>
Cc: Martin Schiller <ms@dev.tdt.de>
Cc: Kalle Valo <kvalo@codeaurora.org>
Cc: Jouni Malinen <j@w1.fi>
Cc: Julian Wiedmann <jwi@linux.ibm.com>
Cc: Karsten Graul <kgraul@linux.ibm.com>
Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Cc: David Ahern <dsahern@kernel.org>
Cc: Roopa Prabhu <roopa@nvidia.com>
Cc: Nikolay Aleksandrov <nikolay@nvidia.com>
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Remi Denis-Courmont <courmisch@gmail.com>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Christoph Hellwig <hch@lst.de>
Cc: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-parisc@vger.kernel.org
Cc: linux-hams@vger.kernel.org
Cc: linux-hippi@sunsite.dk
Cc: linux-ppp@vger.kernel.org
Cc: linux-usb@vger.kernel.org
Cc: linux-x25@vger.kernel.org
Cc: linux-wireless@vger.kernel.org
Cc: linux-s390@vger.kernel.org
Cc: bridge@lists.linux-foundation.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-mediatek@lists.infradead.org
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH net-next v3 16/31] qeth: use ndo_siocdevprivate
2021-07-27 13:44 [PATCH net-next v3 00/31] ndo_ioctl rework Arnd Bergmann
@ 2021-07-27 13:45 ` Arnd Bergmann
2021-07-27 20:00 ` [PATCH net-next v3 00/31] ndo_ioctl rework patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Arnd Bergmann @ 2021-07-27 13:45 UTC (permalink / raw)
To: netdev
Cc: linux-kernel, Jakub Kicinski, David S. Miller, Arnd Bergmann,
Julian Wiedmann, Karsten Graul, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, linux-s390
From: Arnd Bergmann <arnd@arndb.de>
qeth has both standard MII ioctls and custom SIOCDEVPRIVATE ones,
all of which work correctly with compat user space.
Move the private ones over to the new ndo_siocdevprivate callback.
Cc: Julian Wiedmann <jwi@linux.ibm.com>
Cc: Karsten Graul <kgraul@linux.ibm.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: linux-s390@vger.kernel.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
drivers/s390/net/qeth_core.h | 5 ++++-
drivers/s390/net/qeth_core_main.c | 35 ++++++++++++++++++++++---------
drivers/s390/net/qeth_l2_main.c | 1 +
drivers/s390/net/qeth_l3_main.c | 8 ++++---
4 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
index c17031519900..535a60b3946d 100644
--- a/drivers/s390/net/qeth_core.h
+++ b/drivers/s390/net/qeth_core.h
@@ -771,7 +771,8 @@ struct qeth_discipline {
void (*remove) (struct ccwgroup_device *);
int (*set_online)(struct qeth_card *card, bool carrier_ok);
void (*set_offline)(struct qeth_card *card);
- int (*do_ioctl)(struct net_device *dev, struct ifreq *rq, int cmd);
+ int (*do_ioctl)(struct net_device *dev, struct ifreq *rq,
+ void __user *data, int cmd);
int (*control_event_handler)(struct qeth_card *card,
struct qeth_ipa_cmd *cmd);
};
@@ -1085,6 +1086,8 @@ int qeth_setadpparms_set_access_ctrl(struct qeth_card *card,
enum qeth_ipa_isolation_modes mode);
int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
+int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq,
+ void __user *data, int cmd);
void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...);
int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index 7f486212c6aa..5b973f377504 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -6590,21 +6590,42 @@ static struct ccwgroup_driver qeth_core_ccwgroup_driver = {
.shutdown = qeth_core_shutdown,
};
-int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq, void __user *data, int cmd)
{
struct qeth_card *card = dev->ml_priv;
- struct mii_ioctl_data *mii_data;
int rc = 0;
switch (cmd) {
case SIOC_QETH_ADP_SET_SNMP_CONTROL:
- rc = qeth_snmp_command(card, rq->ifr_ifru.ifru_data);
+ rc = qeth_snmp_command(card, data);
break;
case SIOC_QETH_GET_CARD_TYPE:
if ((IS_OSD(card) || IS_OSM(card) || IS_OSX(card)) &&
!IS_VM_NIC(card))
return 1;
return 0;
+ case SIOC_QETH_QUERY_OAT:
+ rc = qeth_query_oat_command(card, data);
+ break;
+ default:
+ if (card->discipline->do_ioctl)
+ rc = card->discipline->do_ioctl(dev, rq, data, cmd);
+ else
+ rc = -EOPNOTSUPP;
+ }
+ if (rc)
+ QETH_CARD_TEXT_(card, 2, "ioce%x", rc);
+ return rc;
+}
+EXPORT_SYMBOL_GPL(qeth_siocdevprivate);
+
+int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+{
+ struct qeth_card *card = dev->ml_priv;
+ struct mii_ioctl_data *mii_data;
+ int rc = 0;
+
+ switch (cmd) {
case SIOCGMIIPHY:
mii_data = if_mii(rq);
mii_data->phy_id = 0;
@@ -6617,14 +6638,8 @@ int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
mii_data->val_out = qeth_mdio_read(dev,
mii_data->phy_id, mii_data->reg_num);
break;
- case SIOC_QETH_QUERY_OAT:
- rc = qeth_query_oat_command(card, rq->ifr_ifru.ifru_data);
- break;
default:
- if (card->discipline->do_ioctl)
- rc = card->discipline->do_ioctl(dev, rq, cmd);
- else
- rc = -EOPNOTSUPP;
+ return -EOPNOTSUPP;
}
if (rc)
QETH_CARD_TEXT_(card, 2, "ioce%x", rc);
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
index 7fe0f1aea3cb..d50d3cba238e 100644
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -837,6 +837,7 @@ static const struct net_device_ops qeth_l2_netdev_ops = {
.ndo_validate_addr = qeth_l2_validate_addr,
.ndo_set_rx_mode = qeth_l2_set_rx_mode,
.ndo_do_ioctl = qeth_do_ioctl,
+ .ndo_siocdevprivate = qeth_siocdevprivate,
.ndo_set_mac_address = qeth_l2_set_mac_address,
.ndo_vlan_rx_add_vid = qeth_l2_vlan_rx_add_vid,
.ndo_vlan_rx_kill_vid = qeth_l2_vlan_rx_kill_vid,
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
index 7cc59f4f046c..d7a895372f19 100644
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -1512,7 +1512,7 @@ static int qeth_l3_arp_flush_cache(struct qeth_card *card)
return rc;
}
-static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, void __user *data, int cmd)
{
struct qeth_card *card = dev->ml_priv;
struct qeth_arp_cache_entry arp_entry;
@@ -1532,13 +1532,13 @@ static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
rc = -EPERM;
break;
}
- rc = qeth_l3_arp_query(card, rq->ifr_ifru.ifru_data);
+ rc = qeth_l3_arp_query(card, data);
break;
case SIOC_QETH_ARP_ADD_ENTRY:
case SIOC_QETH_ARP_REMOVE_ENTRY:
if (!capable(CAP_NET_ADMIN))
return -EPERM;
- if (copy_from_user(&arp_entry, rq->ifr_data, sizeof(arp_entry)))
+ if (copy_from_user(&arp_entry, data, sizeof(arp_entry)))
return -EFAULT;
arp_cmd = (cmd == SIOC_QETH_ARP_ADD_ENTRY) ?
@@ -1842,6 +1842,7 @@ static const struct net_device_ops qeth_l3_netdev_ops = {
.ndo_validate_addr = eth_validate_addr,
.ndo_set_rx_mode = qeth_l3_set_rx_mode,
.ndo_do_ioctl = qeth_do_ioctl,
+ .ndo_siocdevprivate = qeth_siocdevprivate,
.ndo_fix_features = qeth_fix_features,
.ndo_set_features = qeth_set_features,
.ndo_tx_timeout = qeth_tx_timeout,
@@ -1857,6 +1858,7 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = {
.ndo_validate_addr = eth_validate_addr,
.ndo_set_rx_mode = qeth_l3_set_rx_mode,
.ndo_do_ioctl = qeth_do_ioctl,
+ .ndo_siocdevprivate = qeth_siocdevprivate,
.ndo_fix_features = qeth_fix_features,
.ndo_set_features = qeth_set_features,
.ndo_tx_timeout = qeth_tx_timeout,
--
2.29.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net-next v3 00/31] ndo_ioctl rework
2021-07-27 13:44 [PATCH net-next v3 00/31] ndo_ioctl rework Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 16/31] qeth: use ndo_siocdevprivate Arnd Bergmann
@ 2021-07-27 20:00 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-07-27 20:00 UTC (permalink / raw)
To: Arnd Bergmann
Cc: netdev, linux-kernel, kuba, davem, arnd, j.vosburgh, vfalico,
andy, rajur, t.sailer, jreuter, jpr, jes, khc, kevin.curtis,
qiang.zhao, ms, kvalo, j, jwi, kgraul, yoshfuji, dsahern, roopa,
nikolay, steffen.klassert, herbert, courmisch, andrew, hch,
linux-parisc, linux-hams, linux-hippi, linux-ppp, linux-usb,
linux-x25, linux-wireless, linux-s390, bridge, linux-arm-kernel,
linux-mediatek
Hello:
This series was applied to netdev/net-next.git (refs/heads/master):
On Tue, 27 Jul 2021 15:44:46 +0200 you wrote:
> From: Arnd Bergmann <arnd@arndb.de>
>
> This series is a follow-up to the series for removing
> compat_alloc_user_space() and copy_in_user() that has now
> been merged.
>
> I wanted to be sure I address all the ways that 'struct ifreq' is used
> in device drivers through .ndo_do_ioctl, originally to prove that
> my approach of changing the struct definition was correct, but then
> I discarded that approach and went on anyway.
>
> [...]
Here is the summary with links:
- [net-next,v3,01/31] net: split out SIOCDEVPRIVATE handling from dev_ioctl
https://git.kernel.org/netdev/net-next/c/b9067f5dc4a0
- [net-next,v3,02/31] staging: rtlwifi: use siocdevprivate
https://git.kernel.org/netdev/net-next/c/89939e890605
- [net-next,v3,03/31] staging: wlan-ng: use siocdevprivate
https://git.kernel.org/netdev/net-next/c/3343c49a959d
- [net-next,v3,04/31] hostap: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/3f3fa5340745
- [net-next,v3,05/31] bridge: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/561d8352818f
- [net-next,v3,06/31] phonet: use siocdevprivate
https://git.kernel.org/netdev/net-next/c/4747c1a8bc50
- [net-next,v3,07/31] tulip: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/029a4fef6b22
- [net-next,v3,08/31] bonding: use siocdevprivate
https://git.kernel.org/netdev/net-next/c/232ec98ec35d
- [net-next,v3,09/31] appletalk: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/dbecb011eb78
- [net-next,v3,10/31] hamachi: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/99b78a37a371
- [net-next,v3,11/31] tehuti: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/32d05468c462
- [net-next,v3,12/31] eql: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/d92f7b59d32b
- [net-next,v3,13/31] fddi: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/043393d8b478
- [net-next,v3,14/31] net: usb: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/ef1b5b0c30bc
- [net-next,v3,15/31] slip/plip: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/76b5878cffab
- [net-next,v3,16/31] qeth: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/18787eeebd71
- [net-next,v3,17/31] cxgb3: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/ebb4a911e09a
- [net-next,v3,18/31] hamradio: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/25ec92fbdd23
- [net-next,v3,19/31] airo: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/ae6af0120dda
- [net-next,v3,20/31] ip_tunnel: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/3e7a1c7c561e
- [net-next,v3,21/31] hippi: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/81a68110a22a
- [net-next,v3,22/31] sb1000: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/cc0aa831a0d9
- [net-next,v3,23/31] ppp: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/34f7cac07c4e
- [net-next,v3,24/31] wan: use ndo_siocdevprivate
https://git.kernel.org/netdev/net-next/c/73d74f61a559
- [net-next,v3,25/31] wan: cosa: remove dead cosa_net_ioctl() function
https://git.kernel.org/netdev/net-next/c/8fb75b79cd98
- [net-next,v3,26/31] dev_ioctl: pass SIOCDEVPRIVATE data separately
https://git.kernel.org/netdev/net-next/c/a554bf96b49d
- [net-next,v3,27/31] dev_ioctl: split out ndo_eth_ioctl
https://git.kernel.org/netdev/net-next/c/a76053707dbf
- [net-next,v3,28/31] net: split out ndo_siowandev ioctl
https://git.kernel.org/netdev/net-next/c/ad7eab2ab014
- [net-next,v3,29/31] net: socket: return changed ifreq from SIOCDEVPRIVATE
https://git.kernel.org/netdev/net-next/c/88fc023f7de2
- [net-next,v3,30/31] net: bridge: move bridge ioctls out of .ndo_do_ioctl
https://git.kernel.org/netdev/net-next/c/ad2f99aedf8f
- [net-next,v3,31/31] net: bonding: move ioctl handling to private ndo operation
https://git.kernel.org/netdev/net-next/c/3d9d00bd1885
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-07-27 20:00 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-07-27 13:44 [PATCH net-next v3 00/31] ndo_ioctl rework Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 16/31] qeth: use ndo_siocdevprivate Arnd Bergmann
2021-07-27 20:00 ` [PATCH net-next v3 00/31] ndo_ioctl rework patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox