From patchwork Tue Sep 12 14:15:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 13381760 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2AB83CA0EEC for ; Tue, 12 Sep 2023 14:17:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=+Of0kPvyXFzFJsCCQAlmnFnE3e4IVfpbk6L9x6A4lGU=; b=TealpfsYhchwZqipyGHYpReY1Y VdSbRRtl/WTf7ZrMpax/0e89o55sA9rMuLMWt8Q4GjBCnn7noUXrVpH0plJJNnq9ZwA3zYR24LuDu hTlm0AtiM3evUqI3OXceHu9OQF7sBZQ4sAjUTMRo/Rm5DkJtt5fawBrQxyB/SVZREBVx9gmpsd3t+ nUmQg5QhhY2vb6Cem1sxkMU2vvfLRm2D2+Bz9uLL0Ax+CkQS5XJP0MlGfUYXdQwDdxNPYv8iwQbsJ KiA3l1Ou42YVkGn/VPHEo2UdDMqoD+TjuJ2nVjYW1Bal8FTup4AQDONy8WyjuwCc58IVFx2i4ur2Y bGXK88UQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qg4Cr-003Vup-2M; Tue, 12 Sep 2023 14:17:33 +0000 Received: from mail-wr1-x44a.google.com ([2a00:1450:4864:20::44a]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qg4Cn-003Vrg-0T for linux-arm-kernel@lists.infradead.org; Tue, 12 Sep 2023 14:17:30 +0000 Received: by mail-wr1-x44a.google.com with SMTP id ffacd0b85a97d-31adc3ca07aso3769274f8f.2 for ; Tue, 12 Sep 2023 07:17:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1694528246; x=1695133046; darn=lists.infradead.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=QOaB6U1iEfQSZsU7eRF+99qkcmj7tpJKL0EHxJklm5g=; b=epsLEmCpwt7oVZSexLbVKR5OmV7OgS6kVUt+duCWBG/3xOju3E5+8/w/xZej4hRbQd HLyqLplIvhluSsR1Uyf6yHx8VAvMehg66DAjVUfkxSDbsbF3Q2kOyTH+LOrylNKxHEce 7vvsOvZnYlXf1S+s/60Pp/0LwkKIQomOH1gWmkrXby1KQ8T097PHlbRXDAeCykrdUpAh 8F0J5Ynj/fHZ1Dt+zGmMn2BLCbty6iicGJocu3USn+3QEUP3oJY1cBkp8ddOZ0bZ82rK dDUwzThZFC/uFO/lbBU8uHZAUDGLaaCLMNNxGD5IrJb0UXg5OhAGVUtSLo4e9NTmU8xw Bwow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694528246; x=1695133046; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QOaB6U1iEfQSZsU7eRF+99qkcmj7tpJKL0EHxJklm5g=; b=tESrDrUifZz6BqqSVdjvuyWfIVfALPiTei2+5vkF6LOVuAb7KiwzYAkep2FDT5vOp2 YB4VBxn4Bx+yJl+rs0J9v0/4SdnZLVtNT7UzkN9GADSkuK06z4J93UAZrJHpvmZ00ylS VE/6bQMTwNL1G+2WD6hcuWxO0Uvl48+UhWm6fNsLN3FJf346Uj1ilV/uT5NaERXqBwfE JwLkNCj3mNFQrI+iP7nTbPB2R3ETulChAW4194fZIEs8KhUlosDTGb10nIoFg6+t2Lt0 iIMP89npfRJOoozDaYgqrywniLdh5ExeG5pq4WBxKJdJ2Ht2pZqVeiEv9dmCn1MCaefC eSRA== X-Gm-Message-State: AOJu0YwGoIifZhJJwkcRSHweAA7JHWxndtMXNXaPxXsIoBjTit2XuBIA psJ+m8BBjLOOOWTbQqTs1yI21ugfqpdYZqqLw63Z7FEiizAqn81yoc4nmlkPmq9mnoIkYQLVyma 4bazaQCrHM+owwQekCfWrLX900AuFanZP1SdxIScPYnLdRYTtnwu3+9/oT9Cdl6zhc5clkhrCGr g= X-Google-Smtp-Source: AGHT+IG1vHZ9s7abuaNp6jiDk0T2Hsc81c3e63uJx3kcSAx5p5sUXYsLTPscpcvzFIXHt46YqYKCwe5m X-Received: from palermo.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:118a]) (user=ardb job=sendgmr) by 2002:a5d:5a0a:0:b0:31f:888b:9a4 with SMTP id bq10-20020a5d5a0a000000b0031f888b09a4mr127203wrb.12.1694528246584; Tue, 12 Sep 2023 07:17:26 -0700 (PDT) Date: Tue, 12 Sep 2023 14:15:56 +0000 In-Reply-To: <20230912141549.278777-63-ardb@google.com> Mime-Version: 1.0 References: <20230912141549.278777-63-ardb@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=3325; i=ardb@kernel.org; h=from:subject; bh=NjETdn9/OJSsYzpCnaqf4zu6JV6mU8+8GZRaOpY0ZAI=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIZWhaM69eIdXF/2mPzzcdnrJPONpJzn5+JY/FuiLSvsdz 1oioZLXUcrCIMbBICumyCIw+++7nacnStU6z5KFmcPKBDKEgYtTACZyhpfhf8mKddoBH7umt5y8 pML3qP5WqaHXm1Wi8+Q3euZI+z8/pMHwT1/8+uZGD8FIzfjpbocW/KmVSk/xE8nkexd+sWVZL+9 2fgA= X-Mailer: git-send-email 2.42.0.283.g2d96d420d3-goog Message-ID: <20230912141549.278777-69-ardb@google.com> Subject: [PATCH v4 06/61] arm64: ptdump: Allow all region boundaries to be defined at boot time From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Marc Zyngier , Mark Rutland , Ryan Roberts , Anshuman Khandual , Kees Cook , Joey Gouly X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230912_071729_185325_31B69797 X-CRM114-Status: GOOD ( 15.42 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Ard Biesheuvel Rework the way the address_markers array is populated so that we can tolerate values that are not compile time constants generally, rather than keeping track manually of the array indexes in question, and poking new values into them manually. This will be needed for VMALLOC_END, which will cease to be a compile time constant after a subsequent patch. Signed-off-by: Ard Biesheuvel --- arch/arm64/mm/ptdump.c | 54 ++++++++------------ 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/arch/arm64/mm/ptdump.c b/arch/arm64/mm/ptdump.c index 3958b008f908..bfc307890344 100644 --- a/arch/arm64/mm/ptdump.c +++ b/arch/arm64/mm/ptdump.c @@ -26,34 +26,6 @@ #include -enum address_markers_idx { - PAGE_OFFSET_NR = 0, - PAGE_END_NR, -#if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS) - KASAN_START_NR, -#endif -}; - -static struct addr_marker address_markers[] = { - { PAGE_OFFSET, "Linear Mapping start" }, - { 0 /* PAGE_END */, "Linear Mapping end" }, -#if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS) - { 0 /* KASAN_SHADOW_START */, "Kasan shadow start" }, - { KASAN_SHADOW_END, "Kasan shadow end" }, -#endif - { MODULES_VADDR, "Modules start" }, - { MODULES_END, "Modules end" }, - { VMALLOC_START, "vmalloc() area" }, - { VMALLOC_END, "vmalloc() end" }, - { VMEMMAP_START, "vmemmap start" }, - { VMEMMAP_START + VMEMMAP_SIZE, "vmemmap end" }, - { PCI_IO_START, "PCI I/O start" }, - { PCI_IO_END, "PCI I/O end" }, - { FIXADDR_TOT_START, "Fixmap start" }, - { FIXADDR_TOP, "Fixmap end" }, - { -1, NULL }, -}; - #define pt_dump_seq_printf(m, fmt, args...) \ ({ \ if (m) \ @@ -339,9 +311,8 @@ static void __init ptdump_initialize(void) pg_level[i].mask |= pg_level[i].bits[j].mask; } -static struct ptdump_info kernel_ptdump_info = { +static struct ptdump_info kernel_ptdump_info __ro_after_init = { .mm = &init_mm, - .markers = address_markers, .base_addr = PAGE_OFFSET, }; @@ -375,10 +346,29 @@ void ptdump_check_wx(void) static int __init ptdump_init(void) { - address_markers[PAGE_END_NR].start_address = PAGE_END; + struct addr_marker m[] = { + { PAGE_OFFSET, "Linear Mapping start" }, + { PAGE_END, "Linear Mapping end" }, #if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS) - address_markers[KASAN_START_NR].start_address = KASAN_SHADOW_START; + { KASAN_SHADOW_START, "Kasan shadow start" }, + { KASAN_SHADOW_END, "Kasan shadow end" }, #endif + { MODULES_VADDR, "Modules start" }, + { MODULES_END, "Modules end" }, + { VMALLOC_START, "vmalloc() area" }, + { VMALLOC_END, "vmalloc() end" }, + { VMEMMAP_START, "vmemmap start" }, + { VMEMMAP_START + VMEMMAP_SIZE, "vmemmap end" }, + { PCI_IO_START, "PCI I/O start" }, + { PCI_IO_END, "PCI I/O end" }, + { FIXADDR_TOT_START, "Fixmap start" }, + { FIXADDR_TOP, "Fixmap end" }, + { -1, NULL }, + }; + static struct addr_marker address_markers[ARRAY_SIZE(m)] __ro_after_init; + + kernel_ptdump_info.markers = memcpy(address_markers, m, sizeof(m)); + ptdump_initialize(); ptdump_debugfs_register(&kernel_ptdump_info, "kernel_page_tables"); return 0;