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=-10.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 1B786C07E99 for ; Tue, 6 Jul 2021 00:04:40 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 7F262613F3 for ; Tue, 6 Jul 2021 00:04:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7F262613F3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=axtens.net Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id CF0AF6B0011; Mon, 5 Jul 2021 20:04:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CA11B6B006C; Mon, 5 Jul 2021 20:04:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B419D6B0070; Mon, 5 Jul 2021 20:04:38 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0087.hostedemail.com [216.40.44.87]) by kanga.kvack.org (Postfix) with ESMTP id 923196B0011 for ; Mon, 5 Jul 2021 20:04:38 -0400 (EDT) Received: from smtpin01.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 0F9ED824999B for ; Tue, 6 Jul 2021 00:04:38 +0000 (UTC) X-FDA: 78330216636.01.A5A21EE Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) by imf24.hostedemail.com (Postfix) with ESMTP id A5983B00009D for ; Tue, 6 Jul 2021 00:04:37 +0000 (UTC) Received: by mail-pg1-f173.google.com with SMTP id a2so19755525pgi.6 for ; Mon, 05 Jul 2021 17:04:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axtens.net; s=google; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version; bh=B0opPtpn0MNnkL5QbMS6eUOeWPJf+0ldaSgcF59HYA4=; b=rDvuIPBcKPjkepsgjPn44C4yQRaf+WLhKR4W/De1j6JU3nv7+1hd/0rYG0LUC2yAK6 S5xY/5rVenP0Xg0JVAJNaqWNRIUsd/FxtcC0+QhuCZHgfNqRm7t9SLgmFdv8LV7l2z4Y s/WWD7nyzEbPtvFmRsJyYKkDg6Y8MMbIOKFWM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=B0opPtpn0MNnkL5QbMS6eUOeWPJf+0ldaSgcF59HYA4=; b=P8/V0GSFOw28GrBuE2PwZR7m55DM81JexnctM+vkBn4+XmBXmF7D5gpHGazazV5+od Wm0h405B2Xjux25bazOdVK4cHq54qQZWWbV5aZ9dj2zPp4+wcfoz9SoyzUFLrCGxjdhJ qjm3AbgsK9vtlbu76kYtVGaRmL2fAFyclhHxSMaplGsIN1ivTq8F7f31d7PENEwRM0kM eQC49lBQW+mS316mJ5Ju8tuyq9fQQEALZ9RGMR4D1AQ6s5NqD3jrikpipz7UBgRh0vlD DxEy/LvfDzAk+XGdoSQqT3Mb6eywmN3PQFvMbH/YgcmlUkXIYZyMtfkofAKST0SnYfWW NiKw== X-Gm-Message-State: AOAM533tL3yaK1WoeUYBc1zCuuNT0YNfZqShj9ZSze6v9Ulu+QAU7HKt r7Gx4zbkLlnqaZ5YNyhx6QjfUg== X-Google-Smtp-Source: ABdhPJzsW453AAcxAxcneEUrf/hQOKjTL0dsqQy+AVo4DrwoM4eBEPWI17dzJRLwl18dB7vcWF6ggA== X-Received: by 2002:a63:1d42:: with SMTP id d2mr18120359pgm.21.1625529876564; Mon, 05 Jul 2021 17:04:36 -0700 (PDT) Received: from localhost ([203.206.29.204]) by smtp.gmail.com with ESMTPSA id 199sm13077375pfy.203.2021.07.05.17.04.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jul 2021 17:04:35 -0700 (PDT) From: Daniel Axtens To: Marco Elver , Kefeng Wang Cc: Catalin Marinas , Will Deacon , Andrey Ryabinin , Andrey Konovalov , Dmitry Vyukov , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Subject: Re: [PATCH -next 3/3] kasan: arm64: Fix pcpu_page_first_chunk crash with KASAN_VMALLOC In-Reply-To: References: <20210705111453.164230-1-wangkefeng.wang@huawei.com> <20210705111453.164230-4-wangkefeng.wang@huawei.com> Date: Tue, 06 Jul 2021 10:04:31 +1000 Message-ID: <87bl7gxq7k.fsf@dja-thinkpad.axtens.net> MIME-Version: 1.0 Content-Type: text/plain X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: A5983B00009D Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=axtens.net header.s=google header.b=rDvuIPBc; spf=pass (imf24.hostedemail.com: domain of dja@axtens.net designates 209.85.215.173 as permitted sender) smtp.mailfrom=dja@axtens.net; dmarc=none X-Stat-Signature: 4ooybodbfyjjrj48hz6tec89rsidu543 X-HE-Tag: 1625529877-152613 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: Hi, Marco Elver writes: > On Mon, Jul 05, 2021 at 07:14PM +0800, Kefeng Wang wrote: > [...] >> +#ifdef CONFIG_KASAN_VMALLOC >> +void __init __weak kasan_populate_early_vm_area_shadow(void *start, >> + unsigned long size) > > This should probably not be __weak, otherwise you now have 2 __weak > functions. > >> +{ >> + unsigned long shadow_start, shadow_end; >> + >> + if (!is_vmalloc_or_module_addr(start)) >> + return; >> + >> + shadow_start = (unsigned long)kasan_mem_to_shadow(start); >> + shadow_start = ALIGN_DOWN(shadow_start, PAGE_SIZE); >> + shadow_end = (unsigned long)kasan_mem_to_shadow(start + size); >> + shadow_end = ALIGN(shadow_end, PAGE_SIZE); >> + kasan_map_populate(shadow_start, shadow_end, >> + early_pfn_to_nid(virt_to_pfn(start))); >> +} >> +#endif > > This function looks quite generic -- would any of this also apply to > other architectures? I see that ppc and sparc at least also define > CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK. So I checked with my latest KASAN ppc64 series and my code also breaks in a very similar way if you boot with percpu_alloc=page. It's not something I knew about or tested with before! Unfortunately kasan_map_populate - despite having a very generic-sounding name - is actually arm64 specific. I don't know if kasan_populate_early_shadow (which is generic) would be able to fill the role or not. If we could keep it generic that would be better. It looks like arm64 does indeed populate the kasan_early_shadow_p{te,md..} values, but I don't really understand what it's doing - is it possible to use the generic kasan_populate_early_shadow on arm64? If so, should we put the call inside of vm_area_register_early? Kind regards, Daniel > >> void __init kasan_init(void) >> { >> kasan_init_shadow(); >> diff --git a/include/linux/kasan.h b/include/linux/kasan.h >> index 5310e217bd74..79d3895b0240 100644 >> --- a/include/linux/kasan.h >> +++ b/include/linux/kasan.h >> @@ -49,6 +49,8 @@ extern p4d_t kasan_early_shadow_p4d[MAX_PTRS_PER_P4D]; >> int kasan_populate_early_shadow(const void *shadow_start, >> const void *shadow_end); >> >> +void kasan_populate_early_vm_area_shadow(void *start, unsigned long size); >> + >> static inline void *kasan_mem_to_shadow(const void *addr) >> { >> return (void *)((unsigned long)addr >> KASAN_SHADOW_SCALE_SHIFT) >> diff --git a/mm/kasan/init.c b/mm/kasan/init.c >> index cc64ed6858c6..d39577d088a1 100644 >> --- a/mm/kasan/init.c >> +++ b/mm/kasan/init.c >> @@ -279,6 +279,11 @@ int __ref kasan_populate_early_shadow(const void *shadow_start, >> return 0; >> } >> >> +void __init __weak kasan_populate_early_vm_area_shadow(void *start, >> + unsigned long size) >> +{ >> +} > > I'm just wondering if this could be a generic function, perhaps with an > appropriate IS_ENABLED() check of a generic Kconfig option > (CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK ?) to short-circuit it, if it's > not only an arm64 problem. > > But I haven't looked much further, so would appeal to you to either > confirm or reject this idea. > > Thanks, > -- Marco