From patchwork Fri Jun 29 17:31:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 10497133 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 6763460532 for ; Fri, 29 Jun 2018 17:32:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 53FFD29913 for ; Fri, 29 Jun 2018 17:32:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 47ABF2991F; Fri, 29 Jun 2018 17:32:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D396C29913 for ; Fri, 29 Jun 2018 17:32:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935294AbeF2RcG (ORCPT ); Fri, 29 Jun 2018 13:32:06 -0400 Received: from mail-eopbgr20070.outbound.protection.outlook.com ([40.107.2.70]:26800 "EHLO EUR02-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934162AbeF2RcB (ORCPT ); Fri, 29 Jun 2018 13:32:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/MvmH0J+aHw69dP6CFk7ETSUXPDrnuj0Hl9E9n+cjEc=; b=d7+2O4dOfJzbl8k+vixSZHlq1RYQ0zBE3FpNkVu/+aGhAueqCIjcwYujZnv47XsYb44b43LK8dqHVk3rx6gua/xVqYO9HBLnaVJXpsRnO8F8DNlJJxYCiYq9DKU39MNhdAnb6SEZnupYqv67EVAQQ/Ml209+KAtTHKlF5eXI/lU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jgg@mellanox.com; Received: from mlx.ziepe.ca (174.3.196.123) by AM6PR05MB4454.eurprd05.prod.outlook.com (2603:10a6:209:43::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.906.20; Fri, 29 Jun 2018 17:31:57 +0000 Received: from jgg by mlx.ziepe.ca with local (Exim 4.86_2) (envelope-from ) id 1fYxFO-0006Zg-IM; Fri, 29 Jun 2018 11:31:50 -0600 Date: Fri, 29 Jun 2018 11:31:50 -0600 From: Jason Gunthorpe To: linux-rdma@vger.kernel.org, Dan Williams Cc: Alex Williamson , Michal Hocko , kvm@vger.kernel.org, Haozhong Zhang , Christoph Hellwig , Huy Nguyen , Leon Romanovsky Subject: [PATCH vfio] vfio: Use get_user_pages_longterm correctly Message-ID: <20180629173150.GA24833@ziepe.ca> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [174.3.196.123] X-ClientProxiedBy: VI1PR08CA0228.eurprd08.prod.outlook.com (2603:10a6:802:15::37) To AM6PR05MB4454.eurprd05.prod.outlook.com (2603:10a6:209:43::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 934575b9-9471-4e73-6420-08d5dde6373f X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600026)(711020)(48565401081)(2017052603328)(7153060)(7193020); SRVR:AM6PR05MB4454; X-Microsoft-Exchange-Diagnostics: 1; AM6PR05MB4454; 3:gvkYMtPCig0P8GsUEiIJaF14HapULG7tR4Yawcv8yEkUpvGFuANbb9zXxkm0UvIBq/osca31/mdr2jh2myoU3IsfItUtJITme9qq+5c6N/ZqCWNm5sDIfL2+ExqYSMm1mEQ9aoxl1usVOuBPrLbVPLtBmiR0e8XAOv9ky64xOfVCWKZSuLnlt7QROOKJi8V1rUf54AxZuc2fMhdg5RIzJhCgkBShPUrBxM0T4svEeNZNIsTJhvsRmq0tOs/F0UP+; 25:qCe/TzK6+m1VOBc13tofBgZKE3Qmsl8ZBNSeCqBnyZc7LZzqc9lkJt/COp+5yU7drxI8z+9sBjii4/hyOZpfcnOYm01c3E31KdJrHxtzi7BgcLjVz4ub3L8SoP5X+00JPT65Blr9TmSYv/D5Ycrzyl3cxPgF4/FWsGP8fRAa3wvfGdXb8tUCNqNl8/4s02nvVa0gChmY1YhUfUF94WiqBeD4W5VvUE3ujH4+5ooxYdi8evTTvp0pOKASecUm6tisKV1hMq0fXqJQQOAutyprnc/ytlXTHhasDClGbuA7QP63K4xrQXvcE9foSZqxNlFt+rQ+Hd/Ywi3opQx/Hj916Q==; 31:zjHjdTa70jMnOLzZxRdJpSG0pq3+JZVkaCZqZQ5zzmNYIKVD/nOzUuUDP1Vmgq3jeHruFt9pyKctoDArQjJnWhnGbiyaOOoEVkVciS4pwI5C4oGW1mzCO48aqT0Qwbsh5SAXfuJH93BHb/Oh0iRlrX7Vm6I0XHXywWPoPQDpUGrjdPIaCXcO6K4sGx4ErhGuK+1GzQ2OR3hFUrEtDSo8jXGdoOQO+OXwfuGZwIXGzBM= X-MS-TrafficTypeDiagnostic: AM6PR05MB4454: X-Microsoft-Exchange-Diagnostics: 1; AM6PR05MB4454; 20:20u8tYx/qRpvlT79q3PXmyCiPtMa/EYZ3qvve1vZQ8N2rumzS01TKqRjjHnzqJydjnjfp7CYWKNYj8Q7usV9ZI5A2TqrPgRG0ware7u92lAfj8LjkXKlFYaM7mI/gVjLKU4z4uzkFFD8M04Z1Ia5+gGZ6oxcU93bOVfSustZg/PaMArx42aiN8nF2Dpokjdf52Ncy3aMKmLmqTiJr/dkBtnaWdPAT6iQ7neDGzdmsFDx4R2BFq1Brk/nreXdMGsiX4pW/5D1KSmE9qYg+iMeYlloi/bThockdyMhNwuUeDGhG+WAdsik/SivskpKXAw/IoSc5q1usCagN1j54m7O0ozrnnlM4L3SsYOlXKQPz1ht4jrbf0G/8cXmYXrMkvVCvrvsYGiZ8Fia6OuVfRpp6PRaetKl6KfT2kZtMXxSx1D8ys+MJULoj/Z6PJHpwQCIXD8TlOWB2VarNtp9BqOtyLDIgGJvCOMLA5fJQkAJpTZxnEMQNaa6+x5YGnZQLBUb; 4:ifmp5KQRr3so8HF09bbJ3pB23XdKVWGOn9548i+dQXfY9fh9vzk65Wyfo5Uv23pbpMaQKWkNZysg+pjvyKphA6T4CybaiBrWxoiaJfMoo14vcibHJSat8XNEJ0RwaF5wUXRvYl83JuHpg2RTkXkuXQfAc7DnBzJR5664phSiaVGgPfPErRf0sXYd0Cm5uryGyQgCbzRjcfoygKF7jnYoL0fabtsEMHaVP/EynMs8ZVsJa0iaJjV3g/jbLSY+gVMO/Q39lL00VuE3n2RegMLdbBt9s6m4F7y2YxRRgumgIIBNStFAu+eosRomoqc6di6+ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(9452136761055); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123562045)(20161123558120)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:AM6PR05MB4454; BCL:0; PCL:0; RULEID:; SRVR:AM6PR05MB4454; X-Forefront-PRVS: 0718908305 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(396003)(376002)(39860400002)(366004)(136003)(189003)(199004)(33656002)(26005)(46656002)(186003)(66066001)(47776003)(9686003)(107886003)(57986006)(6916009)(106356001)(5660300001)(105586002)(4326008)(81166006)(305945005)(7736002)(23726003)(81156014)(8676002)(8936002)(83796002)(6116002)(1076002)(3846002)(33896004)(386003)(486006)(476003)(478600001)(53936002)(52116002)(9786002)(50466002)(9746002)(68736007)(86362001)(97736004)(69596002)(316002)(58126008)(122856001)(54906003)(2906002)(36756003)(16586007)(14444005)(18370500001)(24400500001)(42262002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR05MB4454; H:mlx.ziepe.ca; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM6PR05MB4454; 23:owk8LWI+bjxluRLfGPtRozW/QH4a1YH0TykZuLf2c?= =?us-ascii?Q?jm4Te27LddWoUphJenBBVaiy20Gh09P4rckF+KI1KB5h1pTItATv03TerjUv?= =?us-ascii?Q?R3Zltbw3CAFRSiWEn/HqZ+LveI+mifn7sTuU9aQYsN4BkSRTRT6EJSo+C7tE?= =?us-ascii?Q?vbhE9MOjBVvBCxhybhZiBHkq2hVt1953BvypO/YbUyNoCflCC8NFX6bAWS/m?= =?us-ascii?Q?8dQ3U6LGD7Wxhy843BAZB/0iHJH/Mh2VgFkdAl79p6RnWDYoYAhmqa/z5h8G?= =?us-ascii?Q?rijE1qYrAcTwFw2GeQoQ6YuhDJlxQQ36wJ0OKAIw6OvmIK9doXLhzVlD68u3?= =?us-ascii?Q?axWfivL2swhBMQgVhGAjnRt/5ybuS0SnPxqrWLAMfT3VQpM/sp3MKjH2vizB?= =?us-ascii?Q?VVlYh0VvfUiZRHEiHQW+kEvtjchcrIQgo8Alb8PMDGRHoEa2/5qmND0VlEX8?= =?us-ascii?Q?cAcaRETk8dVwLd8zTpy8YU6alwIz/KevYRGCUKgEy6NFmPxloZxp+PWRUAhB?= =?us-ascii?Q?SwzPoUNl+3Bm1DsKxdaF5TuiDhivAyQ2IUxjhMhTmiWJmowfH7jfrnZmj//r?= =?us-ascii?Q?FuamF+1DHIaLM9+EMZR+OCRJluSi5kc3f8bJFkgKVMiGdS4eek40VXYmAlRx?= =?us-ascii?Q?hndMzLiuBKhdolnPqSSQX4oJb5Ke5RNsypqTaoWPdjnD9KJz8YlOiJuM442v?= =?us-ascii?Q?oMpVtovz5jA6BJcGd+X06pHyxmxpBwp7bB3W6eacQ3NkyKbcxMk5OvnGlj7P?= =?us-ascii?Q?v+RjMvYnSclq0DNu8nqDfD53/x3q0IRzqI7AJeDIU3/mWbOftsDu+11V1hMj?= =?us-ascii?Q?74641aYMB8KYiVID24csOkMiX4RzWy/1+o9+mIO9QL2SPmq5E3yvMaEBteRp?= =?us-ascii?Q?7mFHU0BArE8aMtPbJdvG3TxmoF26nHUiZtAsHFRz1xxSCShr3AB32R8gt00B?= =?us-ascii?Q?OJuAi6b/L0lfgFo5Od2jQ6nU7r5lzxdxY3Rkn2wlH/ezbPCjGeYxoah6Hld+?= =?us-ascii?Q?R29y4vSHzEk5Xkr5xBmL5j0mAvZ7z0YoDnSB5coRj5xZ2xmrCOxpE/S2csOz?= =?us-ascii?Q?2F9XjFYkXssBrH87jc01xjG23/wiayfjUd2whkpm4aXXcJQTWAFMe/j20xve?= =?us-ascii?Q?Sca0F+AVN7es/nxnIBdaKF9jv3GDd3qiO5F+x9dpuMleJtS6PHBdZNXWRx/M?= =?us-ascii?Q?27UK9xbmGChkXAOsI5p6cOOSJ3Oh67iAxjbJ2y05AM6YvQ3NeSVcmZuHXj/n?= =?us-ascii?Q?Ffx+BnHMM4Uzz968CWHewX0javkLztl9ld1gppROtocBIbeua3knz/s8knZu?= =?us-ascii?Q?5guvEu05xYV8VCMiaREhjA=3D?= X-Microsoft-Antispam-Message-Info: QhdPNiFZjCZ/pGRtV7+RSEWPbN+8ZRW7R7X2ZOXRpbVpE0Bjp7sYauSSz7KAhYAqfRDELTjWPEqo6+Raq23d6uS9ExRdg8OcIawNB0dh++c66oM6cvIaEMOa5OPyjEaWsmsSn5x5ow1F7NTUOEHQW2/4do0CPasKayNBJDQNwQs6MAx7cDCAUPoRphfkNMRnk5kJGX3jEwUAM7juOurkHpEHH+duvALBsYGQKM4oGjKX8Nz/C7EeFZewHBenyM5vGJkOx6moUy4PoyiVryO8KR3cuqnRkw2wjpCIZKVJAClVI8da0SiNUA8XXo5LncsfvXmDZjhwlF3wMzguHabqWZtefUqe30G5Cw7FRr0ugp4= X-Microsoft-Exchange-Diagnostics: 1; AM6PR05MB4454; 6:Ck70I6MAwqz1U0Nmny5jbwL00Xlv0iUO3Ct3MzdCdl+pGhXLT2NP4/lpNA52VJfRKoAtgPI9ranMT+KSRjDuH4i4Lq4gwWIJq14HzZvxa5qiXRUzIVRj0Q7jU0X4TL+j3uyHF06AhO9F4klM3HB+ah/MmXVZtXplXlZGmhpzRnl3wayeS70DM42HuHdQQrDOkBTKblIe5MalnxW0LcoaHKC52nq83ZYmdBhq+cU1DUfhNKDgeMGV6kOzQEoQcu28Gd6D10D8AsFjwDhcGaV+8fiTJ84C0QeTfMxOs2ESjSOP9PPKsWnFWiulokAATncFZDn9i0YZuQnWJDUMWRjd3osSU5pQwj1obfkGM8CdNaa7gYpRHVQgn1jBzBfkSOMzGP2HuulYZMC+uul6stGfPZSLZ1CWTJ//qlXkgUqDly0mwuCCxgpN415Vm6a6eYO9AbbiNZFee3xLVEHdaShQAw==; 5:JkM2i3aGmwkYQJ1oaORV8k88b0qorB7NjAOrjH9EaqBOFbrL1Ptp7O9VhlOG3Pa3NpMFCM5/40y6b6cLGMMkO/xwLSUz7voVP3JKyxzMQf+yMJnY71A86u2xbRXTZWakrZJ7LxXWGfit3xAwnojvyaF7AdFcWOaEY8r9ub7aRgM=; 24:E0OBF/vv9e9AIKtwaidZYFba+4t+sApbyokBzV8OMs2hS+T1r0t1EVGdOuNWHXkQSYA0vuc7ESzo/iXgEbWH+/1janNGTd2eHI9Uq8uhFwc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM6PR05MB4454; 7:Cd6dFDD6/FxpVonTXsk+A5g8n9TabktKBf1DWFeP112wNaLSAVzEFdVvv9FwRHtwgfQDfmtoEcTuUtUolvgG55q/wYHygmT6McdcvXszJurmxfz/UvU9GbH3oTueWILMomZSfP318CAkab+nA2Jjwot+/lseLbFH/5MMGjNqPuNWmATPI/O/jFRis5819jPmJu5csx4rgJlWu5xf2HoPA7LjCpkXrv3DK9fBzPYZMWcrnXaGgbzqG7k16oWsdYNR X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jun 2018 17:31:57.9879 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 934575b9-9471-4e73-6420-08d5dde6373f X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR05MB4454 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The patch noted in the fixes below converted get_user_pages_fast() to get_user_pages_longterm(), however the two calls differ in a few ways. First _fast() is documented to not require the mmap_sem, while _longterm() is documented to need it. Hold the mmap sem as required. Second, _fast accepts an 'int write' while _longterm uses 'unsigned int gup_flags', so the expression '!!(prot & IOMMU_WRITE)' is only working by luck as FOLL_WRITE is currently == 0x1. Use the expected FOLL_WRITE constant instead. Fixes: 94db151dc892 ("vfio: disable filesystem-dax page pinning") Cc: Signed-off-by: Jason Gunthorpe --- drivers/vfio/vfio_iommu_type1.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) I noticed this while trying to review some RDMA code that was touching our get_user_pages_longterm() call site and wanted to see what others are doing.. If someone can explain that get_user_pages_longterm() is safe to call without the mmap_sem held I'd love to here it! The comments in gup.c do seem to pretty clearly state the __get_user_pages_locked() called internally by get_user_pages_longterm() needs mmap_sem held.. This is confusing me because this is the only get_user_pages_longterm() callsite that doesn't hold the mmap_sem, and if it really isn't required I'd like to remove it from the RDMA code as well :) Thanks, Jason diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c index 2c75b33db4ac19..2612d63b1ba989 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -345,16 +345,17 @@ static int vaddr_get_pfn(struct mm_struct *mm, unsigned long vaddr, struct vm_area_struct *vmas[1]; int ret; + down_read(&mm->mmap_sem); if (mm == current->mm) { - ret = get_user_pages_longterm(vaddr, 1, !!(prot & IOMMU_WRITE), - page, vmas); + ret = get_user_pages_longterm( + vaddr, 1, (prot & IOMMU_WRITE) ? FOLL_WRITE : 0, page, + vmas); } else { unsigned int flags = 0; if (prot & IOMMU_WRITE) flags |= FOLL_WRITE; - down_read(&mm->mmap_sem); ret = get_user_pages_remote(NULL, mm, vaddr, 1, flags, page, vmas, NULL); /* @@ -368,8 +369,8 @@ static int vaddr_get_pfn(struct mm_struct *mm, unsigned long vaddr, ret = -EOPNOTSUPP; put_page(page[0]); } - up_read(&mm->mmap_sem); } + up_read(&mm->mmap_sem); if (ret == 1) { *pfn = page_to_pfn(page[0]);