Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp217132iob; Mon, 2 May 2022 17:31:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwEce77MrqaU1up/5qSmkI5msSmUvuQUcGzSxX65TXfpGNWhLvGifpsPsbRmpcNWD9ZU9Qv X-Received: by 2002:a17:902:dac2:b0:15e:90b0:d35b with SMTP id q2-20020a170902dac200b0015e90b0d35bmr11988365plx.169.1651537864140; Mon, 02 May 2022 17:31:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651537864; cv=none; d=google.com; s=arc-20160816; b=OYVXzlW8rsAo/XaYVHiB0YMGLJtZw4OtN0ZSWWD/0UZwjoM52DS1p3nkHi8xfGWFUS m4nKcvS2ujPMAlSM9AgzAGy0FMj+vWSwLkwgwMRoVvrbFBMHk5a5OmLJ+jn06tNkCKN+ jNLzI+Vt3NvgywHNvzKiZxukms2tG3BFhtjimqzkKFk5bd/WLX9piuOLzdOKEKEES6a7 k3YEay0ocjMs/j/jm08in5LFWyAyKOo/h6xTsRDEOUyn/UgzUBzbZOm7kISpUjjTY2/d Cg20vauyfUXPAknCc8b6SauV1eFyGNAit4RLblkeckuFyMruVafeabsWY+SJLu1LCOxe f8ng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=0qHNGKAAJBUM+d1Cqh3z5G6Da++dEnhWdOEu2imSDLo=; b=fSyNcHdGzJ4sgJQopHvL5kKubNzWt1pFySND+16BlNTGtEdcwz777hyielROMPB/TP wJ1LYP1gMTrOGUAWkGPWMpYyBs1vO/xza+TxlBo4c/U2L3xbQlAxXKR2QpqdAc/KweCt pEYiSIE15D7raeaRNLBoV0fP3HIqfOKZvns5tHZsjaMdoXch7kXzCm+ep/0ODerzkG3g BWRbRwvvwSZit6HmB4hm2P6g3j02+8O/6cLbAsprhmwrXp0/H7wkXDcmho3Sftizpdst 9FAYQKFke7Do/ff8GAEM69MyL79/o9HN/wiJE3qxrWS2JFHEJTmoaVPYOep7+yPTZQcA ngCA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=01FZ53fv; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id x18-20020a170902b41200b00153b2d1645csi15124043plr.100.2022.05.02.17.31.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 May 2022 17:31:04 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=01FZ53fv; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 9E7A54133D; Mon, 2 May 2022 17:25:00 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357846AbiD2Ksc (ORCPT + 99 others); Fri, 29 Apr 2022 06:48:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59998 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354933AbiD2KsK (ORCPT ); Fri, 29 Apr 2022 06:48:10 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 78017C1C9D; Fri, 29 Apr 2022 03:43:26 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 00E6160B06; Fri, 29 Apr 2022 10:43:26 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0B0ECC385A7; Fri, 29 Apr 2022 10:43:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1651229005; bh=fCJxO62DgJ7IYqm6IbepVM8R/1npYr0yMSg8doMFr7Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=01FZ53fvJvI4+eSgbZIO6WWgAATmgPMHh1QmfKXcuGO22iQwZH9TSxRTns/Rp87IQ 4qH+ZxvPNvodKs7BVdklMerd/3ItUshjB4dbrprf3g4dw/HoZwOLdOfBQrnG+WVkbE 1geurPD5XCQ6n8DGJ4Kc1vb/nBBA97K1sNNlsL/M= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Greg Kroah-Hartman , Andreas Gruenbacher , Anand Jain Subject: [PATCH 5.15 27/33] gup: Introduce FOLL_NOFAULT flag to disable page faults Date: Fri, 29 Apr 2022 12:42:14 +0200 Message-Id: <20220429104053.124854665@linuxfoundation.org> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220429104052.345760505@linuxfoundation.org> References: <20220429104052.345760505@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andreas Gruenbacher commit 55b8fe703bc51200d4698596c90813453b35ae63 upstream Introduce a new FOLL_NOFAULT flag that causes get_user_pages to return -EFAULT when it would otherwise trigger a page fault. This is roughly similar to FOLL_FAST_ONLY but available on all architectures, and less fragile. Signed-off-by: Andreas Gruenbacher Signed-off-by: Anand Jain Signed-off-by: Greg Kroah-Hartman --- include/linux/mm.h | 3 ++- mm/gup.c | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2858,7 +2858,8 @@ struct page *follow_page(struct vm_area_ #define FOLL_FORCE 0x10 /* get_user_pages read/write w/o permission */ #define FOLL_NOWAIT 0x20 /* if a disk transfer is needed, start the IO * and return without waiting upon it */ -#define FOLL_POPULATE 0x40 /* fault in page */ +#define FOLL_POPULATE 0x40 /* fault in pages (with FOLL_MLOCK) */ +#define FOLL_NOFAULT 0x80 /* do not fault in pages */ #define FOLL_HWPOISON 0x100 /* check page is hwpoisoned */ #define FOLL_NUMA 0x200 /* force NUMA hinting page fault */ #define FOLL_MIGRATION 0x400 /* wait for page to replace migration entry */ --- a/mm/gup.c +++ b/mm/gup.c @@ -943,6 +943,8 @@ static int faultin_page(struct vm_area_s /* mlock all present pages, but do not fault in new pages */ if ((*flags & (FOLL_POPULATE | FOLL_MLOCK)) == FOLL_MLOCK) return -ENOENT; + if (*flags & FOLL_NOFAULT) + return -EFAULT; if (*flags & FOLL_WRITE) fault_flags |= FAULT_FLAG_WRITE; if (*flags & FOLL_REMOTE) @@ -2868,7 +2870,7 @@ static int internal_get_user_pages_fast( if (WARN_ON_ONCE(gup_flags & ~(FOLL_WRITE | FOLL_LONGTERM | FOLL_FORCE | FOLL_PIN | FOLL_GET | - FOLL_FAST_ONLY))) + FOLL_FAST_ONLY | FOLL_NOFAULT))) return -EINVAL; if (gup_flags & FOLL_PIN)