From patchwork Wed Oct 9 19:10:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 175656 Delivered-To: patch@linaro.org Received: by 2002:a92:7e96:0:0:0:0:0 with SMTP id q22csp1172926ill; Wed, 9 Oct 2019 12:13:11 -0700 (PDT) X-Google-Smtp-Source: APXvYqxmoQWb9kCP09zfziD/vOJQIYrt/h2L/gQPjULXNh2oJJzn6KyOWEUa024/a3VR4+tMKg/w X-Received: by 2002:a05:6402:713:: with SMTP id w19mr4460874edx.113.1570648391218; Wed, 09 Oct 2019 12:13:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570648391; cv=none; d=google.com; s=arc-20160816; b=aNCVC7L+zUsrClrU9Zuj0MJwTK2x6zktbNKiJMBd6+jaBDn4rjTGIkDWgpB0WFr4k3 W8uJbCvM1UcbEo0TWuXKrOjVsUysWq7uYL13W2lDvzu4WHEQ3wt2vJvRV2JwCVwHlouk 2Qh+Cgj+2kGWF6OSugpr8Key3xucOcgPFmyJEIM+c0dEJ1LU5ZT/YmBQGgbdxE4pSA9u imv1Vetm72xnWILVLnrrZL7YCejpB2BQyYnyDTjjTXw9KaNF77Tx8i4fDpcNVReC/Fus MV9hL7OYRgsYKwF7oAYZ/sr4KaMoD+p3adlQQBK+Wsu2Z5dgVs+aUayWf/WWD2hnK+JB TizQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=FyP1owk/gp38i0xsKvBkK2BFl3W71CMBEArTY07Gnts=; b=CElCfryoqZxM5uYiyioSf+qdeQSzrfN4stTNFCvi4Uix2OS0C9HudoomQF2IDDwnzv 0W1p3ghR1awadMbUemtZXGVpaQxivlK8FDEafbUE4QpDA00XjzSn7zPtt63e2wQlLUSI BYXqVBNI/htO9OCvNDpfFHTM6iMDIY83YSJeroQUZS79rLqt3zN6ap9G8pnjZxK8PCBb I9wQ4oTYma+wp35wk6pZ0/Kk15UxrmPw33EyTRhBFTFP60swzK6EN0VAPqW68eG1aUEJ bG4lgGIK+BwgD06dMY5CSVmLMkzu7sp74IDEhjyXeRklze3XakBOYLmK4Z5c7W58+1hA DyQw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g14si1776479edm.407.2019.10.09.12.13.10; Wed, 09 Oct 2019 12:13:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732398AbfJITNK (ORCPT + 8 others); Wed, 9 Oct 2019 15:13:10 -0400 Received: from mout.kundenserver.de ([212.227.126.130]:48377 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731996AbfJITL1 (ORCPT ); Wed, 9 Oct 2019 15:11:27 -0400 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.129]) with ESMTPA (Nemesis) id 1MsZ7T-1hyQGR3c9T-00typw; Wed, 09 Oct 2019 21:11:20 +0200 From: Arnd Bergmann To: Al Viro Cc: linux-kernel@vger.kernel.org, y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, netdev@vger.kernel.org, linux-ppp@vger.kernel.org, Paul Mackerras , "David S. Miller" , Arnd Bergmann Subject: [PATCH v6 37/43] compat_ioctl: unify copy-in of ppp filters Date: Wed, 9 Oct 2019 21:10:38 +0200 Message-Id: <20191009191044.308087-38-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191009190853.245077-1-arnd@arndb.de> References: <20191009190853.245077-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:YMQu2SzBTiUnl+nOpaa6B39uqrCnG7+R1LtL31k9mGcKtqSfrg6 FR1Fj/jteJ2YpBnZBouGG9EsztZJw9RGZEG3Do5JL+wTZPVxFOatKmmkxlHU/MQwf+O6SK7 0skHgu2EesoaX09tmD//3Y5GbdHkd1UnLw2iVQru7pPk22Rt6XcBvcNJUkZXmYEjpG/9Jai SQTRHLA8Dc/e6JbkA6mRg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:hkE1iLX/yck=:86kzB3AfhM/d2NpCuZ3D2K vjFGsdPrGn8xVqWB8+8XgYVaNsQvgDJ/ttjNgcL0L1FVFsmrUDtBs+CTKjzv5/5FRceh3COlt Oa/sa/tFgwWLDQnoJkacgpBcndlLUbxdy2KWQzrhtMiR9CSbq75M59np6gcspy0ZL7nC2NftZ uIPZyU+Ugmxh7Em+8/0LhXCmKOOhCA94h+q7YC7DX6Lr48qsEvFlh2ppUsMdyqlJ6mOfuiN/A I92e9VtIgnZ0r4Zz1eE04VQKOCnbtS7N3bwQ5lXnygCeMUWdfCYoa1pavYf3DFCVbuzzwO1LZ hK3AaCKwOW9PJBlP5AzS6HnaCQYFTPgtRpeECh0pIHAjQhyJOnacbfO5H2NloZ5pw7gFT6N0p A1vqoEopUzCTOO9XjtskT0uNcQubRwr82H2WfoG81hfSb8e+tGJzbCcR1pvLk/DHHqhd0H7+p NYGdjT9PQmfn0bLUqiAkCjULcy6YBJ7JQ3N1qoyPoZUqpZ6qKqre+fhFWkGMThww983xx6/C/ YkIuoOCb23sU1ifsDjPKvAob4LktjIu9ZwmNnfp75WQTfv6XWE35fxf5Vns8F18NXtK07G9dp ahlkCzxAlVOclhGPAHHV+Ua8qx+ujIW5KOM5XmMZv6Xw4F1gB/M39Kh0e4aSw924xue3plPig DkHeLTu1iobYu8XuKI5nNIcd/AAAFLl7jPk+GXZSMQlMZHaE/bv4u9OH4bP3FMsv2mkPXNjic Bp6FkNPfrD2JQ0MC+vqzWi/cXKYegcq5ey3ecmj49oxT6hrcfvH79uUpKbOOmOaFBDcZTrxQ7 X4cTwcgEuk8fW2ry4mtWCoxYtRqlvkZkiNHDVl7Mq0SrSQHgLqlIZ4yDDiESLhWGddfJqH13t rjuFVu9gVfDbqkO1Txgw== Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Al Viro Now that isdn4linux is gone, the is only one implementation of PPPIOCSPASS and PPPIOCSACTIVE in ppp_generic.c, so this is where the compat_ioctl support should be implemented. The two commands are implemented in very similar ways, so introduce new helpers to allow sharing between the two and between native and compat mode. Signed-off-by: Al Viro [arnd: rebased, and added changelog text] Cc: netdev@vger.kernel.org Cc: linux-ppp@vger.kernel.org Cc: Paul Mackerras Cc: "David S. Miller" Signed-off-by: Arnd Bergmann --- drivers/net/ppp/ppp_generic.c | 169 ++++++++++++++++++++++------------ fs/compat_ioctl.c | 37 -------- 2 files changed, 108 insertions(+), 98 deletions(-) -- 2.20.0 diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c index 9a1b006904a7..7f8430e6b137 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -554,29 +554,58 @@ static __poll_t ppp_poll(struct file *file, poll_table *wait) } #ifdef CONFIG_PPP_FILTER -static int get_filter(void __user *arg, struct sock_filter **p) +static struct bpf_prog *get_filter(struct sock_fprog *uprog) +{ + struct sock_fprog_kern fprog; + struct bpf_prog *res = NULL; + int err; + + if (!uprog->len) + return NULL; + + /* uprog->len is unsigned short, so no overflow here */ + fprog.len = uprog->len * sizeof(struct sock_filter); + fprog.filter = memdup_user(uprog->filter, fprog.len); + if (IS_ERR(fprog.filter)) + return ERR_CAST(fprog.filter); + + err = bpf_prog_create(&res, &fprog); + kfree(fprog.filter); + + return err ? ERR_PTR(err) : res; +} + +static struct bpf_prog *ppp_get_filter(struct sock_fprog __user *p) { struct sock_fprog uprog; - struct sock_filter *code = NULL; - int len; - if (copy_from_user(&uprog, arg, sizeof(uprog))) - return -EFAULT; + if (copy_from_user(&uprog, p, sizeof(struct sock_fprog))) + return ERR_PTR(-EFAULT); + return get_filter(&uprog); +} - if (!uprog.len) { - *p = NULL; - return 0; - } +#ifdef CONFIG_COMPAT +struct sock_fprog32 { + unsigned short len; + compat_caddr_t filter; +}; - len = uprog.len * sizeof(struct sock_filter); - code = memdup_user(uprog.filter, len); - if (IS_ERR(code)) - return PTR_ERR(code); +#define PPPIOCSPASS32 _IOW('t', 71, struct sock_fprog32) +#define PPPIOCSACTIVE32 _IOW('t', 70, struct sock_fprog32) - *p = code; - return uprog.len; +static struct bpf_prog *compat_ppp_get_filter(struct sock_fprog32 __user *p) +{ + struct sock_fprog32 uprog32; + struct sock_fprog uprog; + + if (copy_from_user(&uprog32, p, sizeof(struct sock_fprog32))) + return ERR_PTR(-EFAULT); + uprog.len = uprog32.len; + uprog.filter = compat_ptr(uprog32.filter); + return get_filter(&uprog); } -#endif /* CONFIG_PPP_FILTER */ +#endif +#endif static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { @@ -753,55 +782,25 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) #ifdef CONFIG_PPP_FILTER case PPPIOCSPASS: - { - struct sock_filter *code; - - err = get_filter(argp, &code); - if (err >= 0) { - struct bpf_prog *pass_filter = NULL; - struct sock_fprog_kern fprog = { - .len = err, - .filter = code, - }; - - err = 0; - if (fprog.filter) - err = bpf_prog_create(&pass_filter, &fprog); - if (!err) { - ppp_lock(ppp); - if (ppp->pass_filter) - bpf_prog_destroy(ppp->pass_filter); - ppp->pass_filter = pass_filter; - ppp_unlock(ppp); - } - kfree(code); - } - break; - } case PPPIOCSACTIVE: { - struct sock_filter *code; + struct bpf_prog *filter = ppp_get_filter(argp); + struct bpf_prog **which; - err = get_filter(argp, &code); - if (err >= 0) { - struct bpf_prog *active_filter = NULL; - struct sock_fprog_kern fprog = { - .len = err, - .filter = code, - }; - - err = 0; - if (fprog.filter) - err = bpf_prog_create(&active_filter, &fprog); - if (!err) { - ppp_lock(ppp); - if (ppp->active_filter) - bpf_prog_destroy(ppp->active_filter); - ppp->active_filter = active_filter; - ppp_unlock(ppp); - } - kfree(code); + if (IS_ERR(filter)) { + err = PTR_ERR(filter); + break; } + if (cmd == PPPIOCSPASS) + which = &ppp->pass_filter; + else + which = &ppp->active_filter; + ppp_lock(ppp); + if (*which) + bpf_prog_destroy(*which); + *which = filter; + ppp_unlock(ppp); + err = 0; break; } #endif /* CONFIG_PPP_FILTER */ @@ -827,6 +826,51 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) return err; } +#ifdef CONFIG_COMPAT +static long ppp_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + struct ppp_file *pf; + int err = -ENOIOCTLCMD; + void __user *argp = (void __user *)arg; + + mutex_lock(&ppp_mutex); + + pf = file->private_data; + if (pf && pf->kind == INTERFACE) { + struct ppp *ppp = PF_TO_PPP(pf); + switch (cmd) { +#ifdef CONFIG_PPP_FILTER + case PPPIOCSPASS32: + case PPPIOCSACTIVE32: + { + struct bpf_prog *filter = compat_ppp_get_filter(argp); + struct bpf_prog **which; + + if (IS_ERR(filter)) { + err = PTR_ERR(filter); + break; + } + if (cmd == PPPIOCSPASS32) + which = &ppp->pass_filter; + else + which = &ppp->active_filter; + ppp_lock(ppp); + if (*which) + bpf_prog_destroy(*which); + *which = filter; + ppp_unlock(ppp); + err = 0; + break; + } +#endif /* CONFIG_PPP_FILTER */ + } + } + mutex_unlock(&ppp_mutex); + + return err; +} +#endif + static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf, struct file *file, unsigned int cmd, unsigned long arg) { @@ -895,6 +939,9 @@ static const struct file_operations ppp_device_fops = { .write = ppp_write, .poll = ppp_poll, .unlocked_ioctl = ppp_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = ppp_compat_ioctl, +#endif .open = ppp_open, .release = ppp_release, .llseek = noop_llseek, diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index d537888f3660..eda41b2537f0 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c @@ -99,40 +99,6 @@ static int sg_grt_trans(struct file *file, } #endif /* CONFIG_BLOCK */ -struct sock_fprog32 { - unsigned short len; - compat_caddr_t filter; -}; - -#define PPPIOCSPASS32 _IOW('t', 71, struct sock_fprog32) -#define PPPIOCSACTIVE32 _IOW('t', 70, struct sock_fprog32) - -static int ppp_sock_fprog_ioctl_trans(struct file *file, - unsigned int cmd, struct sock_fprog32 __user *u_fprog32) -{ - struct sock_fprog __user *u_fprog64 = compat_alloc_user_space(sizeof(struct sock_fprog)); - void __user *fptr64; - u32 fptr32; - u16 flen; - - if (get_user(flen, &u_fprog32->len) || - get_user(fptr32, &u_fprog32->filter)) - return -EFAULT; - - fptr64 = compat_ptr(fptr32); - - if (put_user(flen, &u_fprog64->len) || - put_user(fptr64, &u_fprog64->filter)) - return -EFAULT; - - if (cmd == PPPIOCSPASS32) - cmd = PPPIOCSPASS; - else - cmd = PPPIOCSACTIVE; - - return do_ioctl(file, cmd, (unsigned long) u_fprog64); -} - struct ppp_option_data32 { compat_caddr_t ptr; u32 length; @@ -285,9 +251,6 @@ static long do_ioctl_trans(unsigned int cmd, return ppp_gidle(file, cmd, argp); case PPPIOCSCOMPRESS32: return ppp_scompress(file, cmd, argp); - case PPPIOCSPASS32: - case PPPIOCSACTIVE32: - return ppp_sock_fprog_ioctl_trans(file, cmd, argp); #ifdef CONFIG_BLOCK case SG_GET_REQUEST_TABLE: return sg_grt_trans(file, cmd, argp); From patchwork Wed Oct 9 19:10:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 175658 Delivered-To: patch@linaro.org Received: by 2002:a92:7e96:0:0:0:0:0 with SMTP id q22csp1173287ill; Wed, 9 Oct 2019 12:13:30 -0700 (PDT) X-Google-Smtp-Source: APXvYqx0XdbWOQnXq8b/SHZIt7PixNuFW3ao5xMbX9J7ZAgOLtUSuM+f/DzMiJUaeE4+0UCpuNND X-Received: by 2002:aa7:c24d:: with SMTP id y13mr4496054edo.186.1570648410591; Wed, 09 Oct 2019 12:13:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570648410; cv=none; d=google.com; s=arc-20160816; b=pbrOhILK08ev8C/5+OScxmLkrE3szjTh4a2OjUz6DIJHbLYIA2h5N92+wd77x2M/7l AVwWKivcYdgdihjlJzsSk6h0ii/ur4GrT/0af3E6r0q8QbqO4xP5clcxuLyTRy4udQ0a 9xopv6ArvHLxSXnc4ImG1p3ZscpxiseEBnDLmIj7fXVpOQGmaZqPnb8MAgSuYqJOCdGy KsnCnPxiyYjbosVqXyDDVCJOIJlcRHdWPl0ELNvgNmJbqnKGM3Qb/XerNVeZU+Cs80/E DVmuK0ooZD9EOeGCu7ef1rNP5KQk4//7PLDPsyr/tsYh5IjNVuputUssaE2OusQ4td9C OgRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=qTEY4Ep5JQ44clJvkBBfP8XI5mr5ob0y4QU3tRp7rgI=; b=RrvprtV9W3YUkWruSWUoGW0n6eiOdIWPEqqPxpJy2LkkFjYMBWM8KpLGJrRt354EVr nQ8ljGzg3XVcQeDdEfKd0e6mUVzaOv3vQfpGnmTsRABBroj7arPjI5n6mDnL/l+xVgUe 4CMVDvEzeAXDzVGMm4534CPzUC3u/UswGqd1WtwickQOU92SsnDa2tBNVG3ve7KVVa3Q axC0V2mYiaj+uYNfngTI9FNxcnT8J00xXhcoZxjyKm99sRPbWf8ZMo0OJM+Q93xkkUuN ruwyrVWWeHF7PzOdEKdhlMv/ajyr/ZfMIMlWfH0/UzwLPZUpPpq79VzNKK1K/eRfN3dV HTAA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v22si1750475edq.239.2019.10.09.12.13.30; Wed, 09 Oct 2019 12:13:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732012AbfJITN0 (ORCPT + 8 others); Wed, 9 Oct 2019 15:13:26 -0400 Received: from mout.kundenserver.de ([212.227.126.134]:45249 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732004AbfJITL0 (ORCPT ); Wed, 9 Oct 2019 15:11:26 -0400 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.129]) with ESMTPA (Nemesis) id 1MF3Y8-1iKR6136kK-00FVc7; Wed, 09 Oct 2019 21:11:21 +0200 From: Arnd Bergmann To: Al Viro Cc: linux-kernel@vger.kernel.org, y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, Arnd Bergmann , netdev@vger.kernel.org, linux-ppp@vger.kernel.org, Paul Mackerras , "David S. Miller" Subject: [PATCH v6 40/43] compat_ioctl: ppp: move simple commands into ppp_generic.c Date: Wed, 9 Oct 2019 21:10:41 +0200 Message-Id: <20191009191044.308087-41-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191009190853.245077-1-arnd@arndb.de> References: <20191009190853.245077-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:GXKtyh7vsF4FiTtWLqzwMcIgXtk7RdFF+r5QNo7+0Nai2sQ9ZhK i9SPNDUUDqHigBCgTOYByVDXaADBCY/hfUWfQhV7WNKnbp8kRzv8dfcdVmE7KnqpMWsUZIH K3ikAZd0KxhjAEJ+tl/PIU48VlX9i8BvVvO8G30rqK5OnH2DKFaZ12/MqG5+Q+rZ+XXTNGu ZIArRzmduuzDYGKk1acEQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:3LrnoRLdkyI=:MmdFQK6DFWyq3jJb8N7RUn IL12ltoI2RKH1Z7YqWoUeNsmeAMI9FDC/Uz17lQPjNA1ZEjhhqaTQzP7NHuD0MreGbUhtvqSL En1x8SnofFrD3GHk0fVJKFM3fLj0mGZpj0AhhD5M8C4ZvfWmDXbVavPYoisq4mzZEl2BNOamg 7IWHFsuiVDocZEu4YTjNLM0xMGV4MnHrmXnfLiyWjDpoQjPqRoPMB4ndrUN13tIsom2GKDc/w cKX1YU2W/UsTHrPdnz4ogyT5r5NTUFq+LNOECzfqX/cqw8ILrB0Y0InFFgQXCuy/U/ZJJgQpx SFtqgdWeCtlY4uxb7T+vJgrvH/QQcp7Q8pbFeN9Lai/QSWsM8KgIKn9F/4uf2d9iT3kbQ55VR PZ3wWqRCyCHCh00d0ZzrUfZ8jRM00jaxwy6tUDjfIghLQ8Qtqc8VLsUyP27YwXpqfJjWJBaNE JyfSe2zvAjXtf274fiEEoUGfggeodfq2pbe6xylyPZhhBhrITJhDWGxQIoDKCp9b79blI6/TI 74Noka0qP0upaDaemC8U8f3kGDkpQA/eIZnqpRcc8ScBrd/vZswIdZYCF0JLlBfD4zCZDr2HW lgQsa3gMghBFFqxXhOUGBuoqqw1raOWU81Bg1zGdE+nBVFi3e5awK2n8Sz/L1gK4EwYn7DWNq RO+6ZzYjwS6UwsrEnZNMyuR2cNaab3A6CyDon9W3whXkKuHq7ZIma079IboVuPB38PWU5kPHw jlCpJ8un80WGpqU2t/mPiMcGISukA4qb3BzoJYrzDFKpVz9jn7IoQcDT9OUUG7HpVMZIhb2wX zwwZKHMbKwwB77X8PSGHiQVX44xYXSAR26wsIdUa4Vwxy1C8F7sW3gVnzBg1VPahqoHia+xK3 b8BRFozz+zjiahuPb+2Q== Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org All ppp commands that are not already handled in ppp_compat_ioctl() are compatible, so they can now handled by calling the native ppp_ioctl() directly. Without CONFIG_BLOCK, the generic compat_ioctl table is now empty, so add a check to avoid a build failure in the looking function for that configuration. Cc: netdev@vger.kernel.org Cc: linux-ppp@vger.kernel.org Cc: Paul Mackerras Cc: "David S. Miller" Signed-off-by: Arnd Bergmann --- drivers/net/ppp/ppp_generic.c | 4 ++++ fs/compat_ioctl.c | 36 ++++------------------------------- 2 files changed, 8 insertions(+), 32 deletions(-) -- 2.20.0 diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c index ce4dd45c541d..267fe2c58087 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -903,6 +903,10 @@ static long ppp_compat_ioctl(struct file *file, unsigned int cmd, unsigned long } mutex_unlock(&ppp_mutex); + /* all other commands have compatible arguments */ + if (err == -ENOIOCTLCMD) + err = ppp_ioctl(file, cmd, (unsigned long)compat_ptr(arg)); + return err; } #endif diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index 5e59101ef981..3cf8b6d113c3 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c @@ -144,38 +144,6 @@ COMPATIBLE_IOCTL(SG_GET_REQUEST_TABLE) COMPATIBLE_IOCTL(SG_SET_KEEP_ORPHAN) COMPATIBLE_IOCTL(SG_GET_KEEP_ORPHAN) #endif -/* PPP stuff */ -COMPATIBLE_IOCTL(PPPIOCGFLAGS) -COMPATIBLE_IOCTL(PPPIOCSFLAGS) -COMPATIBLE_IOCTL(PPPIOCGASYNCMAP) -COMPATIBLE_IOCTL(PPPIOCSASYNCMAP) -COMPATIBLE_IOCTL(PPPIOCGUNIT) -COMPATIBLE_IOCTL(PPPIOCGRASYNCMAP) -COMPATIBLE_IOCTL(PPPIOCSRASYNCMAP) -COMPATIBLE_IOCTL(PPPIOCGMRU) -COMPATIBLE_IOCTL(PPPIOCSMRU) -COMPATIBLE_IOCTL(PPPIOCSMAXCID) -COMPATIBLE_IOCTL(PPPIOCGXASYNCMAP) -COMPATIBLE_IOCTL(PPPIOCSXASYNCMAP) -COMPATIBLE_IOCTL(PPPIOCXFERUNIT) -/* PPPIOCSCOMPRESS is translated */ -COMPATIBLE_IOCTL(PPPIOCGNPMODE) -COMPATIBLE_IOCTL(PPPIOCSNPMODE) -COMPATIBLE_IOCTL(PPPIOCGDEBUG) -COMPATIBLE_IOCTL(PPPIOCSDEBUG) -/* PPPIOCSPASS is translated */ -/* PPPIOCSACTIVE is translated */ -COMPATIBLE_IOCTL(PPPIOCGIDLE32) -COMPATIBLE_IOCTL(PPPIOCGIDLE64) -COMPATIBLE_IOCTL(PPPIOCNEWUNIT) -COMPATIBLE_IOCTL(PPPIOCATTACH) -COMPATIBLE_IOCTL(PPPIOCDETACH) -COMPATIBLE_IOCTL(PPPIOCSMRRU) -COMPATIBLE_IOCTL(PPPIOCCONNECT) -COMPATIBLE_IOCTL(PPPIOCDISCONN) -COMPATIBLE_IOCTL(PPPIOCATTCHAN) -COMPATIBLE_IOCTL(PPPIOCGCHAN) -COMPATIBLE_IOCTL(PPPIOCGL2TPSTATS) }; /* @@ -202,6 +170,7 @@ static long do_ioctl_trans(unsigned int cmd, static int compat_ioctl_check_table(unsigned int xcmd) { +#ifdef CONFIG_BLOCK int i; const int max = ARRAY_SIZE(ioctl_pointer) - 1; @@ -220,6 +189,9 @@ static int compat_ioctl_check_table(unsigned int xcmd) i--; return ioctl_pointer[i] == xcmd; +#else + return 0; +#endif } COMPAT_SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd,