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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1242C43334 for ; Tue, 12 Jul 2022 17:04:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8104E9400B3; Tue, 12 Jul 2022 13:04:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7BF6D940063; Tue, 12 Jul 2022 13:04:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 689AA9400B3; Tue, 12 Jul 2022 13:04:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 594C8940063 for ; Tue, 12 Jul 2022 13:04:42 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay13.hostedemail.com (Postfix) with ESMTP id 2F6CF60BD9 for ; Tue, 12 Jul 2022 17:04:42 +0000 (UTC) X-FDA: 79679072004.27.EF01AB6 Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) by imf18.hostedemail.com (Postfix) with ESMTP id CCE3A1C0072 for ; Tue, 12 Jul 2022 17:04:41 +0000 (UTC) Received: by mail-lf1-f45.google.com with SMTP id a9so14979862lfk.11 for ; Tue, 12 Jul 2022 10:04:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=xirVZQi4/Rn9raXFS5zkMYYSI5CRi816R1gYtGmE3bA=; b=tBQqShKbTvHXHbAYDzM+CNMmI6+l0tl34y69dUNTnG4xnkVbOPuAmTJm6kC4o5Op6G yXDAdwx9ktBFRxPJtrrpmpWqBAIbPu4w//Q2pV6X9fw98XZhflNgAj7RNjifKDz+DEqW 3gM838M1I7N8aTMhjQ2RfxiRVBQ2ADaZP8Sod3ATbQaFU6fd1AvPp4fqUi3udTKaGqXi vTLu/CjtKem8i7zParwFU+XFA9b/uHC46owYIKuofX7ttxxCIrPEFQ9QH7VpvCHEJSZ8 g1V8Vb6WgrzbVL9DhKKfWWZ4gTto3/f0JZWZUNl4wtdvWvP2Ee4H1krfosHO4VjUK9O3 svyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=xirVZQi4/Rn9raXFS5zkMYYSI5CRi816R1gYtGmE3bA=; b=cy5lwRAytquYQna+DvVeikTeJve6DEfm+kE04No/E0xnBXZoCI7mtLLbL1d1mxV3Vv aE15eI9CYjoq8EbI3qqwNATrBtvEuJq107m3ida42FkotlMvq5PRTpX1sqhcVmiYqj/G FuGH+aPtMpDwk8W4KnKnUbWNDSCczMrsGeRrdsxqnZHY77aly9yY7Vw07rmm/94P6OKr jLKV/7T6bcX4AtqXMKEiTkymIuLJCGifK0Hyp+K6ARN2eIoVGdRXvpkA/MymI8/AAoJ6 p5I/qU2HXw2PilRVJgl03WvkQXp4rQSYq52b47a3OiLMbe1QxvR3Lzt+2c30iI04ZLlv kHMA== X-Gm-Message-State: AJIora/4X5u6lCfV0euD7ldzp/X1tqURqLhb633YzVRLsdPyit9QYd+a Wo1aCeYa/7HtIsQfrHspcOOsKLCnSxMcZrkwPLTs9Q== X-Google-Smtp-Source: AGRyM1uvtgdV9DafdzQ2FaV87vUIm0iyQ7ArP3pz0QYRjBDVcXqv9kbO0Et610aRRp5So1WDaIoP8Wm8YzeAvg855B8= X-Received: by 2002:a05:6512:e88:b0:489:d187:9b3c with SMTP id bi8-20020a0565120e8800b00489d1879b3cmr9854310lfb.669.1657645480022; Tue, 12 Jul 2022 10:04:40 -0700 (PDT) MIME-Version: 1.0 References: <20220711165906.2682-1-namit@vmware.com> In-Reply-To: <20220711165906.2682-1-namit@vmware.com> From: James Houghton Date: Tue, 12 Jul 2022 10:04:28 -0700 Message-ID: Subject: Re: [PATCH] userfaultfd: provide properly masked address for huge-pages To: Nadav Amit Cc: Andrew Morton , linux-mm@kvack.org, Nadav Amit , Peter Xu , David Hildenbrand , Mike Rapoport , Jan Kara , Andrea Arcangeli , stable@vger.kernel.org Content-Type: text/plain; charset="UTF-8" ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=tBQqShKb; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf18.hostedemail.com: domain of jthoughton@google.com designates 209.85.167.45 as permitted sender) smtp.mailfrom=jthoughton@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1657645481; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=xirVZQi4/Rn9raXFS5zkMYYSI5CRi816R1gYtGmE3bA=; b=T6uC/ynYxgL7dONBdY61DZFpV8Yo0+2oAxCLasVWjy4uoBuRzzX/Y852kgyMYypynnTcSU b9J2KDVJ9qD0wCkn86TzFwzWm1CPKPplLvy1v++vlMj3emAjzvWRHg/UFP0F4yJklYh8xj 63g5KdWftiGsXR3KXfQNJbbmfUAc3Xw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1657645481; a=rsa-sha256; cv=none; b=PF4YKBPbCfzDGjYBQ48eXlP1QhXQkt/5A+few/z+iMnrVNeWIK491ebMoJTcKjz8KBTpCq jRAhDPCWLyYGuu4JD9KI2njSdXKbcdcHLx2gE08h/nei5P5awZR/2iCb9Ruhy5PKiIzOQh eWD8adPTL3Y9djZZ95lemla0Hr6AfN8= X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: CCE3A1C0072 X-Stat-Signature: hifwtbyppm3r7kz5dy967uymucu4i65k Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=tBQqShKb; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf18.hostedemail.com: domain of jthoughton@google.com designates 209.85.167.45 as permitted sender) smtp.mailfrom=jthoughton@google.com X-Rspam-User: X-HE-Tag: 1657645481-533363 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 Mon, Jul 11, 2022 at 5:33 PM Nadav Amit wrote: > > From: Nadav Amit > > Commit 824ddc601adc ("userfaultfd: provide unmasked address on > page-fault") was introduced to fix an old bug, in which the offset in > the address of a page-fault was masked. Concerns were raised - although > were never backed by actual code - that some userspace code might break > because the bug has been around for quite a while. To address these > concerns a new flag was introduced, and only when this flag is set by > the user, userfaultfd provides the exact address of the page-fault. > > The commit however had a bug, and if the flag is unset, the offset was > always masked based on a base-page granularity. Yet, for huge-pages, the > behavior prior to the commit was that the address is masked to the > huge-page granulrity. > > While there are no reports on real breakage, fix this issue. If the flag > is unset, use the address with the masking that was done before. > > Fixes: 824ddc601adc ("userfaultfd: provide unmasked address on page-fault") > Reported-by: James Houghton > Cc: Peter Xu > Cc: David Hildenbrand > Cc: Mike Rapoport > Cc: Jan Kara > Cc: Andrea Arcangeli > Cc: > Signed-off-by: Nadav Amit Reviewed-by: James Houghton Thanks! > --- > fs/userfaultfd.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c > index e943370107d0..de86f5b2859f 100644 > --- a/fs/userfaultfd.c > +++ b/fs/userfaultfd.c > @@ -192,17 +192,19 @@ static inline void msg_init(struct uffd_msg *msg) > } > > static inline struct uffd_msg userfault_msg(unsigned long address, > + unsigned long real_address, > unsigned int flags, > unsigned long reason, > unsigned int features) > { > struct uffd_msg msg; > + > msg_init(&msg); > msg.event = UFFD_EVENT_PAGEFAULT; > > - if (!(features & UFFD_FEATURE_EXACT_ADDRESS)) > - address &= PAGE_MASK; > - msg.arg.pagefault.address = address; > + msg.arg.pagefault.address = (features & UFFD_FEATURE_EXACT_ADDRESS) ? > + real_address : address; > + > /* > * These flags indicate why the userfault occurred: > * - UFFD_PAGEFAULT_FLAG_WP indicates a write protect fault. > @@ -488,8 +490,8 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason) > > init_waitqueue_func_entry(&uwq.wq, userfaultfd_wake_function); > uwq.wq.private = current; > - uwq.msg = userfault_msg(vmf->real_address, vmf->flags, reason, > - ctx->features); > + uwq.msg = userfault_msg(vmf->address, vmf->real_address, vmf->flags, > + reason, ctx->features); > uwq.ctx = ctx; > uwq.waken = false; > > -- > 2.25.1 >