Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp2021223ybh; Fri, 24 Jul 2020 02:21:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwPPHdb7MazidJVGVfyp+eZcfiIKj0KOBynAFDXAIT2R3kRPCZU+mSiVg9yxFeM7ira36VY X-Received: by 2002:a05:6402:1778:: with SMTP id da24mr8305824edb.126.1595582497438; Fri, 24 Jul 2020 02:21:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595582497; cv=none; d=google.com; s=arc-20160816; b=MFztwUmSBbhEVO28phh1fDsgc03b0ORJU/5xbCgCzi9Lh6mflcYbvnypoW+l0UVg57 SrQDjg0AvZkiiGuK3t8wwl+bpf49+cwNAwPXY3ziz1s4lqg4oxf2TtbVeNyHGEeLJjfz r9IGZAc2hGzLNMtPF0llMvAvvv5HmjEaS7pyp8Z1bTbQSwxbfOJqV0orp0wQDSH0VDqc Ey5z1cEPKw7xFC8wOFEGETc7SoQfjiYeDqQ+3gdS5/MqItLpce2C1zhi9zRIzoL+zAvS AJ4Fg3DcvuIT29LZmc0/++X2rWIRGJTVB453ODeMnVRAx4PvX1dv9p+m5li0Vio4er5k vrLQ== 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:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version; bh=iKmecHN80HhX8CYJPXefzA7xfqXWthRCHTi6lOApAUM=; b=ogSqv1nZIfDasJIeIvDQ6WrN6UsKcEUOsxK9oUDDr8FxILNt/OurB5c6CAlAn6q0yb BJaHm4qmxvCFXo8xiky9ltTvjicQCAH7gulxPK5LaYZKiHGXv4MOMsNqIHxx1fTHMd6u KXEn1tuuzer7YyXI6m10fENceUt7SZvcV14xQ9f8/50hWbJGenFRCvhwIKJZC2B2fqZp HA3JuPuNohDcSGL4QCLw+t//kU4PnvPEmD254KfFKSgkVdS8jj2f5WlmgZBeyvOQAI1s rmmXEDVx0YtosKOxZGwlAxkMwmNQmb/lMteFEc1mVCbRYre6vK+NIXcJ6e5KxpYpeDc3 zbRQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s11si246601ejd.441.2020.07.24.02.21.13; Fri, 24 Jul 2020 02:21:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728080AbgGXJUr convert rfc822-to-8bit (ORCPT + 99 others); Fri, 24 Jul 2020 05:20:47 -0400 Received: from mout.kundenserver.de ([212.227.17.24]:52941 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727972AbgGXJUq (ORCPT ); Fri, 24 Jul 2020 05:20:46 -0400 Received: from mail-qk1-f176.google.com ([209.85.222.176]) by mrelayeu.kundenserver.de (mreue106 [212.227.15.145]) with ESMTPSA (Nemesis) id 1N3sNa-1kyONw1BNg-00zofz; Fri, 24 Jul 2020 11:20:44 +0200 Received: by mail-qk1-f176.google.com with SMTP id e13so8027966qkg.5; Fri, 24 Jul 2020 02:20:43 -0700 (PDT) X-Gm-Message-State: AOAM533Xbv7VPZv6K9FbSXZLNfp32yJDDIOK2u+6hbGcPWpfxugglv6B bK8L0K5uL3IjUl/muzddjKdAZiwuadn3aodyC6w= X-Received: by 2002:a05:620a:1654:: with SMTP id c20mr9525639qko.138.1595582443026; Fri, 24 Jul 2020 02:20:43 -0700 (PDT) MIME-Version: 1.0 References: <20200724001248.GC25522@altlinux.org> In-Reply-To: <20200724001248.GC25522@altlinux.org> From: Arnd Bergmann Date: Fri, 24 Jul 2020 11:20:26 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] fs/nsfs.c: fix ioctl support of compat processes To: "Dmitry V. Levin" Cc: Alexander Viro , Serge Hallyn , Andrei Vagin , "Eric W. Biederman" , =?UTF-8?B?w4Frb3MgVXpvbnlp?= , Linux FS-devel Mailing List , "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT X-Provags-ID: V03:K1:T2/vIztnhZynRsOcAXoIISvlgJgffTQCDi4EdAH6mVPwIrPBg5v ndVMcJ0U3z6aHd7rDquf37P43BoS9nUhNT3EbVNf8NIaAuUDOL71H8gPS5EVo0OrXiEnJVA bz6jY0Fnl/xzV2XYwLo28gx3w3OF/e4mP+crUmOk887ak21eK63POZ86EfCYN2aGDe4fWCU jp7tYZDSm/6qL4QAicQlQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:u15t9tA4sZE=:3QJhBrC99WeXoTxX7bhp6P qmZ66Qp7GzD2AcfugQCGSs+HkTPetVFGgLmTzS3D6Jv+lYgDVGb3bAZRDUtUM3aecyk6nD55l ZLJTD3M34O7yx2IQZt1A7IIm4LXJMEDJvWFMc4U1fI4se66X6yXdoHWiFuYCv6q7zZHzHNfEq jmXgSFrRf4Gf99ou+/OfWOewVzcOMD2ym6nQ76nwgODpBnjKLaQHTzlIFlZhsmItalJyjF/ZZ gVyLKTTrENHP38p8spf9fYj9BR4PrDE14Kyc9geeiXp3Rqvt43HJJhSmu5RAxYCU7sUpSibpo 3VmyZ0WCLuN3ljugSU3NFPeTjsN/3+LP6y2+5yGf/lM2C8FxSY74s1b1S1fSLgH6e4kuLVDbr rLV5YScRa42YiOjZbII0R014RFkaJ3deVb+U3WYggCuneM8HwXOLk2UYCHpCVkIBGc/Y4Zhl2 iML0k1O3uXIDwrHL83IWKevneyr7icDDhmYVfIXvTcYXy3aAYM9TKPDlrFRTx6unTn1mrb2E/ 0tNSyvfpHl1eDSeB8aTBb/XYmcBv14bthqT+NSHwyU4rJCO/Qrf3hilCTw4sWS8MbYyibDN// dbwucpHbO3ZeiWJ8cyLjXXZmgrKvxn8J19hcJ0RSSKUHYsfx93slBnZeMsxT2pALaOOkm1x7P Yw1ryhY2saAHNstYigRt3tbOlIgNQg52JyuP9SFjJbRaYHLD1gpLB5eJLxy83iER1nrJxBDqv jtzcy7R9Cox0030bPs7cFGOK7tYHWRNnZNMw95Tt0wpuOXrg0zp1DQFTCJZg9AJ6xouHRzaVI YvScS21dezXfV8ZJcO+bfWV0jyKJVYYG3l0YNDpJGcFqTN1WYQ8+RAFkDMeeSYbAImJlbif Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jul 24, 2020 at 2:12 AM Dmitry V. Levin wrote: > > According to Documentation/driver-api/ioctl.rst, in order to support > 32-bit user space running on a 64-bit kernel, each subsystem or driver > that implements an ioctl callback handler must also implement the > corresponding compat_ioctl handler. The compat_ptr_ioctl() helper can > be used in place of a custom compat_ioctl file operation for drivers > that only take arguments that are pointers to compatible data > structures. > > In case of NS_* ioctls only NS_GET_OWNER_UID accepts an argument, and > this argument is a pointer to uid_t type, which is universally defined > to __kernel_uid32_t. This is potentially dangerous to rely on, as there are two parts that are mismatched: - user space does not see the kernel's uid_t definition, but has its own, which may be either the 16-bit or the 32-bit type. 32-bit uid_t was introduced with linux-2.3.39 in back in 2000. glibc was already using 32-bit uid_t at the time in user space, but uclibc only changed in 2003, and others may have been even later. - the ioctl command number is defined (incorrectly) as if there was no argument, so if there is any user space that happens to be built with a 16-bit uid_t, this does not get caught. Arnd > Reported-by: Ákos Uzonyi > Fixes: 6786741dbf99 ("nsfs: add ioctl to get an owning user namespace for ns file descriptor") > Cc: stable@vger.kernel.org # v4.9+ > Signed-off-by: Dmitry V. Levin > --- > fs/nsfs.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/nsfs.c b/fs/nsfs.c > index 800c1d0eb0d0..a00236bffa2c 100644 > --- a/fs/nsfs.c > +++ b/fs/nsfs.c > @@ -21,6 +21,7 @@ static long ns_ioctl(struct file *filp, unsigned int ioctl, > static const struct file_operations ns_file_operations = { > .llseek = no_llseek, > .unlocked_ioctl = ns_ioctl, > + .compat_ioctl = compat_ptr_ioctl, > }; > > static char *ns_dname(struct dentry *dentry, char *buffer, int buflen)