Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp522131ybt; Sat, 13 Jun 2020 11:58:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyLU9S3qW7N9IgKFvZZ5D/bgvbZtxHPpfl9HJSWKcOaBRtumtdy1VhpHTzOXqYRxfsEK5E6 X-Received: by 2002:a17:906:7c57:: with SMTP id g23mr5851103ejp.299.1592074715206; Sat, 13 Jun 2020 11:58:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592074715; cv=none; d=google.com; s=arc-20160816; b=bBIG9CAOj3gn4f1OEnCl5hkaa6JdNRS7E4TJqsPMmvgDXzt4a5QoX9sedXHpHr++WC WL7W8+KkP9Wu2sTQbde6BpGH5uIVorj5wOKX6vWEdZR/OQ/vWC3WtQFYn7M342Kui58d eCitrf835NrD30iVn3zwTD4i4Y/C3ZLuj8XHGUVHoqlG2Z2OvxA38vTK7Vwr/T7oN7la TIwCNhnYOjlHxrnoWexlOPILzdHMQeMKRBSZidlYklJEgFdC8KFakmGjTt8OIsaEgpfO 8eg445C+NHgb6+3TMRlDZVNxpuSVO94uMaMJdEwgR56h0TOoTFyyVad5X1snUSoWbExO TEbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version; bh=rEkA9jBwMoIJIdHRvKxvozzjhAn4z1bmN7Q/IRgeL6o=; b=QYG/iIe2gRXuSIRH4yYUzTbL5ZqHVhgBR7KhcvHoVqmtn/0HpSh3eSSWMbt7LubANN N+sYiKgjt2gegjZS09VSwNYQNJqWql/LgRrzs/xCvcOkZrxgeDJItePClyVaSBhud631 fn80zl2YLyp5OfJU3uBi4zP8YtXbvrO269w9OvlIpvjzTan+2Uq3PNqsCenkMYQtiEoz fC/ZPBQJtqxFgY/H+6F13w+GK0WjovVlTnFAFynFeIJbYt3TaWkNiKviqCK0LCqbHCT3 Bl2XauNocj42B1Q6tnAxwdcepnFf8SEnGwOsevpSLQgW/jYtPKS6C/q+nLR/bkTguT1m AnFw== 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 do11si8586271ejc.450.2020.06.13.11.58.12; Sat, 13 Jun 2020 11:58:35 -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 S1726542AbgFMSz3 (ORCPT + 99 others); Sat, 13 Jun 2020 14:55:29 -0400 Received: from mout.kundenserver.de ([212.227.17.24]:57201 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726102AbgFMSz2 (ORCPT ); Sat, 13 Jun 2020 14:55:28 -0400 Received: from mail-qt1-f179.google.com ([209.85.160.179]) by mrelayeu.kundenserver.de (mreue106 [212.227.15.145]) with ESMTPSA (Nemesis) id 1MPXMa-1jXcXH3T3y-00Mdf4 for ; Sat, 13 Jun 2020 20:55:26 +0200 Received: by mail-qt1-f179.google.com with SMTP id g62so9680038qtd.5 for ; Sat, 13 Jun 2020 11:55:25 -0700 (PDT) X-Gm-Message-State: AOAM532ZuUxdmmmIl6K43COS4OBHGgN+JR6dFNEPx8aNMB8jyWBtbYwN ZSrcaao6+Qapa6W02VahPw7iZu7VuGGT0dAtdI0= X-Received: by 2002:ac8:4742:: with SMTP id k2mr8988128qtp.304.1592074524733; Sat, 13 Jun 2020 11:55:24 -0700 (PDT) MIME-Version: 1.0 References: <9e1de19f35e2d5e1d115c9ec3b7c3284b4a4e077.1591885760.git.afzal.mohd.ma@gmail.com> <20200612135538.GA13399@afzalpc> <20200613120432.GA5319@afzalpc> <20200613125126.GE23230@ZenIV.linux.org.uk> <20200613125615.GF23230@ZenIV.linux.org.uk> <20200613134236.GA4086@afzalpc> <20200613153102.GG23230@ZenIV.linux.org.uk> <20200613154118.GH23230@ZenIV.linux.org.uk> <20200613160040.GI23230@ZenIV.linux.org.uk> In-Reply-To: <20200613160040.GI23230@ZenIV.linux.org.uk> From: Arnd Bergmann Date: Sat, 13 Jun 2020 20:55:08 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [RFC 1/3] lib: copy_{from,to}_user using gup & kmap_atomic() To: Al Viro Cc: afzal mohammed , Russell King - ARM Linux admin , Linus Walleij , "linux-kernel@vger.kernel.org" , Linux-MM , Linux ARM , Nicolas Pitre , Catalin Marinas , Will Deacon , "Paul E. McKenney" Content-Type: text/plain; charset="UTF-8" X-Provags-ID: V03:K1:mo5KIWaH/QtFp8L0CgGFDvW2cCq8zPs5Wxrt1NFMjP3RPeJPhBc I3VQNsJrX5dY+wJ+rynN2XuewamXDaUuewppUFJ1tb1JVF1rKNvIcDtD4i/tpwCGW+LMxsf wuV86hqegFVXPuz3IUmUqPkci8X1MLO7Mb/Zrgz9UKulD7dO54STcWGwP4NYKSPpGjhu5Ei Vw86zGgAaqzhUuK3y/hiA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:Pw4cFvkZ/7Y=:BIrBzpneh+lWAHOo8Qgr3m yKoY92S6d4DoJLdfQFLgUkQ4DNr9zYkzfxSNf09jVMShnSriH0dFR2OHXf6FHe5XkEIgi/9hP 6klc0C0rBx7UDg0DnvQ5BpqxnReLZoW3wkGwgmO4BdaZ0bs/ij/zR6NN0fRu9RRCDGED5ryBk KnD0mzvzSmvXFzGHZeyepEgL98IkElXXbpakoV11KE0XrK+4fSTfMdjh/TuUBHUmLWF7/NZQs srkCF/M/X6y07vCoSzXybIKXmli5QpChXu9kUlvRYH/kfPBEl19q2+6HUtJndYJFHpO6O8mik 8v6J8JZ7o5QMeE3s6e2ChqvYZX1BOoUXNb4rZg7V+JVjNbAx1ln4iWR+YmFU+p0tvwl4GcmG2 Ag8Ui33MO9mhysxxd4CqN+3fjctY05Zjm9emS4yT/kbu8eiz0vVAVxMrDq6ntSl/xXsg9K4Ul ouRMZiqd95vzgjqzRB86rVYzWNqeiPL/9yODxEzbwZuNT6kimIwGbXlIRt4sGyX3sgcRRJ0+N QUeR/QgMU9lT2clUOD93XH9AVfuaajY8QeDEsfA6KkT6PcsBU8aYQpXGv/DP4xx29Y5bc+PU9 HurrkUUEVP9khIJ+ZeyqTZegtE4KbPD1cwzpLAIP7VDeJdmXxD4S4gvtZAB9HXx+QuncvrHPN vnSOhKTAllGVTxQfZ2RW1ii2Qzqet8VIifViTS3R9bQOl+nCe7aqBpppqhu4JSWqEq639iB59 lx3lkCkuOJUxguQZGf/AruyYdEcY/I1URWu3yBiHt807cFIXB0ciPAHXC9P9LUmB3m4uAMsaD S5Zl7ujv6c7kNjLsEQLSYgDfhXiYdTz5ncnjMzI68GIAxtFxII= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Jun 13, 2020 at 6:00 PM Al Viro wrote: > On Sat, Jun 13, 2020 at 04:41:18PM +0100, Al Viro wrote: > > On Sat, Jun 13, 2020 at 04:31:02PM +0100, Al Viro wrote: > > > On Sat, Jun 13, 2020 at 07:12:36PM +0530, afzal mohammed wrote: > > > > Hi, > > > > > > > > On Sat, Jun 13, 2020 at 01:56:15PM +0100, Al Viro wrote: > > > > > > > > > Incidentally, what about get_user()/put_user()? _That_ is where it's > > > > > going to really hurt... > > > > > > > > All other uaccess routines are also planned to be added, posting only > > > > copy_{from,to}_user() was to get early feedback (mentioned in the > > > > cover letter) > > > > > > Sure, but what I mean is that I'd expect the performance loss to be > > > dominated by that, not by copy_from_user/copy_to_user on large amounts > > > of data. Especially on the loads like kernel builds - a lot of stat() > > > and getdents() calls there. > > > > To clarify: stat() means small copy_to_user(), getdents() - a mix of > > put_user() and small copy_to_user(). I would be very surprised if it > > does not hurt a lot. > > PS: there's another fun issue here: > > fill a file with zeroes > mmap that file in two areas, MAP_SHARED > thread 1: > munmap() the first area > fill the second one with 'X' > thread 2: > write() from the first area into pipe > > One could expect that nothing by zeroes gets written into > pipe - it might be a short write() (or -EFAULT), but finding > any 'X' there would be a bug. > > Your patches allow for a possibility of write() doing > get_user_pages_fast(), getting the first page just as > munmap() is about to remove it from page tables and bugger > off. Then thread 1 proceeds with the store (via the > second area). And then thread 2 does memcpy() from that > thing via a kmap_atomic()-created alias, observing the > effect of the store. > > That might or might not be a POSIX violation, but it does > look like a QoI issue... I assume this problem exists in arch/um/kernel/skas/uaccess.c and in Ingo's old x86 VMSPLIT_4G_4G patch as well, right? I guess holding mmap_read_lock() would prevent it but make it even more expensive. Arnd