Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp98872ybt; Thu, 18 Jun 2020 19:31:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzxj2JA84M/GcI9eWH65qj0LalSwHrSyqPj4bwQUZSCW6V1ewCPrkVsYzVXhXKwuFTTnylt X-Received: by 2002:a17:906:6c98:: with SMTP id s24mr1652106ejr.438.1592533904135; Thu, 18 Jun 2020 19:31:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592533904; cv=none; d=google.com; s=arc-20160816; b=aBMopv4WfdktbfBqELDAwDQEzP2mjFUkCO+SgEQKlmcMmr7ngLyoSK33zQeYQFDEWd ImgPCLUSGJIx13YarYkcl3nWU5hywdj0lPswC34O93WdLfSbPw9gnIPwWga35fr2NX3c HQZF79CV4GXKPWxN5yeAaYGqvoUjXuk8eHA0wSzJJ+IocRrrth54vct4A4tgklmbzR2j it9vodMGtc/Ee48chCCl9uFpsqkAgOWSzTwwTG6a6+ICHazlgrx1AvPlzjcCGdo8l39g EnZABgVksKPHJx1Z4CEGHhyn1c7zLTntAGNNO2azWDNZJla0KZgLl8hpxoVrNlz8yCQ6 mxpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:to:from:cc:in-reply-to:subject:date:dkim-signature; bh=ZPjvsjb4L/XUk4DOVwf5+goE/PhKwDE2Q9XXqApM3gE=; b=p1MC4CaO6a1s3toV5I9Ij9VQ25oaMc6y0dDlhgIm2Ze7OWIkoSK0vMlg6eZ8TNF545 0qWO2pPoIDrGVQZlvQE97hStf9WlLAQ6P9wWyu62jWRlKt+VnLCzBNiRGgVkpSows5Gb JgSTmeabx8VhlJMXHl5ih6S0UHqgPyw6r6Q5UdZ5n84hWNBsOYf5mMSnWqaZNvQ/D25L UzRiOgUe1nf3EqcFwtbbFK5/RghqNvS99v1hmn9LSwzGnE1ZpKaFnHLf8BIuVon9t/u+ QEYrriDN8tbT7fP7kW80iqQmvQ/Kql3QVqM7DdswoDtvpKclrCUXQ2eAOVfK/y3IRSu6 dL4Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@dabbelt-com.20150623.gappssmtp.com header.s=20150623 header.b=kl2ZlXn3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id zo8si3000083ejb.156.2020.06.18.19.31.21; Thu, 18 Jun 2020 19:31:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@dabbelt-com.20150623.gappssmtp.com header.s=20150623 header.b=kl2ZlXn3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730523AbgFSBx0 (ORCPT + 99 others); Thu, 18 Jun 2020 21:53:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47630 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727909AbgFSBxZ (ORCPT ); Thu, 18 Jun 2020 21:53:25 -0400 Received: from mail-pg1-x541.google.com (mail-pg1-x541.google.com [IPv6:2607:f8b0:4864:20::541]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EEF94C06174E for ; Thu, 18 Jun 2020 18:53:24 -0700 (PDT) Received: by mail-pg1-x541.google.com with SMTP id l63so3775698pge.12 for ; Thu, 18 Jun 2020 18:53:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dabbelt-com.20150623.gappssmtp.com; s=20150623; h=date:subject:in-reply-to:cc:from:to:message-id:mime-version :content-transfer-encoding; bh=ZPjvsjb4L/XUk4DOVwf5+goE/PhKwDE2Q9XXqApM3gE=; b=kl2ZlXn3hm/jWCOkK+/c4/yU6rt1osi6hbdBD9PsIY0TCyc82pVsciWwLVu4W/b2fc SUea1ro4dFO3uW6VBz0McApVjegphmH2ffajl3ouM8Ft/1qoIa539aszdLZyXWk6Obx0 95/gOm5q4I6Cf6rRbTyPiHkBWH+aEhFID0TLzBDl0aa6VGLWqc5FV19NKz1BzVg1j29A Mipk8fdjeej3Z+EKYGiqGNfQwA99JLdogQ9RoqHLICmS++v5lzTavQL4IoEFbjh8jTPn eVttfK+MldKECVUfMANymYs/ssjgAAnDsEOI3mEbPD7elZiMiyVWJsqlS63UKm5DGdY2 2FrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:subject:in-reply-to:cc:from:to:message-id :mime-version:content-transfer-encoding; bh=ZPjvsjb4L/XUk4DOVwf5+goE/PhKwDE2Q9XXqApM3gE=; b=uQOSkKBd4Lno9HPhz8eorvFGvZDCdoPNEHOoNGT+hGtnIP3G95GN9kl4ywp8Iksd2G SFz+DtNFBTLZydFvx1PRlk79VJYeYNfVxqew44w6FFf7AzGn1b8X8Y+fAdkYHXfI+Iyz MiEWHVbUWBKm9IvrHMzlLH4DCDAHo1JQiPTZpM3mfG2ae4j2jw4v0l6oz7QGP+H4Hr+q 1t7NzCsv4e+f6HrroWo6DOe5QyNIQ/QOnYbkrjKZQgwJW+Leqgd2MXYvqbm7d9SmbGsl vKWM1R00WJsvmlRim50tkpt1zAYxA0zO31XBeq4XKYrEQR/a7LlfaabpxVMfo//myYVU QLbg== X-Gm-Message-State: AOAM530JL8jBTDnHomrnHyEPZBtfXalyCWmJA370XPOzX7e5U/YnJcSd ryxI5QQaNZkaihmhiAa6OaJM3BU6D4aigg== X-Received: by 2002:a62:76c5:: with SMTP id r188mr6197043pfc.60.1592531603969; Thu, 18 Jun 2020 18:53:23 -0700 (PDT) Received: from localhost (76-210-143-223.lightspeed.sntcca.sbcglobal.net. [76.210.143.223]) by smtp.gmail.com with ESMTPSA id p8sm3571243pgs.29.2020.06.18.18.53.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2020 18:53:23 -0700 (PDT) Date: Thu, 18 Jun 2020 18:53:23 -0700 (PDT) X-Google-Original-Date: Thu, 18 Jun 2020 18:53:21 PDT (-0700) Subject: Re: [PATCH] RISC-V: Acquire mmap lock before invoking walk_page_range In-Reply-To: <20200617203732.2076611-1-atish.patra@wdc.com> CC: linux-kernel@vger.kernel.org, Atish Patra , aou@eecs.berkeley.edu, akpm@linux-foundation.org, daniel.m.jordan@oracle.com, linux-riscv@lists.infradead.org, walken@google.com, rppt@linux.ibm.com, Paul Walmsley , zong.li@sifive.com From: Palmer Dabbelt To: Atish Patra , Will Deacon Message-ID: Mime-Version: 1.0 (MHng) Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 17 Jun 2020 13:37:32 PDT (-0700), Atish Patra wrote: > As per walk_page_range documentation, mmap lock should be acquired by the > caller before invoking walk_page_range. mmap_assert_locked gets triggered > without that. The details can be found here. > > http://lists.infradead.org/pipermail/linux-riscv/2020-June/010335.html > > Fixes: 395a21ff859c(riscv: add ARCH_HAS_SET_DIRECT_MAP support) > Signed-off-by: Atish Patra > --- > arch/riscv/mm/pageattr.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/arch/riscv/mm/pageattr.c b/arch/riscv/mm/pageattr.c > index ec2c70f84994..289a9a5ea5b5 100644 > --- a/arch/riscv/mm/pageattr.c > +++ b/arch/riscv/mm/pageattr.c > @@ -151,6 +151,7 @@ int set_memory_nx(unsigned long addr, int numpages) > > int set_direct_map_invalid_noflush(struct page *page) > { > + int ret; > unsigned long start = (unsigned long)page_address(page); > unsigned long end = start + PAGE_SIZE; > struct pageattr_masks masks = { > @@ -158,11 +159,16 @@ int set_direct_map_invalid_noflush(struct page *page) > .clear_mask = __pgprot(_PAGE_PRESENT) > }; > > - return walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); > + mmap_read_lock(&init_mm); > + ret = walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); > + mmap_read_unlock(&init_mm); > + > + return ret; > } > > int set_direct_map_default_noflush(struct page *page) > { > + int ret; > unsigned long start = (unsigned long)page_address(page); > unsigned long end = start + PAGE_SIZE; > struct pageattr_masks masks = { > @@ -170,7 +176,11 @@ int set_direct_map_default_noflush(struct page *page) > .clear_mask = __pgprot(0) > }; > > - return walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); > + mmap_read_lock(&init_mm); > + ret = walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); > + mmap_read_unlock(&init_mm); > + > + return ret; > } > > void __kernel_map_pages(struct page *page, int numpages, int enable) +Will, who pointed out that we could avoid the lock by using apply_page_range. Given that the bug doesn't reproduce for me, we don't otherwise use apply_page_range, and the commit is somewhat suspect (I screwed up that PR, and the original patch mentions avoiding caching invalid states) I'm going to just take this as is and add it to the list of things to look at. I've put this on fixes: walk_page_range() directly says you must take the lock and I don't want to wait for pedantic reasons on a boot issue, even if it's one that doesn't show up for me. Thanks!