From: Arnd Bergmann <arnd@arndb.de> To: Al Viro <viro@zeniv.linux.org.uk> Cc: Linux FS-devel Mailing List <linux-fsdevel@vger.kernel.org>, y2038 Mailman List <y2038@lists.linaro.org>, Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Paul Mackerras <paulus@samba.org>, "David S. Miller" <davem@davemloft.net>, Michal Ostrowski <mostrows@earthlink.net>, Dmitry Kozlov <xeb@mail.ru>, James Chapman <jchapman@katalix.com>, linux-ppp@vger.kernel.org, Networking <netdev@vger.kernel.org> Subject: Re: [PATCH v3 02/26] compat_ioctl: move simple ppp command handling into driver Date: Wed, 17 Apr 2019 22:03:07 +0000 [thread overview] Message-ID: <CAK8P3a1tiRew6uqegUXsKbNQG7=sPVFMY3yXf0M7OjJdkxM=_g@mail.gmail.com> (raw) In-Reply-To: <20190417211303.GU2217@ZenIV.linux.org.uk> On Wed, Apr 17, 2019 at 11:13 PM Al Viro <viro@zeniv.linux.org.uk> wrote: > > On Tue, Apr 16, 2019 at 10:19:40PM +0200, Arnd Bergmann wrote: > > diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c > > index c708400fff4a..04252c3492ee 100644 > > --- a/drivers/net/ppp/ppp_generic.c > > +++ b/drivers/net/ppp/ppp_generic.c > > @@ -899,6 +899,7 @@ static const struct file_operations ppp_device_fops = { > > .write = ppp_write, > > .poll = ppp_poll, > > .unlocked_ioctl = ppp_ioctl, > > + .compat_ioctl = ppp_ioctl, > > Oh? What happens on e.g. s390 with something like PPPIOCNEWUNIT? > Current kernel: > * no ->compat_ioctl() > * ->unlock_ioctl() is present > * found by compat_ioctl_check_table() > * pass (unsigned long)compat_ptr(arg) to do_vfs_ioctl() > * pass that to ppp_ioctl() > * pass that to ppp_unattached_ioctl() > * fetch int from (int __user *)compat_ptr(arg) > > With your patch: > * call ppp_ioctl() > * pass arg to ppp_unattached_ioctl() > * fetch int from (int __user *)arg > > AFAICS, that's broken... Correct. I had added this patch to the series from an older set of patches (predating the compat_ptr_ioctl() series) , and did not check for this issue again. When I originally created the patch, I assumed that even on s390 it would be no problem. > Looking at that ppp_ioctl(), > pointer to arch-independent type or ignored: > PPPIOCNEWUNIT PPPIOCATTACH PPPIOCATTCHAN PPPIOCSMRU PPPIOCSFLAGS > PPPIOCGFLAGS PPPIOCGUNIT PPPIOCSDEBUG PPPIOCSMAXCID PPPIOCCONNECT > PPPIOCGDEBUG PPPIOCSMAXCID PPPIOCSMRRU > PPPIOCDETACH PPPIOCDISCONN > PPPIOCGASYNCMAP PPPIOCSASYNCMAP PPPIOCGRASYNCMAP PPPIOCSRASYNCMAP > PPPIOCGXASYNCMAP PPPIOCSXASYNCMAP > PPPIOCGNPMODE PPPIOCSNPMODE > pointer to struct ppp_option_data (with further pointer-chasing in it): > PPPIOCSCOMPRESS > pointer to struct ppp_idle: > PPPIOCGIDLE > pointer to struct sock_filter (with hidden pointer-chasing, AFAICS): > PPPIOCSPASS PPPIOCSACTIVE > > Pretty much all of them take pointers. What's more, reaction to > unknown is -ENOTTY, not -ENOIOCTLCM, so that patch will have > prevent the translated ones from reaching do_ioctl_trans() Good point, this patch sequence does break bisection. > What am I missing here? Why not simply do > > compat_ppp_ioctl() > { > PPPIOCSCOMPRESS32 => deal with it > PPPIOCGIDLE32 => deal with it > PPPIOCSPASS32 / PPPIOCSACTIVE32 => deal with it > default: pass compat_ptr(arg) to ppp_ioctl() and be done with that > } > > with BPF-related bits (both compat and native) taken to e.g. net/core/bpf-ppp.c, > picked by both generic and isdn? IDGI... I was trying to unify the native and compat code paths as much as possible here. Handling the four PPPIO*32 commands in compat_ppp_ioctl would either require duplicating large chunks of ppp_ioctl, or keeping the extra compat_alloc_user_space() copy from the existing implementation. I'll try to come up with a different way to structure the patches. Arnd
next prev parent reply other threads:[~2019-04-17 22:03 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-04-16 20:19 [PATCH v3 00/26] compat_ioctl: cleanups Arnd Bergmann 2019-04-16 20:19 ` [PATCH v3 02/26] compat_ioctl: move simple ppp command handling into driver Arnd Bergmann 2019-04-17 21:13 ` Al Viro 2019-04-17 22:03 ` Arnd Bergmann [this message] 2019-04-17 23:53 ` Al Viro 2019-04-18 5:57 ` Al Viro 2019-04-18 15:14 ` Arnd Bergmann 2019-04-16 20:19 ` [PATCH v3 04/26] compat_ioctl: move PPPIOCSCOMPRESS32 to ppp-generic.c Arnd Bergmann 2019-04-17 21:16 ` Al Viro 2019-04-17 21:44 ` Arnd Bergmann 2019-04-16 20:19 ` [PATCH v3 05/26] compat_ioctl: move PPPIOCSPASS32/PPPIOCSACTIVE32 to ppp_generic.c Arnd Bergmann 2019-04-16 20:19 ` [PATCH v3 06/26] compat_ioctl: handle PPPIOCGIDLE for 64-bit time_t Arnd Bergmann 2019-04-16 22:33 ` [PATCH v3 00/26] compat_ioctl: cleanups Douglas Gilbert
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='CAK8P3a1tiRew6uqegUXsKbNQG7=sPVFMY3yXf0M7OjJdkxM=_g@mail.gmail.com' \ --to=arnd@arndb.de \ --cc=davem@davemloft.net \ --cc=jchapman@katalix.com \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-ppp@vger.kernel.org \ --cc=mostrows@earthlink.net \ --cc=netdev@vger.kernel.org \ --cc=paulus@samba.org \ --cc=viro@zeniv.linux.org.uk \ --cc=xeb@mail.ru \ --cc=y2038@lists.linaro.org \ --subject='Re: [PATCH v3 02/26] compat_ioctl: move simple ppp command handling into driver' \ /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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).