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 8B20EC432BE for ; Fri, 30 Jul 2021 12:23:58 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 0B1BA60F9B for ; Fri, 30 Jul 2021 12:23:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 0B1BA60F9B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 734DC8D0002; Fri, 30 Jul 2021 08:23:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6E2D78D0001; Fri, 30 Jul 2021 08:23:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5AAFC8D0002; Fri, 30 Jul 2021 08:23:57 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0073.hostedemail.com [216.40.44.73]) by kanga.kvack.org (Postfix) with ESMTP id 3E80D8D0001 for ; Fri, 30 Jul 2021 08:23:57 -0400 (EDT) Received: from smtpin11.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id DB50826835 for ; Fri, 30 Jul 2021 12:23:56 +0000 (UTC) X-FDA: 78419170872.11.60C841A Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf25.hostedemail.com (Postfix) with ESMTP id 62742B003225 for ; Fri, 30 Jul 2021 12:23:56 +0000 (UTC) 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-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-328-9T-0BBHpM-ChhT5nlA2oXg-1; Fri, 30 Jul 2021 08:23:54 -0400 X-MC-Unique: 9T-0BBHpM-ChhT5nlA2oXg-1 Received: by mail-wm1-f72.google.com with SMTP id r2-20020a05600c35c2b029023a3f081487so3211160wmq.4 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=q2/s0vKQeTAPWBNCL7pSP5uapR2zYjAuIjT0TMEzt91iozRGfd3L+kFjxtzm76xr/7 h60T32B93CsoZMDq32VbfMwFpckPeiZ0DBck4OPktYidiicSmftbdENAZ35QCUng981T JY89HOzNv0kFo1EJo9hJVDa4LJVEcqSTxXJiBXrWBnr08GwdWS0aB5vTt8s/u+rCzG4V njSZJajuKyQ9hg1pj19n8ENL8F9Z+PWaNy5XY6r8AQWa/r2SIfjE/sKYkXcPuFmmV6qD KHaj+53971qcJq10Qd7WsMOsy+NMEn3VBB4XvUa7GzLds/6ORjGU1Yg8tkrzk6yEp8JU nb+A== X-Gm-Message-State: AOAM532OZyB8CZF1X8qwwH6/DZ5sFw6w+0CVxbbjq6hNNLx1oKNf5wya 4uppLJFjQltlz6CusOUujDL2qLkxVaDwgqCVKasu6LhjNqorbpzHbT5mrXU740lwoClU8nhwCJY JtQMsAH+CUKw= X-Received: by 2002:a05:600c:350a:: with SMTP id h10mr184497wmq.184.1627647833354; 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> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="N/Xcb3Ma"; spf=none (imf25.hostedemail.com: domain of david@redhat.com has no SPF policy when checking 170.10.133.124) smtp.mailfrom=david@redhat.com; dmarc=pass (policy=none) header.from=redhat.com X-Rspamd-Server: rspam02 X-Stat-Signature: zzb13cd351w38wb8w6376mkoy8t5p6a8 X-Rspamd-Queue-Id: 62742B003225 X-HE-Tag: 1627647836-321278 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: 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