All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@kernel.org>
To: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Arnd Bergmann <arnd@arndb.de>
Subject: [PATCH net-next v3 15/31] slip/plip: use ndo_siocdevprivate
Date: Tue, 27 Jul 2021 15:45:01 +0200	[thread overview]
Message-ID: <20210727134517.1384504-16-arnd@kernel.org> (raw)
In-Reply-To: <20210727134517.1384504-1-arnd@kernel.org>

From: Arnd Bergmann <arnd@arndb.de>

slip and plip both use a couple of SIOCDEVPRIVATE ioctl
commands that overload the ifreq layout in a way that is
incompatible with compat mode.

Convert to use ndo_siocdevprivate to allow passing the
data this way, but return an error in compat mode anyway
because the private structure is still incompatible.

This could be fixed as well to make compat work properly.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 drivers/net/plip/plip.c | 12 +++++++++---
 drivers/net/slip/slip.c | 13 +++++++++----
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/drivers/net/plip/plip.c b/drivers/net/plip/plip.c
index e26cf91bdec2..82d609401711 100644
--- a/drivers/net/plip/plip.c
+++ b/drivers/net/plip/plip.c
@@ -84,6 +84,7 @@ static const char version[] = "NET3 PLIP version 2.4-parport gniibe@mri.co.jp\n"
     extra grounds are 18,19,20,21,22,23,24
 */
 
+#include <linux/compat.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
@@ -150,7 +151,8 @@ static int plip_hard_header_cache(const struct neighbour *neigh,
                                   struct hh_cache *hh, __be16 type);
 static int plip_open(struct net_device *dev);
 static int plip_close(struct net_device *dev);
-static int plip_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
+static int plip_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
+			       void __user *data, int cmd);
 static int plip_preempt(void *handle);
 static void plip_wakeup(void *handle);
 
@@ -265,7 +267,7 @@ static const struct net_device_ops plip_netdev_ops = {
 	.ndo_open		 = plip_open,
 	.ndo_stop		 = plip_close,
 	.ndo_start_xmit		 = plip_tx_packet,
-	.ndo_do_ioctl		 = plip_ioctl,
+	.ndo_siocdevprivate	 = plip_siocdevprivate,
 	.ndo_set_mac_address	 = eth_mac_addr,
 	.ndo_validate_addr	 = eth_validate_addr,
 };
@@ -1207,7 +1209,8 @@ plip_wakeup(void *handle)
 }
 
 static int
-plip_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+plip_siocdevprivate(struct net_device *dev, struct ifreq *rq,
+		    void __user *data, int cmd)
 {
 	struct net_local *nl = netdev_priv(dev);
 	struct plipconf *pc = (struct plipconf *) &rq->ifr_ifru;
@@ -1215,6 +1218,9 @@ plip_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 	if (cmd != SIOCDEVPLIP)
 		return -EOPNOTSUPP;
 
+	if (in_compat_syscall())
+		return -EOPNOTSUPP;
+
 	switch(pc->pcmd) {
 	case PLIP_GET_TIMEOUT:
 		pc->trigger = nl->trigger;
diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c
index dc84cb844319..5435b5689ce6 100644
--- a/drivers/net/slip/slip.c
+++ b/drivers/net/slip/slip.c
@@ -62,6 +62,7 @@
  */
 
 #define SL_CHECK_TRANSMIT
+#include <linux/compat.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 
@@ -108,7 +109,7 @@ static void slip_unesc6(struct slip *sl, unsigned char c);
 #ifdef CONFIG_SLIP_SMART
 static void sl_keepalive(struct timer_list *t);
 static void sl_outfill(struct timer_list *t);
-static int sl_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
+static int sl_siocdevprivate(struct net_device *dev, struct ifreq *rq, void __user *data, int cmd);
 #endif
 
 /********************************
@@ -647,7 +648,7 @@ static const struct net_device_ops sl_netdev_ops = {
 	.ndo_change_mtu		= sl_change_mtu,
 	.ndo_tx_timeout		= sl_tx_timeout,
 #ifdef CONFIG_SLIP_SMART
-	.ndo_do_ioctl		= sl_ioctl,
+	.ndo_siocdevprivate	= sl_siocdevprivate,
 #endif
 };
 
@@ -1179,11 +1180,12 @@ static int slip_ioctl(struct tty_struct *tty, struct file *file,
 
 /* VSV changes start here */
 #ifdef CONFIG_SLIP_SMART
-/* function do_ioctl called from net/core/dev.c
+/* function sl_siocdevprivate called from net/core/dev.c
    to allow get/set outfill/keepalive parameter
    by ifconfig                                 */
 
-static int sl_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+static int sl_siocdevprivate(struct net_device *dev, struct ifreq *rq,
+			     void __user *data, int cmd)
 {
 	struct slip *sl = netdev_priv(dev);
 	unsigned long *p = (unsigned long *)&rq->ifr_ifru;
@@ -1191,6 +1193,9 @@ static int sl_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 	if (sl == NULL)		/* Allocation failed ?? */
 		return -ENODEV;
 
+	if (in_compat_syscall())
+		return -EOPNOTSUPP;
+
 	spin_lock_bh(&sl->lock);
 
 	if (!sl->tty) {
-- 
2.29.2


  parent reply	other threads:[~2021-07-27 13:46 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-27 13:44 [PATCH net-next v3 00/31] ndo_ioctl rework Arnd Bergmann
2021-07-27 13:44 ` [Bridge] " Arnd Bergmann
2021-07-27 13:44 ` Arnd Bergmann
2021-07-27 13:44 ` Arnd Bergmann
2021-07-27 13:44 ` Arnd Bergmann
2021-07-27 13:44 ` Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 01/31] net: split out SIOCDEVPRIVATE handling from dev_ioctl Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 02/31] staging: rtlwifi: use siocdevprivate Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 03/31] staging: wlan-ng: " Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 04/31] hostap: use ndo_siocdevprivate Arnd Bergmann
2021-07-28  7:07   ` Kalle Valo
2021-07-27 13:44 ` [PATCH net-next v3 05/31] bridge: " Arnd Bergmann
2021-07-27 13:44   ` [Bridge] " Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 06/31] phonet: use siocdevprivate Arnd Bergmann
2021-07-27 16:03   ` Rémi Denis-Courmont
2021-07-27 13:44 ` [PATCH net-next v3 07/31] tulip: use ndo_siocdevprivate Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 08/31] bonding: use siocdevprivate Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 09/31] appletalk: use ndo_siocdevprivate Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 10/31] hamachi: " Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 11/31] tehuti: " Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 12/31] eql: " Arnd Bergmann
2021-07-27 13:44 ` [PATCH net-next v3 13/31] fddi: " Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 14/31] net: usb: " Arnd Bergmann
2021-07-28 13:02   ` Petko Manolov
2021-07-27 13:45 ` Arnd Bergmann [this message]
2021-07-27 13:45 ` [PATCH net-next v3 16/31] qeth: " Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 17/31] cxgb3: " Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 18/31] hamradio: " Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 19/31] airo: " Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 20/31] ip_tunnel: " Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 21/31] hippi: " Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 22/31] sb1000: " Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 23/31] ppp: " Arnd Bergmann
2021-07-27 13:45   ` Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 24/31] wan: " Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 25/31] wan: cosa: remove dead cosa_net_ioctl() function Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 26/31] dev_ioctl: pass SIOCDEVPRIVATE data separately Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 27/31] dev_ioctl: split out ndo_eth_ioctl Arnd Bergmann
2021-07-27 16:30   ` Jason Gunthorpe
2021-07-27 13:45 ` [PATCH net-next v3 28/31] net: split out ndo_siowandev ioctl Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 29/31] net: socket: return changed ifreq from SIOCDEVPRIVATE Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 30/31] net: bridge: move bridge ioctls out of .ndo_do_ioctl Arnd Bergmann
2021-07-27 13:45   ` [Bridge] " Arnd Bergmann
2021-07-27 13:45 ` [PATCH net-next v3 31/31] net: bonding: move ioctl handling to private ndo operation Arnd Bergmann
2021-07-27 19:59 ` [PATCH net-next v3 00/31] ndo_ioctl rework patchwork-bot+netdevbpf
2021-07-27 20:00   ` [Bridge] " patchwork-bot+netdevbpf
2021-07-27 20:00   ` patchwork-bot+netdevbpf
2021-07-27 20:00   ` patchwork-bot+netdevbpf
2021-07-27 20:00   ` patchwork-bot+netdevbpf
2021-07-27 20:00   ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210727134517.1384504-16-arnd@kernel.org \
    --to=arnd@kernel.org \
    --cc=arnd@arndb.de \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.