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 X-Spam-Level: X-Spam-Status: No, score=-18.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A472DC4320A for ; Fri, 30 Jul 2021 12:23:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8E7F26103B for ; Fri, 30 Jul 2021 12:23:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238788AbhG3MYB (ORCPT ); Fri, 30 Jul 2021 08:24:01 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:52236 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230355AbhG3MYA (ORCPT ); Fri, 30 Jul 2021 08:24:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1627647835; h=from:from: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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=o099h3eyKLatB2qTEqr+nt7BhMYNRVj70jWcHx8N7L4=; b=N/Xcb3MabH+IcDbm09v1Ypoue4ZUvR9YVI9Q9qEQGO3gWqRIj6wnQ42CNgwLRJb/g/tbeJ rWpoyGJ/iFXmiuNs2bWX4NSRQBnfVkaIv5eRD9H4zlel4TO3/GqPLD+mjjkBbnJ7wiQct6 FFrhK8TXrjS4vtpCPHJxyCGO8bMYK0s= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-225-vHeLarpSO6yLM1D2R2501g-1; Fri, 30 Jul 2021 08:23:54 -0400 X-MC-Unique: vHeLarpSO6yLM1D2R2501g-1 Received: by mail-wr1-f72.google.com with SMTP id s22-20020adf97960000b02901535eae4100so3178291wrb.14 for ; Fri, 30 Jul 2021 05:23:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=o099h3eyKLatB2qTEqr+nt7BhMYNRVj70jWcHx8N7L4=; b=H+47jQLXKm159vReerCvCF/rFN3Cpo/uWscy3gfZJDcXBJ15L98vaNX9VBHTyVf6Ml kxaDFv6uq74GqkCs8/bnWcWKyqTXKxQimN07XzX8G3z3DVRYYXPvwBHTJpWJt6aBqtU9 P0yombWMgbAbuMiojxi6y7DJ93bJ3kLzLuFp225oW1B07Q+VKw3qPfa1tuDV8SCgaPCT yBtVctHE/ii2Hl2xvIo2vChCfgtfV1mjhJ8qIklRzbrvY1abPY2H/2zioNA2TG6takmt pyduVEXPp0TbaWE1cfMNU3jbcQOC1rWBqlR2fm8Rh30nMi0qqERXx+x9eDV2sjXkxbTp kZOw== X-Gm-Message-State: AOAM532M82FkH5UIQOljzA15JnLhMJs5RuB7hDIW1YdjLETJJJv1THnb FbuzP/sz1BW+fzWot+yajtboTbhd3cvvm2zAO4YzSj64UZbyD3UjYgRctcZBWCGwomV/ahvAqzR Llbaa2F7dXiq46/S2D6ONb4M8 X-Received: by 2002:a05:600c:350a:: with SMTP id h10mr184481wmq.184.1627647833323; Fri, 30 Jul 2021 05:23:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy7H0CLmKXC7bceTQEaG3gTwuLm+5FooguUuol7APR+1g3WafQj2fDWXl80uW7T1OCOEd1scw== X-Received: by 2002:a05:600c:350a:: with SMTP id h10mr184451wmq.184.1627647833106; Fri, 30 Jul 2021 05:23:53 -0700 (PDT) Received: from ?IPv6:2003:d8:2f0a:7f00:fad7:3bc9:69d:31f? (p200300d82f0a7f00fad73bc9069d031f.dip0.t-ipconnect.de. [2003:d8:2f0a:7f00:fad7:3bc9:69d:31f]) by smtp.gmail.com with ESMTPSA id k7sm1550622wms.48.2021.07.30.05.23.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Jul 2021 05:23:52 -0700 (PDT) Subject: Re: [PATCH v1] mm/madvise: report SIGBUS as -EFAULT for MADV_POPULATE_(READ|WRITE) To: linux-kernel@vger.kernel.org, akpm@linuxfoundation.org Cc: linux-mm@kvack.org, Linux API , Arnd Bergmann , Michal Hocko , Oscar Salvador , Matthew Wilcox , Andrea Arcangeli , Minchan Kim , Jann Horn , Jason Gunthorpe , Dave Hansen , Hugh Dickins , Rik van Riel , "Michael S . Tsirkin" , "Kirill A . Shutemov" , Vlastimil Babka , Richard Henderson , Ivan Kokshaysky , Matt Turner , Thomas Bogendoerfer , "James E.J. Bottomley" , Helge Deller , Chris Zankel , Max Filippov , Mike Kravetz , Peter Xu , Rolf Eike Beer , Ram Pai , Shuah Khan References: <20210726154932.102880-1-david@redhat.com> From: David Hildenbrand Organization: Red Hat Message-ID: Date: Fri, 30 Jul 2021 14:23:51 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210726154932.102880-1-david@redhat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Andrew, sorry for not CCing you, absolutely no clue why I accidentally dropped you. Can you give this patch a churn? It would be great if we could get that into 5.14, so we don't have to deal with differing behavior between Linux versions. Cheers! On 26.07.21 17:49, David Hildenbrand wrote: > Doing some extended tests and polishing the man page update for > MADV_POPULATE_(READ|WRITE), I realized that we end up converting also > SIGBUS (via -EFAULT) to -EINVAL, making it look like yet another > madvise() user error. > > We want to report only problematic mappings and permission problems that > the user could have know as -EINVAL. > > Let's not convert -EFAULT arising due to SIGBUS (or SIGSEGV) to > -EINVAL, but instead indicate -EFAULT to user space. While we could also > convert it to -ENOMEM, using -EFAULT looks more helpful when user space > might want to troubleshoot what's going wrong: MADV_POPULATE_(READ|WRITE) > is not part of an final Linux release and we can still adjust the behavior. > > Fixes: 4ca9b3859dac ("mm/madvise: introduce MADV_POPULATE_(READ|WRITE) to prefault page tables") > Cc: Arnd Bergmann > Cc: Michal Hocko > Cc: Oscar Salvador > Cc: Matthew Wilcox (Oracle) > Cc: Andrea Arcangeli > Cc: Minchan Kim > Cc: Jann Horn > Cc: Jason Gunthorpe > Cc: Dave Hansen > Cc: Hugh Dickins > Cc: Rik van Riel > Cc: Michael S. Tsirkin > Cc: Kirill A. Shutemov > Cc: Vlastimil Babka > Cc: Richard Henderson > Cc: Ivan Kokshaysky > Cc: Matt Turner > Cc: Thomas Bogendoerfer > Cc: "James E.J. Bottomley" > Cc: Helge Deller > Cc: Chris Zankel > Cc: Max Filippov > Cc: Mike Kravetz > Cc: Peter Xu > Cc: Rolf Eike Beer > Cc: Ram Pai > Cc: Shuah Khan > Signed-off-by: David Hildenbrand > --- > mm/gup.c | 7 +++++-- > mm/madvise.c | 4 +++- > 2 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/mm/gup.c b/mm/gup.c > index 42b8b1fa6521..b94717977d17 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -1558,9 +1558,12 @@ long faultin_vma_page_range(struct vm_area_struct *vma, unsigned long start, > gup_flags |= FOLL_WRITE; > > /* > - * See check_vma_flags(): Will return -EFAULT on incompatible mappings > - * or with insufficient permissions. > + * We want to report -EINVAL instead of -EFAULT for any permission > + * problems or incompatible mappings. > */ > + if (check_vma_flags(vma, gup_flags)) > + return -EINVAL; > + > return __get_user_pages(mm, start, nr_pages, gup_flags, > NULL, NULL, locked); > } > diff --git a/mm/madvise.c b/mm/madvise.c > index 6d3d348b17f4..5c065bc8b5f6 100644 > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -862,10 +862,12 @@ static long madvise_populate(struct vm_area_struct *vma, > switch (pages) { > case -EINTR: > return -EINTR; > - case -EFAULT: /* Incompatible mappings / permissions. */ > + case -EINVAL: /* Incompatible mappings / permissions. */ > return -EINVAL; > case -EHWPOISON: > return -EHWPOISON; > + case -EFAULT: /* VM_FAULT_SIGBUS or VM_FAULT_SIGSEGV */ > + return -EFAULT; > default: > pr_warn_once("%s: unhandled return value: %ld\n", > __func__, pages); > -- Thanks, David / dhildenb