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=-14.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 25D17C433DB for ; Thu, 4 Mar 2021 00:36:57 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 95C5A64E51 for ; Thu, 4 Mar 2021 00:36:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 95C5A64E51 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Subject:Cc:To: From:Message-ID:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=72Bn6iyCBbc0vna6/1Jw6NXGM2GF3zlnVjZ/dV6HVyI=; b=HNr6NnwosyuKtyKvr3u58jThz GCiZ1N/gwe4zw/rewvTqAjJtNO+YmIbVKmVKmy0NxCNluEHms5/t1OCUzbTwz5dkhCrlGcoKTEfbI X3QXTe2Zhk8ijavGBbS9/IfllgVHoShE1vHZTb826SSjaz0ZRkDVS+wmISiSuwJa3TBI84tPwDuCN vJ2yFi9imlRPLCFLH05PzIQ+OZsnL3RPclZxrzjk4nAR2C3dgYEREMvt3FdQSN5C+i+yD74kIJd/g qqXAxQv7VfCzh+mLJ9GoSOOImtfEaa8e/0pjSxIVjQGtAhYlzN8qkCmqpdu2LPBSSpTth6afIGFkY 1WwepHjEg==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lHbx8-007AvA-RD; Thu, 04 Mar 2021 00:34:55 +0000 Received: from mail.kernel.org ([198.145.29.99]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lHWqU-00695s-PG for linux-arm-kernel@lists.infradead.org; Wed, 03 Mar 2021 19:07:45 +0000 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0254164E90; Wed, 3 Mar 2021 19:07:41 +0000 (UTC) Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=why.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94) (envelope-from ) id 1lHWqQ-00H5g8-NI; Wed, 03 Mar 2021 19:07:38 +0000 Date: Wed, 03 Mar 2021 19:07:37 +0000 Message-ID: <87mtvkys1y.wl-maz@kernel.org> From: Marc Zyngier To: Will Deacon , Jia He Cc: kvmarm@lists.cs.columbia.edu, James Morse , Julien Thierry , Suzuki K Poulose , Catalin Marinas , Gavin Shan , Yanan Wang , Quentin Perret , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] KVM: arm64: Fix unaligned addr case in mmu walking In-Reply-To: <20210303112934.GA18452@willie-the-truck> References: <20210303024225.2591-1-justin.he@arm.com> <20210303112934.GA18452@willie-the-truck> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/27.1 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: will@kernel.org, justin.he@arm.com, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, julien.thierry.kdev@gmail.com, suzuki.poulose@arm.com, catalin.marinas@arm.com, gshan@redhat.com, wangyanan55@huawei.com, qperret@google.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Wed, 03 Mar 2021 11:29:34 +0000, Will Deacon wrote: > > On Wed, Mar 03, 2021 at 10:42:25AM +0800, Jia He wrote: > > If the start addr is not aligned with the granule size of that level. > > loop step size should be adjusted to boundary instead of simple > > kvm_granual_size(level) increment. Otherwise, some mmu entries might miss > > the chance to be walked through. > > E.g. Assume the unmap range [data->addr, data->end] is > > [0xff00ab2000,0xff00cb2000] in level 2 walking and NOT block mapping. > > And the 1st part of that pmd entry is [0xff00ab2000,0xff00c00000]. The > > pmd value is 0x83fbd2c1002 (not valid entry). In this case, data->addr > > should be adjusted to 0xff00c00000 instead of 0xff00cb2000. > > > > Without this fix, userspace "segment fault" error can be easily > > triggered by running simple gVisor runsc cases on an Ampere Altra > > server: > > docker run --runtime=runsc -it --rm ubuntu /bin/bash > > > > In container: > > for i in `seq 1 100`;do ls;done > > > > Reported-by: Howard Zhang > > Signed-off-by: Jia He > > --- > > arch/arm64/kvm/hyp/pgtable.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c > > index bdf8e55ed308..4d99d07c610c 100644 > > --- a/arch/arm64/kvm/hyp/pgtable.c > > +++ b/arch/arm64/kvm/hyp/pgtable.c > > @@ -225,6 +225,7 @@ static inline int __kvm_pgtable_visit(struct kvm_pgtable_walk_data *data, > > goto out; > > > > if (!table) { > > + data->addr = ALIGN_DOWN(data->addr, kvm_granule_size(level)); > > data->addr += kvm_granule_size(level); > > Can you replace both of these lines with: > > data->addr = ALIGN(data->addr, kvm_granule_size(level)); > > instead? Seems like a good option. I also took the liberty to rewrite the commit message in an effort to make it a bit clearer. Jia, please let me know if you are OK with these cosmetic changes. Thanks, M. >From e0524b41a71e0f17d6dc8f197e421e677d584e72 Mon Sep 17 00:00:00 2001 From: Jia He Date: Wed, 3 Mar 2021 10:42:25 +0800 Subject: [PATCH] KVM: arm64: Fix range alignment when walking page tables When walking the page tables at a given level, and if the start address for the range isn't aligned for that level, we propagate the misalignment on each iteration at that level. This results in the walker ignoring a number of entries (depending on the original misalignment) on each subsequent iteration. Properly aligning the address at the before the next iteration addresses the issue. Cc: stable@vger.kernel.org Reported-by: Howard Zhang Signed-off-by: Jia He Fixes: b1e57de62cfb ("KVM: arm64: Add stand-alone page-table walker infrastructure") [maz: rewrite commit message] Signed-off-by: Marc Zyngier Link: https://lore.kernel.org/r/20210303024225.2591-1-justin.he@arm.com --- arch/arm64/kvm/hyp/pgtable.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c index 4d177ce1d536..124cd2f93020 100644 --- a/arch/arm64/kvm/hyp/pgtable.c +++ b/arch/arm64/kvm/hyp/pgtable.c @@ -223,7 +223,7 @@ static inline int __kvm_pgtable_visit(struct kvm_pgtable_walk_data *data, goto out; if (!table) { - data->addr += kvm_granule_size(level); + data->addr = ALIGN(data->addr, kvm_granule_size(level)); goto out; } -- 2.30.0 -- Without deviation from the norm, progress is not possible. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel