Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp3215664iob; Sun, 1 May 2022 09:55:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzSml/QSwpRt1rNVirqNZPf+yJW7JtLxmbrERdBnjs5YsPU57FCC7UQa4BeLBBdisMpgvm5 X-Received: by 2002:a05:6512:1520:b0:443:ec43:5fe8 with SMTP id bq32-20020a056512152000b00443ec435fe8mr6964389lfb.589.1651424146911; Sun, 01 May 2022 09:55:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651424146; cv=none; d=google.com; s=arc-20160816; b=hh0pmZLZGq+9eigigR9UzSOTVcoRDunKhotNCy3pvE+P5aH2GGQIGRAhfKsd2yuuuM OCfUEo1HO6nXlstr0nZBEUU2aIhiXZFZvgGkROMgFFe73+NsTIYy8MkqMjPBe6rWf+sI wE4+nEc1pQsO/cZNI+fNMLra6EUSN0tHrcBQokktL0nth+luliGnd8ToYNFA8Z/VTShH Pz70amFnN4HnzGb2TTh9q8DPzV4W9LqO3Ared87SZvyo0ywrPDcvfShOkxCxK0dNV/HK yoO21tcZYCnpCpZOxzMZlS1aGqDmlFPxxHKKRRo6pUKQiXKMHh5NIEuvKbmPbg7mrk61 aN2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=9ePBKH/swAb+S/ZlBjew+1OjiRYt9TOP/8rNotlu2xA=; b=mwzeIkHQJZDLV0DKS+tujcv0ZEx3AoHI20Fn7hJxv5oS5eDINsgZk2qFaDSk6sJg1o n/blduRrI2L3P4+HGhTEMpxpSdeU8bVIHYMCbCpI2LPFoA3yLlU7q0dKfOpIWbxFLNRu WasJxM1qcCHkIg3+nGFa3k8i1r52Rq7YKkZPu2bxoGIG5+qUOUNI/wSY0Kb8xqG6LMdT yqzSuPh/xShTL6QKKANhHInPgGVgzRq3E0fcToGXrob/TvY4JoIp5c1GQkof73XEMhm/ mwAOo0VcWHJRI5/o9b22gtFi0uBi6fcCKBBOA0jdpDEDFjO1MRGyHpjm06b8eMrQlY2c GPFg== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bt42-20020a056512262a00b004723c13b76fsi10128319lfb.155.2022.05.01.09.55.21; Sun, 01 May 2022 09:55:46 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379788AbiD2S0y (ORCPT + 99 others); Fri, 29 Apr 2022 14:26:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235142AbiD2S0u (ORCPT ); Fri, 29 Apr 2022 14:26:50 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DCE9433366; Fri, 29 Apr 2022 11:23:31 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 7A3C36241A; Fri, 29 Apr 2022 18:23:31 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3060FC385A4; Fri, 29 Apr 2022 18:23:28 +0000 (UTC) Date: Fri, 29 Apr 2022 19:23:24 +0100 From: Catalin Marinas To: Ard Biesheuvel Cc: Mike Rapoport , Linux Kernel Mailing List , Andrew Morton , Greg Kroah-Hartman , Guillaume Tucker , Mark Brown , Mark-PK Tsai , Mike Rapoport , Russell King , Tony Lindgren , Will Deacon , "kernelci . org bot" , kernelci-results@groups.io, Linux ARM , "# 3.4.x" Subject: Re: [PATCH v2] arm[64]/memremap: don't abuse pfn_valid() to ensure presence of linear map Message-ID: References: <20220426060107.7618-1-rppt@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_PASS autolearn=ham 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 Fri, Apr 29, 2022 at 03:38:59PM +0200, Ard Biesheuvel wrote: > On Tue, 26 Apr 2022 at 08:01, Mike Rapoport wrote: > > From: Mike Rapoport > > > > The semantics of pfn_valid() is to check presence of the memory map for a > > PFN and not whether a PFN is covered by the linear map. The memory map may > > be present for NOMAP memory regions, but they won't be mapped in the linear > > mapping. Accessing such regions via __va() when they are memremap()'ed > > will cause a crash. > > > > On v5.4.y the crash happens on qemu-arm with UEFI [1]: > > > > <1>[ 0.084476] 8<--- cut here --- > > <1>[ 0.084595] Unable to handle kernel paging request at virtual address dfb76000 > > <1>[ 0.084938] pgd = (ptrval) > > <1>[ 0.085038] [dfb76000] *pgd=5f7fe801, *pte=00000000, *ppte=00000000 > > > > ... > > > > <4>[ 0.093923] [] (memcpy) from [] (dmi_setup+0x60/0x418) > > <4>[ 0.094204] [] (dmi_setup) from [] (arm_dmi_init+0x8/0x10) > > <4>[ 0.094408] [] (arm_dmi_init) from [] (do_one_initcall+0x50/0x228) > > <4>[ 0.094619] [] (do_one_initcall) from [] (kernel_init_freeable+0x15c/0x1f8) > > <4>[ 0.094841] [] (kernel_init_freeable) from [] (kernel_init+0x8/0x10c) > > <4>[ 0.095057] [] (kernel_init) from [] (ret_from_fork+0x14/0x2c) > > > > On kernels v5.10.y and newer the same crash won't reproduce on ARM because > > commit b10d6bca8720 ("arch, drivers: replace for_each_membock() with > > for_each_mem_range()") changed the way memory regions are registered in the > > resource tree, but that merely covers up the problem. > > > > On ARM64 memory resources registered in yet another way and there the > > issue of wrong usage of pfn_valid() to ensure availability of the linear > > map is also covered. > > > > Implement arch_memremap_can_ram_remap() on ARM and ARM64 to prevent access > > to NOMAP regions via the linear mapping in memremap(). > > > > Link: https://lore.kernel.org/all/Yl65zxGgFzF1Okac@sirena.org.uk > > Reported-by: "kernelci.org bot" > > Tested-by: Mark Brown > > Cc: stable@vger.kernel.org # 5.4+ > > Signed-off-by: Mike Rapoport > > --- > > v2: don't remove pfn_valid() from try_ram_remap(), per Ard > > > > arch/arm/include/asm/io.h | 3 +++ > > arch/arm/mm/ioremap.c | 8 ++++++++ > > arch/arm64/include/asm/io.h | 4 ++++ > > arch/arm64/mm/ioremap.c | 8 ++++++++ > > 4 files changed, 23 insertions(+) > > > > I think this looks reasonable, but you'll need to split it in two if > it is going through the respective arch trees. I guess that would be best. Otherwise, if Andrew picks it up: Acked-by: Catalin Marinas