Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4934178pxj; Tue, 25 May 2021 21:41:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzWfUFyjLZPmc3aTH4K7mx6FlPkKDyKBz06UP4tDQsRGvF28aKigSheZx0JeQgH+U3+9keR X-Received: by 2002:a17:906:4e8c:: with SMTP id v12mr31699427eju.365.1622004083603; Tue, 25 May 2021 21:41:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622004083; cv=none; d=google.com; s=arc-20160816; b=QZmxIZ18pGpOnDTnGbpz6fXCAb55Xllg20Ii3Rs3L3u8RcQzu+vRVJCCU6h3nAldXR qiN23CM/ESPqzjOXwzHhaQep8DMnZRyw7LFBfRgNPySDy/b2W/xNBsaOQt7ckbo7lN1Z CMzBTO+mEKh8chs3nr32SY+mvPSC/PUp6yH8u71oFRexuxKj7+I0QYNMKRZpWhYT4BQE WnlLeHPFQRoeH5H++rDLtgkn+2wu3q/m+RMtz6i53hh+iQu9YJwzmlT/Gw4rtERuxmUd wju5d9+72xYpMvKE8X6jrvdq/Cj1NneUxvMsRPe7fzqNz6rwbcH67OsJ2kOU9nzC0XK7 8YNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=o5+R/nZRvtcO1q/xhlmh4RCfCoOnsDhfDh+LYye+Qb0=; b=bCOkjYWJE2z92ro6ytv985np6NIxPdXaUBs2i2PqFHtRpSOGXDRXG17Rz2tEq1BTvF dHBESpqIOEqSbMKv6MrD/rweQ20cABjIw9Rpbnapu6Vr3Ia9qCAB8LVaTV4Iyn37VjVP fcRW+jrUBLl8/Ba2H4pzsIjt0SmnZMN9Rd6VDoND7Lrgp3+Xqdsb/RwQjn26/VvoRfLv eYxaVe0hkG3whhdGi5xeePRJHv9LoKyIfO2Pbfs+i40YhZlGdAJxomb+K1sVq2Rw2yiR W2Y1EUCicyW6/OyFpQPOUSm7QWleTx2L1kdjn9eV2g1Y8KN92vHpfJskCMtKNMxIZKsj zVgA== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ja16si16549864ejc.611.2021.05.25.21.40.59; Tue, 25 May 2021 21:41:23 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229747AbhEZEk7 (ORCPT + 99 others); Wed, 26 May 2021 00:40:59 -0400 Received: from foss.arm.com ([217.140.110.172]:38442 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229473AbhEZEk7 (ORCPT ); Wed, 26 May 2021 00:40:59 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 09BBB1516; Tue, 25 May 2021 21:39:28 -0700 (PDT) Received: from [10.163.81.152] (unknown [10.163.81.152]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 685193F73D; Tue, 25 May 2021 21:39:24 -0700 (PDT) Subject: Re: [PATCH 1/1] mm/debug_vm_pgtable: fix alignment for pmd/pud_advanced_tests() To: Gerald Schaefer , Andrew Morton Cc: linux-mm , LKML , linux-arch , linux-sparc , linux-s390 , stable@vger.kernel.org, Vineet Gupta , Palmer Dabbelt , Paul Walmsley References: <20210525130043.186290-1-gerald.schaefer@linux.ibm.com> <20210525130043.186290-2-gerald.schaefer@linux.ibm.com> From: Anshuman Khandual Message-ID: <53271f1e-51e3-7673-b58b-0bfe65ffde94@arm.com> Date: Wed, 26 May 2021 10:10:06 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20210525130043.186290-2-gerald.schaefer@linux.ibm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 5/25/21 6:30 PM, Gerald Schaefer wrote: > In pmd/pud_advanced_tests(), the vaddr is aligned up to the next pmd/pud > entry, and so it does not match the given pmdp/pudp and (aligned down) pfn > any more. > > For s390, this results in memory corruption, because the IDTE instruction > used e.g. in xxx_get_and_clear() will take the vaddr for some calculations, > in combination with the given pmdp. It will then end up with a wrong table > origin, ending on ...ff8, and some of those wrongly set low-order bits will > also select a wrong pagetable level for the index addition. IDTE could > therefore invalidate (or 0x20) something outside of the page tables, > depending on the wrongly picked index, which in turn depends on the random > vaddr. > > As result, we sometimes see "BUG task_struct (Not tainted): Padding > overwritten" on s390, where one 0x5a padding value got overwritten with > 0x7a. > > Fix this by aligning down, similar to how the pmd/pud_aligned pfns are > calculated. > > Fixes: a5c3b9ffb0f40 ("mm/debug_vm_pgtable: add tests validating advanced arch page table helpers") > Cc: # v5.9+ > Signed-off-by: Gerald Schaefer Did not see any problem on arm64 or x86, builds okay across all supported platforms. It would be great, if folks could test this on remaining platforms i.e arc, riscv etc. + Vineet Gupta + Palmer Dabbelt + Paul Walmsley Reviewed-by: Anshuman Khandual > --- > mm/debug_vm_pgtable.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c > index 6ff92c8b0a00..f7b23565a04f 100644 > --- a/mm/debug_vm_pgtable.c > +++ b/mm/debug_vm_pgtable.c > @@ -193,7 +193,7 @@ static void __init pmd_advanced_tests(struct mm_struct *mm, > > pr_debug("Validating PMD advanced\n"); > /* Align the address wrt HPAGE_PMD_SIZE */ > - vaddr = (vaddr & HPAGE_PMD_MASK) + HPAGE_PMD_SIZE; > + vaddr &= HPAGE_PMD_MASK; > > pgtable_trans_huge_deposit(mm, pmdp, pgtable); > > @@ -318,7 +318,7 @@ static void __init pud_advanced_tests(struct mm_struct *mm, > > pr_debug("Validating PUD advanced\n"); > /* Align the address wrt HPAGE_PUD_SIZE */ > - vaddr = (vaddr & HPAGE_PUD_MASK) + HPAGE_PUD_SIZE; > + vaddr &= HPAGE_PUD_MASK; > > pud = pfn_pud(pfn, prot); > set_pud_at(mm, vaddr, pudp, pud); >