From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA417C43463 for ; Fri, 18 Sep 2020 13:59:50 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 9684623119 for ; Fri, 18 Sep 2020 13:59:50 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9684623119 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arndb.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id CB048900002; Fri, 18 Sep 2020 09:59:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BFEA4900004; Fri, 18 Sep 2020 09:59:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A9D6C900002; Fri, 18 Sep 2020 09:59:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0231.hostedemail.com [216.40.44.231]) by kanga.kvack.org (Postfix) with ESMTP id 840EE900002 for ; Fri, 18 Sep 2020 09:59:49 -0400 (EDT) Received: from smtpin21.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 4B501181AEF23 for ; Fri, 18 Sep 2020 13:59:49 +0000 (UTC) X-FDA: 77276340498.21.sail67_330282d2712b Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin21.hostedemail.com (Postfix) with ESMTP id 1F123180442CD; Fri, 18 Sep 2020 13:59:49 +0000 (UTC) X-HE-Tag: sail67_330282d2712b X-Filterd-Recvd-Size: 5441 Received: from mout.kundenserver.de (mout.kundenserver.de [212.227.17.24]) by imf03.hostedemail.com (Postfix) with ESMTP; Fri, 18 Sep 2020 13:59:48 +0000 (UTC) Received: from mail-qv1-f45.google.com ([209.85.219.45]) by mrelayeu.kundenserver.de (mreue109 [212.227.15.145]) with ESMTPSA (Nemesis) id 1MhlCg-1kwiPK3ToO-00dqey; Fri, 18 Sep 2020 15:59:47 +0200 Received: by mail-qv1-f45.google.com with SMTP id cv8so2875402qvb.12; Fri, 18 Sep 2020 06:59:46 -0700 (PDT) X-Gm-Message-State: AOAM530yllwg7vkpX25VyPwo8/oktA9WjYJQlUZG136l1EpAfIUHjExB Aqqjces1gRbE4UBgKnMpR7VYqqYWqvp2uMfEtdU= X-Google-Smtp-Source: ABdhPJyPq7mySMvROlaNxuZFtqLj9tUV6q55niOILmDEkx6ztioH5FRFrOH6npOQU7X7q9Cy/nZY2UELvp9CUKm70dc= X-Received: by 2002:a0c:b39a:: with SMTP id t26mr2701457qve.19.1600437585347; Fri, 18 Sep 2020 06:59:45 -0700 (PDT) MIME-Version: 1.0 References: <20200918124533.3487701-1-hch@lst.de> <20200918124533.3487701-2-hch@lst.de> <20200918134012.GY3421308@ZenIV.linux.org.uk> <20200918134406.GA17064@lst.de> In-Reply-To: <20200918134406.GA17064@lst.de> From: Arnd Bergmann Date: Fri, 18 Sep 2020 15:59:29 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 1/9] kernel: add a PF_FORCE_COMPAT flag To: Christoph Hellwig Cc: Al Viro , Andrew Morton , Jens Axboe , David Howells , Linux ARM , "the arch/x86 maintainers" , "linux-kernel@vger.kernel.org" , "open list:BROADCOM NVRAM DRIVER" , Parisc List , linuxppc-dev , linux-s390 , sparclinux , linux-block , linux-scsi , Linux FS-devel Mailing List , linux-aio , io-uring@vger.kernel.org, linux-arch , Linux-MM , Networking , keyrings@vger.kernel.org, LSM List Content-Type: text/plain; charset="UTF-8" X-Provags-ID: V03:K1:6X51ikNOxGLSJ/YyJS6KvGG+QQdvjwamc6SHM7/bSKli3Kxl5Yj FG2iuKyIzdaMVq+ZvYTNkLZdeN3FPX3odAkOyne1KLmzZ38hzM+OlY6en++FX/nmHooSn1H RhVFT8f9AhvZPmbQZpxxOiRrOEWTQQrHTG1Y0XUBYXQTSmIHEW4RGcz4layq4cxj/ICX9yo GEvrH1YRJcn6e6joLDd5Q== X-UI-Out-Filterresults: notjunk:1;V03:K0:rFFsYAAP/7g=:qbgKQDB34RjwNUKHDJTAxj C1AEM6UaMAS/KERv/Rmoj9xctC72Q22eLA1DePQj7bkqEs3EKti3hSqR0vGweApDSgjvplRXH s0QX6L5Wh3FoAL3fwHVn8Bw2JiiD9oAUz0GRo+qv7mFtP9oBn2AKXHyD9m4tv1dh0ACnY/4VS Pf79ZlS/w+onNfZ5xA7AqgHKizOiAnMFXgMOlm0JwtnW6h+rk0SiDWS6UmLir4gk4EBRsEPin +bypbRonzrMVQS4vf60rRNSSgTZRZMv14TfHdE5qaNZPZKCU6J9k1SG8rJyMH78TIzce33dLM Tcfq8CSmqdJ70qCRS0lkz8c7Vs7Ygs59FkL+vGVM4NOfiRCVOC/2nbX4A3r9Yz3iPPsI9aseP I9Ey70f2MhJukGybwB1xTj5s5s/T1K8UOzqQvyG8RXmImWGWy6MlYVWLmbWXjxXGPktWUSBdD l0R49yBf7U4uLexJcNyaxA6081Z6EaJdeqR2+wIe5kWU9mRxvoKZOj5m71+Q9QgVDIcuHK151 ZEe4jOnG/+tjv6eb1R9l8KU85mTOj3iWotgIjqbNI5MTtjGjf1xYG0UO3NewGXHOrkEOTVYrI eZB58Px9p+52UvaojgfdGilmQxZen3BSnGwuIcNZqg1qUdtHTE40SwZLY+4MKdBFYzUo2VM4y ykEQzhXfcO2ycQnovDWrxVZLAhKlFFeuhGftcbZlqTHLhrSolt3JC5uBqZrXvu8R7VCuR7iCE 1orwOWspztzmFBqCrXDskwRD2b6G4Yhag9YG0/Dy/W+cprU5x4ZQ9KIrzI7M5ZPjnd+Av9JqX O2iVMLCUDoV1AaMVR7qTfazv84hQZGqy7QuMzGkYhacZ7tduB5Y7sU7IXiuald6glvRGSinon Q0ZuqmzD4yZyHrMM3/+M4ATTWMBZGrfJmNboltBT8J2LJ3ifePshnK9pwyJhV8jl8hz5/1G2k JxHnzlBONm14SuqFkr5giGSfAqCnJRl+KVTG60lkXSNMTo2Vgh3Xn X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri, Sep 18, 2020 at 3:44 PM Christoph Hellwig wrote: > > On Fri, Sep 18, 2020 at 02:40:12PM +0100, Al Viro wrote: > > > /* Vector 0x110 is LINUX_32BIT_SYSCALL_TRAP */ > > > - return pt_regs_trap_type(current_pt_regs()) == 0x110; > > > + return pt_regs_trap_type(current_pt_regs()) == 0x110 || > > > + (current->flags & PF_FORCE_COMPAT); > > > > Can't say I like that approach ;-/ Reasoning about the behaviour is much > > harder when it's controlled like that - witness set_fs() shite... > > I don't particularly like it either. But do you have a better idea > how to deal with io_uring vs compat tasks? Do we need to worry about something other than the compat_iovec struct for now? Regarding the code in io_import_iovec(), it would seem that can easily be handled by exposing an internal helper. Instead of #ifdef CONFIG_COMPAT if (req->ctx->compat) return compat_import_iovec(rw, buf, sqe_len, UIO_FASTIOV, iovec, iter); #endif return import_iovec(rw, buf, sqe_len, UIO_FASTIOV, iovec, iter); This could do __import_iovec(rw, buf, sqe_len, UIO_FASTIOV, iovec, iter, req->ctx->compat); With the normal import_iovec() becoming a trivial wrapper around the same thing: ssize_t import_iovec(int type, const struct iovec __user * uvector, unsigned nr_segs, unsigned fast_segs, struct iovec **iov, struct iov_iter *i) { return __import_iovec(type, uvector, nr_segs, fast_segs, iov, i, in_compat_syscall()); } Arnd