From patchwork Wed Sep 30 01:19:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jann Horn X-Patchwork-Id: 11807515 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9D889112E for ; Wed, 30 Sep 2020 01:20:04 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 302BB2158C for ; Wed, 30 Sep 2020 01:20:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="DBxbgXYa" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 302BB2158C Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 119D26B005C; Tue, 29 Sep 2020 21:20:03 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 0CC366B005D; Tue, 29 Sep 2020 21:20:03 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EFC726B0068; Tue, 29 Sep 2020 21:20:02 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0226.hostedemail.com [216.40.44.226]) by kanga.kvack.org (Postfix) with ESMTP id D62D36B005C for ; Tue, 29 Sep 2020 21:20:02 -0400 (EDT) Received: from smtpin13.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 8BE465003 for ; Wed, 30 Sep 2020 01:20:02 +0000 (UTC) X-FDA: 77317971444.13.smell15_12023892718e Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin13.hostedemail.com (Postfix) with ESMTP id 6C89F18140B60 for ; Wed, 30 Sep 2020 01:20:02 +0000 (UTC) X-Spam-Summary: 10,1,0,63075b1523049d7b,d41d8cd98f00b204,jannh@google.com,,RULES_HIT:41:152:355:379:541:800:960:966:973:988:989:1260:1277:1313:1314:1345:1437:1516:1518:1535:1542:1593:1594:1711:1730:1747:1777:1792:2194:2196:2199:2200:2393:2559:2562:2693:3138:3139:3140:3141:3142:3152:3353:3865:3866:3867:3868:3870:3871:3872:4250:4321:4385:5007:6119:6261:6653:7903:8603:10004:10400:11026:11232:11473:11658:11914:12043:12266:12296:12297:12438:12519:12555:12698:12737:12895:12986:13870:14096:14097:14181:14394:14659:14721:21080:21365:21444:21451:21627:21889:21990:30012:30054:30056:30070,0,RBL:209.85.218.65:@google.com:.lbl8.mailshell.net-62.18.0.100 66.100.201.100;04yragta8u49kjoir9ykj7kc7j8rkypgjzpjae9hxhj5utra8n1g46e9eyskpoq.7jiniwnedu6af73ta6yjhomhw5rj3swz1qzc6xhder59ba399cn6mp9ifmy3os7.e-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fp,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:24,LUA_SUMMARY:none X-HE-Tag: smell15_12023892718e X-Filterd-Recvd-Size: 5199 Received: from mail-ej1-f65.google.com (mail-ej1-f65.google.com [209.85.218.65]) by imf15.hostedemail.com (Postfix) with ESMTP for ; Wed, 30 Sep 2020 01:20:02 +0000 (UTC) Received: by mail-ej1-f65.google.com with SMTP id r7so340555ejs.11 for ; Tue, 29 Sep 2020 18:20:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:mime-version:date:message-id:subject:to:cc; bh=ceFxcTCYRKLuxiHOByyD9j4jdBXW0kpXxXjKaD9WHxg=; b=DBxbgXYayiYwdgCUHtw8cmgK7E4F3rxLk6W7yvJ77q+SAVcL7yCMFoaBjRW3LbGxUD 7Y72wPJpphNqkQjX8sFI1D0s32NfQLIqUDqItk4OWZNA4NeVImf3ZqOYwLKdt0W/3Xei /eUTntmGs/UcQijT4MgKu1zdcPxuj6EJF9JBHBNegG3z40hskBdBFyXeN18Ay2pbtsCV HYHm+IyYEp0zuULgqnmHTej+SaPLEr63COCMsbbFIGm78MBCMAE/ZIivjfGj2DKyT7EA B/ceRn094uhLjQGlCllBfqCkBsXEq3yshO8sX/B0YN6fs7DLA7hBB5mB2eNlE0jkFNwk dmHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:mime-version:date:message-id:subject:to:cc; bh=ceFxcTCYRKLuxiHOByyD9j4jdBXW0kpXxXjKaD9WHxg=; b=jfITurYjn+Hd/C9taZs/tWFb+CGj1px56H6BUMJOW1LxdowLbSY4uxCRCR3AZ+RAk5 /ioenaLGAn51ZDZzm9C9b6pCQiROVuoXHAdK57Lhdw+BSfO58mF4Jm3Epkz7LZk56YU9 sgaddQkop+PhY8TB+R96QjXU1OsI0Zt/n3XNUXkJTsvk77bMJD6D8rWl2s4h+8Lafkqm aFwapuENZ8VNeKul+wqFAkw08sRD4ebWOHraq9Jh+X38CfSZEKT91P2Aau52ejEZGRak wNRwJv1oyR/pQWuz8vLd/fxjTnNEYunkmo3C+k63mwdyRrlvr3JrpLI6JdhzRfSf+XzV 8tsg== X-Gm-Message-State: AOAM531Lzxy3o6xPS7wC6tkKVlvPmzum6x32uvgC6v6IT+bziWfsKwzS CJEwVRtRZmsnDK69Y6IoD/i2B+iEIm5GWZh0I9hp0Q== X-Google-Smtp-Source: ABdhPJxIukGJ1NgumS/+8d48NIsdATIpf5NHra52OAWr6P/EU6U3IDQj2RSqcmptxqHfgaPNTaVX9nfHEaSsOliJ0CI= X-Received: by 2002:a17:907:64d:: with SMTP id wq13mr364490ejb.513.1601428800706; Tue, 29 Sep 2020 18:20:00 -0700 (PDT) Received: from 913411032810 named unknown by gmailapi.google.com with HTTPREST; Tue, 29 Sep 2020 18:19:59 -0700 From: Jann Horn X-Mailer: git-send-email 2.28.0.709.gb0816b6eb0-goog MIME-Version: 1.0 Date: Tue, 29 Sep 2020 18:19:59 -0700 Message-ID: Subject: [PATCH 1/4] mm/gup_benchmark: Take the mmap lock around GUP To: Andrew Morton , linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, "Eric W . Biederman" , Michel Lespinasse , Mauro Carvalho Chehab , Sakari Ailus 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: To be safe against concurrent changes to the VMA tree, we must take the mmap lock around GUP operations (excluding the GUP-fast family of operations, which will take the mmap lock by themselves if necessary). This code is only for testing, and it's only reachable by root through debugfs, so this doesn't really have any impact; however, if we want to add lockdep asserts into the GUP path, we need to have clean locking here. Signed-off-by: Jann Horn Reviewed-by: Jason Gunthorpe Reviewed-by: John Hubbard Acked-by: Michel Lespinasse --- This series should go on top of the coredump locking series (in particular "mm/gup: Take mmap_lock in get_dump_page()"), which is already in the mm tree. mm/gup_benchmark.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) base-commit: fb0155a09b0224a7147cb07a4ce6034c8d29667f prerequisite-patch-id: 08f97130a51898a5f6efddeeb5b42638577398c7 prerequisite-patch-id: 577664d761cd23fe9031ffdb1d3c9ac313572c67 prerequisite-patch-id: dc29a39716aa8689f80ba2767803d9df3709beaa prerequisite-patch-id: 42b1b546d33391ead2753621f541bcc408af1769 prerequisite-patch-id: 2cbb839f57006f32e21f4229e099ae1bd782be24 prerequisite-patch-id: 1b4daf01cf61654a5ec54b5c3f7c7508be7244ee prerequisite-patch-id: f46cc8c99f1909fe2a65fbc3cf1f6bc57489a086 diff --git a/mm/gup_benchmark.c b/mm/gup_benchmark.c index be690fa66a46..558595610650 100644 --- a/mm/gup_benchmark.c +++ b/mm/gup_benchmark.c @@ -71,6 +71,8 @@ static int __gup_benchmark_ioctl(unsigned int cmd, int nr; struct page **pages; int ret = 0; + bool needs_mmap_lock = + cmd != GUP_FAST_BENCHMARK && cmd != PIN_FAST_BENCHMARK; if (gup->size > ULONG_MAX) return -EINVAL; @@ -80,6 +82,11 @@ static int __gup_benchmark_ioctl(unsigned int cmd, if (!pages) return -ENOMEM; + if (needs_mmap_lock && mmap_read_lock_killable(current->mm)) { + ret = -EINTR; + goto free_pages; + } + i = 0; nr = gup->nr_pages_per_call; start_time = ktime_get(); @@ -119,9 +126,8 @@ static int __gup_benchmark_ioctl(unsigned int cmd, NULL); break; default: - kvfree(pages); ret = -EINVAL; - goto out; + goto unlock; } if (nr <= 0) @@ -149,8 +155,11 @@ static int __gup_benchmark_ioctl(unsigned int cmd, end_time = ktime_get(); gup->put_delta_usec = ktime_us_delta(end_time, start_time); +unlock: + if (needs_mmap_lock) + mmap_read_unlock(current->mm); +free_pages: kvfree(pages); -out: return ret; }