From patchwork Fri Nov 6 22:17:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 320882 Delivered-To: patch@linaro.org Received: by 2002:a92:7b12:0:0:0:0:0 with SMTP id w18csp1675896ilc; Fri, 6 Nov 2020 14:21:06 -0800 (PST) X-Google-Smtp-Source: ABdhPJwmRa58kriskuVRshLiaP/DDxSuC1ur4+E9G3BbFinHi8IVLx7ZLloP1c/zC5L1vaC0UriH X-Received: by 2002:a17:906:38d9:: with SMTP id r25mr4378738ejd.8.1604701265964; Fri, 06 Nov 2020 14:21:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604701265; cv=none; d=google.com; s=arc-20160816; b=myhJkjT2oZ/oLR/Jw6pJ6edeD/FGv0y/HfDKJ2zrga6TUbzGxJHVxB8zY8EihL1aME lriW77TndcB91L24wYVYiIj/AjmuWbNdRx4NsJllSqF65TXOMwgfmLhKI1p/sxaE4dvs eEKziKb5SxnYMUihZSxyy3zqjBhlFIhVCNWnYgLk/l+ZPjnWYofiuTYEmoaEmlMRzrof A6dZDIoEf5zDreJVw/+EeKN/OMImrkSDoKgUfmLuI6q4kocyezbbdviEsbsIjwALnK9h M3eMg8viJQqyN/qsL1q37o+2Kvjx83NkaJBrklqwf+XNk9+Uv5Ku8Wszyp3iI3GvtAYH 38xA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=NrVD70a5W5JQZbA08WJCzgiMolBk5w7ugwnrH4toQDs=; b=yULVTpX/3l3OeS2N1GfH0bb4WrTlBjSdlQfINXhZSZA/qGthdggt2bJz87hfJyAMpv FTBmKHZV7IbmCyl0iOdMGnb+r9pzxFA84sHOYSSG5APU3+/B8vcS2Yrt0z+1MGr6JBrz l8KMaj7n0L/ZWFFbY20a77bZtC3DhuUGsBKl3qfbl/tKH3ciINsMUL5oImS4rnaFbLGh 5qvUtCatsJNj/NqzZPHclEkV029SzpSZu72vhiYSIzx9EY7FgxpOHnZ2gLs2Y6c33LUz ThT+lkdboJj5ymySjX47w6cQPPA+hiDaBDcI1S/7AJyKfPxq2MYRhxubtvQ9gYFKUDQa gDgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=T7mtGk+p; spf=pass (google.com: domain of netdev-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u7si1789831ejo.361.2020.11.06.14.21.05; Fri, 06 Nov 2020 14:21:05 -0800 (PST) Received-SPF: pass (google.com: domain of netdev-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=T7mtGk+p; spf=pass (google.com: domain of netdev-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728624AbgKFWU7 (ORCPT + 8 others); Fri, 6 Nov 2020 17:20:59 -0500 Received: from mail.kernel.org ([198.145.29.99]:42084 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728520AbgKFWSl (ORCPT ); Fri, 6 Nov 2020 17:18:41 -0500 Received: from localhost.localdomain (HSI-KBW-46-223-126-90.hsi.kabel-badenwuerttemberg.de [46.223.126.90]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E4279221FA; Fri, 6 Nov 2020 22:18:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604701120; bh=awbN9CmiMFAq4njlBqIGiDvsLBx2twLKtUCtr3HCw4M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=T7mtGk+pApVs4ypVk9owXbqjNJG0M+CrnJZF7aB5pr5dyVtA//dmy9AX2kurHq0jR Zj+o16Z+C2uNU4CYV8GrjLj02Vu5p4lgb+CsJDwrR2XA6Eg1+2mD4KqFv9Qy+HlR4A W1UEItjRNVD8T9TqRFmDvRT1tihlspjBHtihjsFw= From: Arnd Bergmann To: netdev@vger.kernel.org Cc: Arnd Bergmann , linux-kernel@vger.kernel.org, linux-wireless@vger.kernel.org, bridge@lists.linux-foundation.org, linux-hams@vger.kernel.org, Jakub Kicinski , Christoph Hellwig , Alexander Viro , Johannes Berg , Andrew Lunn , Heiner Kallweit Subject: [RFC net-next 16/28] slip/plip: use ndo_siocdevprivate Date: Fri, 6 Nov 2020 23:17:31 +0100 Message-Id: <20201106221743.3271965-17-arnd@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201106221743.3271965-1-arnd@kernel.org> References: <20201106221743.3271965-1-arnd@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Arnd Bergmann 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 --- drivers/net/plip/plip.c | 11 ++++++++--- drivers/net/slip/slip.c | 12 ++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) -- 2.27.0 diff --git a/drivers/net/plip/plip.c b/drivers/net/plip/plip.c index 4406b353123e..771027461783 100644 --- a/drivers/net/plip/plip.c +++ b/drivers/net/plip/plip.c @@ -150,7 +150,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 +266,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, }; @@ -1205,7 +1206,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; @@ -1213,6 +1215,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 f81fb0b13a94..ecf89c5d7b5b 100644 --- a/drivers/net/slip/slip.c +++ b/drivers/net/slip/slip.c @@ -108,7 +108,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 +647,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 +1179,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 +1192,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) {