Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp5669892rwr; Mon, 24 Apr 2023 07:27:35 -0700 (PDT) X-Google-Smtp-Source: AKy350bBbpxMH52pX6X9oTs6rJRm9SDNXaZW6IT5p3BI79ue4YnHUJSLoTuNQV370deSCRnCBEKJ X-Received: by 2002:a17:903:d3:b0:1a6:83fa:b370 with SMTP id x19-20020a17090300d300b001a683fab370mr12878922plc.2.1682346455216; Mon, 24 Apr 2023 07:27:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682346455; cv=none; d=google.com; s=arc-20160816; b=rgA304QpsaZjs6jaVKycsEntC7IWzjI4iozBCzYv3pNiwDXm2LUO7+6tdb264Km4M8 vJ1YpNUUDbQH4MxU6hF86q8FYYEyK8FtSbBYNLbsLNSvhxEtNkNliOh1Y0NBCGhYn5Bm 75zu87+l7Nto0qkKKFSDympeCVveu3gwQ0vJrSlLY5zMdSKRTwnHBKb4fzAug0poyfGR Cy+tMtafZqtbH9maJ6/3CdQ/BCtxPVSiEjPBuy/vNjmn2AaS8YE1/wPKM+BJxXaWk5aH i2Nl5TF00IFA1PnjSTRp3btnnMoCWMGEHB497imSgOGNZ86PIPT1+hX63wGMiYdkJep0 WDAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=enbgg+lqaw2zyPJZ1pbEEFHlLXGIOHAiWtJzwllHKYk=; b=Tc3dBEQdsnyJ9On9D328fBk4PFrAW6VqPXmKO58fv+d7y5xJsp9bnmcubz7H5Y7ix9 D00ovkr8g4CUJpsmbiUSD0GKPfTcMxtP6meK3+7r5oPFoDWRbB9N0dIwLADtNnsfC68f ecpquSpZKJcc2XhdtcmPNDzFyYvRYkx9QVfAtiua/LK1CzF04qyNlvXxpOlWQMKDj5c7 PH30PaQlxwzft7FC/i3HFgduKINqweST4cHFhictEDgXStrQvRSZyOaHTAmC9zXQRV/W TnkokZydYnzyUSwKyjPDoawdo+7e65l31aZ/Q3TOJa9jwHa3/AlcYhCTMbx7YpNxuWQe E0VA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="d/qZRyT5"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h15-20020a170902680f00b001a504d719d6si10639345plk.551.2023.04.24.07.27.20; Mon, 24 Apr 2023 07:27:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="d/qZRyT5"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229929AbjDXOWA (ORCPT + 99 others); Mon, 24 Apr 2023 10:22:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52126 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231694AbjDXOV6 (ORCPT ); Mon, 24 Apr 2023 10:21:58 -0400 Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCC927AB8 for ; Mon, 24 Apr 2023 07:21:54 -0700 (PDT) Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-4ecb7fe8fb8so12109e87.0 for ; Mon, 24 Apr 2023 07:21:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1682346113; x=1684938113; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=enbgg+lqaw2zyPJZ1pbEEFHlLXGIOHAiWtJzwllHKYk=; b=d/qZRyT5eP+jU3o4eFNHhYxVnfxA6MScMHl7EjDAUKW8eeAqkTfrkneA4vEc9uBXwZ h4ZGQJRzWcXcoXy42qQQAV1i4o0OUT7utHIj2IoI7VFMMkb3DSzd4yHsNk9rQKJ+Q0Ba nMOvmgEa5xIOvPXkoUS0vb2tva2pNXVvMgkmCungv6F2+M0Fwnc1Jl7fLI7rLZaZWeiU o/IcRqlPrSKXcDkM6nZYnx9nYtaTtj80DS33Cf5UiYjI54XuWOklqvx5bm9Ikxcy3ndx QrzsivjDGtZL5voUC900DRzJleGdv4R1Yf5ZDQmV5GoyD/NumwZc188PEi5kVsnKNkNp Ri3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682346113; x=1684938113; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=enbgg+lqaw2zyPJZ1pbEEFHlLXGIOHAiWtJzwllHKYk=; b=UyKtkwymbuWXJDM0gq6ZBJEwdFruEAi+V+Yp9qhISDm5Ip5B781y/boM9HMlSuwu9p +kwj+OIU+MpGbg5v2HQ8aRZMwz2WUuFqPrXePtLAkL67prZhTW0iQkq1ndlc2sziCiw2 YzBtp5iwSXpcwoynBTCSaNxyW+cjPuJ0vGEydLn06Sdx/zAKZ3aVA01ZZawjsqiV2Js/ sRCi80Wd1X2n5VSrROua9BsLCx0KATfhV886nKIY0/3rRVgfKwEiQnbujKgM9v+mwln6 kR4pre1FIQp9gmHICv1IIc/8rw+wy/GLWl29X5SJo23wv4q4swYZcJh5GWvdNtmR6Vub pFxg== X-Gm-Message-State: AAQBX9cL/ZDcizJMGMEfmsjFjT4tNKbRO0mRcqri7GO57cU6KdQYbdcU /b2LafncTaMlfrOGJpGIHxTc1szrydE2NAvEQUNk2Q== X-Received: by 2002:a05:6512:39c4:b0:4ef:ef1d:a97b with SMTP id k4-20020a05651239c400b004efef1da97bmr110782lfu.0.1682346112665; Mon, 24 Apr 2023 07:21:52 -0700 (PDT) MIME-Version: 1.0 References: <000000000000d0737c05fa0fd499@google.com> In-Reply-To: From: Dmitry Vyukov Date: Mon, 24 Apr 2023 16:21:40 +0200 Message-ID: Subject: Re: [syzbot] [fs?] [mm?] KCSAN: data-race in __filemap_remove_folio / folio_mapping (2) To: Matthew Wilcox Cc: syzbot , djwong@kernel.org, hch@infradead.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-xfs@vger.kernel.org, syzkaller-bugs@googlegroups.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL 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 On Mon, 24 Apr 2023 at 16:10, Matthew Wilcox wrote: > > On Mon, Apr 24, 2023 at 03:49:04PM +0200, Dmitry Vyukov wrote: > > On Mon, 24 Apr 2023 at 15:21, Matthew Wilcox wrote: > > > > > > On Mon, Apr 24, 2023 at 09:38:43AM +0200, Dmitry Vyukov wrote: > > > > On Mon, 24 Apr 2023 at 09:19, syzbot > > > > wrote: > > > > If I am reading this correctly, it can lead to NULL derefs in > > > > folio_mapping() if folio->mapping is read twice. I think > > > > folio->mapping reads/writes need to use READ/WRITE_ONCE if racy. > > > > > > You aren't reading it correctly. > > > > > > mapping = folio->mapping; > > > if ((unsigned long)mapping & PAGE_MAPPING_FLAGS) > > > return NULL; > > > > > > return mapping; > > > > > > The racing write is storing NULL. So it might return NULL or it might > > > return the old mapping, or it might return NULL. Either way, the caller > > > has to be prepared for NULL to be returned. > > > > > > It's a false posiive, but probably worth silencing with a READ_ONCE(). > > > > Yes, but the end of the function does not limit effects of races. I > > I thought it did. I was under the impression that the compiler was not > allowed to extract loads from within the function and move them outside. > Maybe that changed since C99. > > > to this: > > > > if (!((unsigned long)folio->mapping & PAGE_MAPPING_FLAGS) && folio->mapping) > > if (test_bit(AS_UNEVICTABLE, &folio->mapping->flags)) > > > > which does crash. > > Yes, if the compiler is allowed to do that, then that's a possibility. C11/C++11 simply say any data race renders behavior of the whole program undefined. There is no discussion about values, functions, anything else. Before that there was no notion of data races, so it wasn't possible to talk about possible effects and restrict them. But I don't think there ever was an intention to do any practical restrictions around function boundaries. That would mean that inlining can only run as the latest optimization pass, which would inhibit tons of optimizations. Users would throw such a compiler away.