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,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham 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 A2140C433DB for ; Wed, 3 Mar 2021 19:07:47 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id E1EA364EEF for ; Wed, 3 Mar 2021 19:07:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E1EA364EEF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 6E8A74B4ED; Wed, 3 Mar 2021 14:07:46 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id eKxeqHaI6CbB; Wed, 3 Mar 2021 14:07:45 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 375D34B53E; Wed, 3 Mar 2021 14:07:45 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id DBC554B531 for ; Wed, 3 Mar 2021 14:07:43 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id U8tms-XMUXK0 for ; Wed, 3 Mar 2021 14:07:42 -0500 (EST) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 651304B4ED for ; Wed, 3 Mar 2021 14:07:42 -0500 (EST) 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 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 Cc: Catalin Marinas , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu 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. _______________________________________________ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm 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 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,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 88D2DC433E0 for ; Wed, 3 Mar 2021 21:00:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3D7D064EFC for ; Wed, 3 Mar 2021 21:00:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240629AbhCCT11 convert rfc822-to-8bit (ORCPT ); Wed, 3 Mar 2021 14:27:27 -0500 Received: from mail.kernel.org ([198.145.29.99]:60508 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1378566AbhCCTJC (ORCPT ); Wed, 3 Mar 2021 14:09:02 -0500 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") Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 8BIT 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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.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.