From patchwork Fri Jan 18 02:16:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qian Cai X-Patchwork-Id: 10769277 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9B6E191E for ; Fri, 18 Jan 2019 02:16:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 892032FB29 for ; Fri, 18 Jan 2019 02:16:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7D4332FB36; Fri, 18 Jan 2019 02:16:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E9A782FB29 for ; Fri, 18 Jan 2019 02:16:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E137F8E0004; Thu, 17 Jan 2019 21:16:54 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id DC39C8E0002; Thu, 17 Jan 2019 21:16:54 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CB34D8E0004; Thu, 17 Jan 2019 21:16:54 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by kanga.kvack.org (Postfix) with ESMTP id A1A998E0002 for ; Thu, 17 Jan 2019 21:16:54 -0500 (EST) Received: by mail-qk1-f198.google.com with SMTP id w185so10404992qka.9 for ; Thu, 17 Jan 2019 18:16:54 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references; bh=dTHO/oy//VODmBdk/pXmhnj8PyEzqt5VwuHHPF/hkio=; b=IXJqd7308r9YK3/kI3dJzTAbKg/fqYcf9tu3dHUqCmHPgsoVQSYbUPl45UvxVvRHQl EXXh4GJngydqNHtsvdnygD2aThzVD9FgGeYiEUvPEyG2ymj6/QURbK3xcjBfk7OKb8ZZ yUxQnXgsOJjQ+yMteIKDTcXP1reD6V6J4blXJuXYVQ7fOl5+bQwyJH8ndObpyrgxzM3h 0+YJDqHO7K5zciv1gDeSimwN5FszRSAdVVHUrHIlNMn1UdtPDc0vlZEkUMrgOE4GInOI U7ft0yr8nAHEsRZn/bY4jATEzS848X/2lLY1JVCvUeu1r6ePcALg5YZGnBdBfcO3ApDH DTJw== X-Gm-Message-State: AJcUukeg5u6/zfRnV5ZZnFV/NNw5VPOaUhxa2eeOwRnR85RR7DgQYh16 RON3hDrlqSwJ87oH9vU2P6+r7tCg59V10ktGLvJ+gWTAvZadFWN18RaySDj1IDpBgU15uMZVQSY hHL/jSA1hemhAMGDEssTNor77X5M7b2NwdQmJ4QP1q33vc09qVIOizV+mfGhHDrbLdZLcGTjFoC ZZsoU0HC/J6an9UPiMIVFBJD4fgNoufiYm3XjtlIXAtdNkLVMw1aj1P3uitFgRQJalYImcFgC8Z 5a7PoSE3igkjknSO1VZQwY6FrconfEWN3D9cViZtRwvmYieSSH7n/q+EYFKfj0hvkTeHirbBPPm g3qQOqoUW7aLV/ogD7EBtiU8Z/NidWcFJyQydpL2F4Qm0CN9LXVuU5KFWUZfhCSJ5eN3Wqmp4Kv C X-Received: by 2002:a0c:e486:: with SMTP id n6mr13994858qvl.210.1547777814373; Thu, 17 Jan 2019 18:16:54 -0800 (PST) X-Received: by 2002:a0c:e486:: with SMTP id n6mr13994833qvl.210.1547777813630; Thu, 17 Jan 2019 18:16:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547777813; cv=none; d=google.com; s=arc-20160816; b=BRXxRQpIQF+YLWvxBq5DLx45ToTYHmcSG9fwXZ1ThjkGPn3ntR6SMruShQon4bbWeo x1cGKpejuRyfrTi2LFQ3H8gzMwRvWNKNq9UOZRSDZNYc4S59BN6Q42UlSheGCmJ3CmqZ N8SXLRglX2tATOiFQW7UvmZpR5PnaTLuBMixq+jRtsTeoMOl/sCUKa+9LiN3G+cabwnI d+Kq3S0V10uoT7r2fvWWVvsNj4VdjlBYi4Vk12ygwAvL4YIuENlqZ9rMOhem7fQPnvQU ueYAL7ZidXNH81SSD8O/OnSiIBPk9hoCl6mCkaZRsGwDoXMF0tMnXTxCikgWgCGf55YI VJAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=dTHO/oy//VODmBdk/pXmhnj8PyEzqt5VwuHHPF/hkio=; b=lXDpUXE5e39LslwbKc1EFFCczAb3jzn61GLGu7hTQttN1QzEyqSAP1IDAdiyD3eNJQ 40TU/sxbaJvyY0ufxwXF4Y/Ig0vElUrOKoSyoUX0vxs4bc4hSzT5SN5811wzJPrblUZ+ RtR+sLTzvmYcSuSynu5Jcu43PKni3XDJ9AHioqJkjV/bI6+CxqiPegpmDm65LzRpc/55 oshAHKXlyRbl+Zcr9IQeU6FsJeljrkhnXB8t5hQFIVkuwzmouxwQYhOjRQ0QjTo90vpf UsHkFa4v/s3BvH2Z1WNEcnHysg5aibk4VtbV3M24ShPrJkzE6Y7anIcKhpMPgwzZmf0o y6fA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lca.pw header.s=google header.b=ZuVbAm98; spf=pass (google.com: domain of cai@lca.pw designates 209.85.220.65 as permitted sender) smtp.mailfrom=cai@lca.pw Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id w190sor48924830qkw.68.2019.01.17.18.16.53 for (Google Transport Security); Thu, 17 Jan 2019 18:16:53 -0800 (PST) Received-SPF: pass (google.com: domain of cai@lca.pw designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@lca.pw header.s=google header.b=ZuVbAm98; spf=pass (google.com: domain of cai@lca.pw designates 209.85.220.65 as permitted sender) smtp.mailfrom=cai@lca.pw DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lca.pw; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=dTHO/oy//VODmBdk/pXmhnj8PyEzqt5VwuHHPF/hkio=; b=ZuVbAm98wQyqe+wM95gQTPKAKVoxLp1O5YoTJID6rs8Q6wNpup9JxOzjPe5TiAWNE6 Qhw4yBJ4U/qJoDaglf2/OFbD2S9lD/lJm/n9Wn+hJXrTyGqfPINxKUvdS3K17HnkXODr Ma5KQMyaDQTqRj/TLpb5LmPDypQ5C3bgj0hMlqBGHtAIdqB94/6E04Jz176A9jf3XZ27 vHpMvaXDDjE/ssYizz8QIzuFv1A0+uzR9nIB8LCYNK8YqBwd8MmKPermVoDUdmW/sRfz jYjy1b+bAmd0QdH9U70J8jriNFakb9dhzVPqYWART/bF2VZtAiJ43Or87INiNBoKrHt3 D4cQ== X-Google-Smtp-Source: ALg8bN7rAVbu4FryVaIPNQ5Rw5Xib1yLSRsLKamBbnRZSMdfc/A5Ilej25WXntfKBKyENKsTsvWeew== X-Received: by 2002:ae9:ef14:: with SMTP id d20mr13335921qkg.147.1547777813242; Thu, 17 Jan 2019 18:16:53 -0800 (PST) Received: from ovpn-124-227.rdu2.redhat.com (pool-71-184-117-43.bstnma.fios.verizon.net. [71.184.117.43]) by smtp.gmail.com with ESMTPSA id 70sm6363936qkc.52.2019.01.17.18.16.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Jan 2019 18:16:52 -0800 (PST) From: Qian Cai To: akpm@linux-foundation.org Cc: osalvador@suse.de, catalin.marinas@arm.com, mhocko@kernel.org, vbabka@suse.cz, linux-mm@kvack.org, Qian Cai Subject: [PATCH] mm/hotplug: invalid PFNs from pfn_to_online_page() Date: Thu, 17 Jan 2019 21:16:50 -0500 Message-Id: <20190118021650.93222-1-cai@lca.pw> X-Mailer: git-send-email 2.17.2 (Apple Git-113) In-Reply-To: <51e79597-21ef-3073-9036-cfc33291f395@lca.pw> References: <51e79597-21ef-3073-9036-cfc33291f395@lca.pw> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP On an arm64 ThunderX2 server, the first kmemleak scan would crash [1] with CONFIG_DEBUG_VM_PGFLAGS=y due to page_to_nid() found a pfn that is not directly mapped (MEMBLOCK_NOMAP). Hence, the page->flags is uninitialized. This is due to the commit 9f1eb38e0e11 ("mm, kmemleak: little optimization while scanning") starts to use pfn_to_online_page() instead of pfn_valid(). However, in the CONFIG_MEMORY_HOTPLUG=y case, pfn_to_online_page() does not call memblock_is_map_memory() while pfn_valid() does. [1] [ 102.195320] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000006 [ 102.204113] Mem abort info: [ 102.206921] ESR = 0x96000005 [ 102.209997] Exception class = DABT (current EL), IL = 32 bits [ 102.215926] SET = 0, FnV = 0 [ 102.218993] EA = 0, S1PTW = 0 [ 102.222150] Data abort info: [ 102.225047] ISV = 0, ISS = 0x00000005 [ 102.228887] CM = 0, WnR = 0 [ 102.231866] user pgtable: 64k pages, 48-bit VAs, pgdp = (____ptrval____) [ 102.238572] [0000000000000006] pgd=0000000000000000, pud=0000000000000000 [ 102.245448] Internal error: Oops: 96000005 [#1] SMP [ 102.264062] CPU: 60 PID: 1408 Comm: kmemleak Not tainted 5.0.0-rc2+ #8 [ 102.280403] pstate: 60400009 (nZCv daif +PAN -UAO) [ 102.280409] pc : page_mapping+0x24/0x144 [ 102.280415] lr : __dump_page+0x34/0x3dc [ 102.292923] sp : ffff00003a5cfd10 [ 102.296229] x29: ffff00003a5cfd10 x28: 000000000000802f [ 102.301533] x27: 0000000000000000 x26: 0000000000277d00 [ 102.306835] x25: ffff000010791f56 x24: ffff7fe000000000 [ 102.312138] x23: ffff000010772f8b x22: ffff00001125f670 [ 102.317442] x21: ffff000011311000 x20: ffff000010772f8b [ 102.322747] x19: fffffffffffffffe x18: 0000000000000000 [ 102.328049] x17: 0000000000000000 x16: 0000000000000000 [ 102.333352] x15: 0000000000000000 x14: ffff802698b19600 [ 102.338654] x13: ffff802698b1a200 x12: ffff802698b16f00 [ 102.343956] x11: ffff802698b1a400 x10: 0000000000001400 [ 102.349260] x9 : 0000000000000001 x8 : ffff00001121a000 [ 102.354563] x7 : 0000000000000000 x6 : ffff0000102c53b8 [ 102.359868] x5 : 0000000000000000 x4 : 0000000000000003 [ 102.365173] x3 : 0000000000000100 x2 : 0000000000000000 [ 102.370476] x1 : ffff000010772f8b x0 : ffffffffffffffff [ 102.375782] Process kmemleak (pid: 1408, stack limit = 0x(____ptrval____)) [ 102.382648] Call trace: [ 102.385091] page_mapping+0x24/0x144 [ 102.388659] __dump_page+0x34/0x3dc [ 102.392140] dump_page+0x28/0x4c [ 102.395363] kmemleak_scan+0x4ac/0x680 [ 102.399106] kmemleak_scan_thread+0xb4/0xdc [ 102.403285] kthread+0x12c/0x13c [ 102.406509] ret_from_fork+0x10/0x18 [ 102.410080] Code: d503201f f9400660 36000040 d1000413 (f9400661) [ 102.416357] ---[ end trace 4d4bd7f573490c8e ]--- [ 102.420966] Kernel panic - not syncing: Fatal exception [ 102.426293] SMP: stopping secondary CPUs [ 102.431830] Kernel Offset: disabled [ 102.435311] CPU features: 0x002,20000c38 [ 102.439223] Memory Limit: none [ 102.442384] ---[ end Kernel panic - not syncing: Fatal exception ]--- Fixes: 2d070eab2e82 ("mm: consider zone which is not fully populated to have holes") Signed-off-by: Qian Cai --- include/linux/memory_hotplug.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 07da5c6c5ba0..b8b36e6ac43b 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h @@ -26,7 +26,7 @@ struct vmem_altmap; struct page *___page = NULL; \ unsigned long ___nr = pfn_to_section_nr(pfn); \ \ - if (___nr < NR_MEM_SECTIONS && online_section_nr(___nr))\ + if (online_section_nr(___nr) && pfn_valid(pfn)) \ ___page = pfn_to_page(pfn); \ ___page; \ })