Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp4208461pxv; Mon, 5 Jul 2021 17:08:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxgbkJzxF1TDE6oVsaFzPWuxqG+IOZnW8RNWgdw8p2xuWYmb8AWqaHu6KVZ9sE5Z1onhYvM X-Received: by 2002:a05:6402:5154:: with SMTP id n20mr19385295edd.8.1625530111593; Mon, 05 Jul 2021 17:08:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625530111; cv=none; d=google.com; s=arc-20160816; b=U2CQ71bDWnfkYhHcPkEqnpm7oNOVezIkbkCsrbCBOOlLNEUTo12EX3FUCMvqT1dXQU 9A36ny6L5zdBzaTEj8BWpbkG3G5tOnm90jPg3O1KGI9WK/9hz+2F0a0J/E+dtgfMRdP1 K93osiIfK2SW/ncDal4ZS41DxKP+XhvtVNuhMKimwZ46p0hMeI7Oc032BoNSspSp/DE0 9KpfDOAwaRSLBcMXzxvq1vowBwIcLwRHae0h2a563Cans/np2OBGuYfgj4zFlnYFwecX 0g3ztPjgN7Q5AOreTiBfeiRqK0Wf+xhXBZboH+guCZc9C9evcx5XCSEbwETIDMDELVB+ yTIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:dkim-signature; bh=B0opPtpn0MNnkL5QbMS6eUOeWPJf+0ldaSgcF59HYA4=; b=RWweC42Kws/r0OYYTnLUY+apqeKoLal7lt0hG3XVInMLBYWfFPs+nBEPl1+j44gkz0 uDaoUy9f98kKZkSPf957CGWSvZFVrFNI4ao1FsExuekVpLxorj3SGMrz0MlGujno6r5b q4Fv+4m5Vdw3lzEolC4TILdik0s+dsasNeTiv5ixlZs25BfVIDVSwJF5i7IkEhPQxS1W It9bejHrElQdaWkPJxhQUiY6pgB4A6cxw+VchkedZjqjDRtkJdbZFSWrpGxv2dJG8Ydm kq0+K/Hm+8+8D6lcP8ku82OUB0pM1cY5hUOi3MwJ4eZ30xMrwNzPXxxm1Bnr1/dr9U4e 62tw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@axtens.net header.s=google header.b=rDvuIPBc; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id jg12si4547248ejc.724.2021.07.05.17.08.08; Mon, 05 Jul 2021 17:08:31 -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; dkim=pass header.i=@axtens.net header.s=google header.b=rDvuIPBc; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229783AbhGFAHS (ORCPT + 99 others); Mon, 5 Jul 2021 20:07:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37400 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229743AbhGFAHP (ORCPT ); Mon, 5 Jul 2021 20:07:15 -0400 Received: from mail-pg1-x532.google.com (mail-pg1-x532.google.com [IPv6:2607:f8b0:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 06C0DC061574 for ; Mon, 5 Jul 2021 17:04:37 -0700 (PDT) Received: by mail-pg1-x532.google.com with SMTP id h4so19742685pgp.5 for ; Mon, 05 Jul 2021 17:04:36 -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=Zw8G/nBluFONH79bgfTM/ITezIQCMGEDwz9XzQNowzjiCsMQHO1u5JMj8hMNhOD7VH nPxEmJdrup1ahzNYBng9U6dbwoSzrfhNlwWfKnCtHdpp4Uv7Sf2iwJI5vtB8b3qjwRO8 l4r0i3D+Zx/ULSKnutHMUKKa94yrdi/DA5rEJOtq9nWacyRY+OWn+ifVvvGJSY2FBRCe HoBywWpabRoWHle8OFGdnnwuJz+UPigwq5tOOzvZzhjs0oh0K4Xm7sjm6Wsp4gd6+o9G 9iMrFUBy1GeQX4jX1OkEO8a6pd9V37cK/ouRDuS4ufg8QMCVllO//ksw/Upxj4W+DHOR qIww== X-Gm-Message-State: AOAM532exVgQkEA4/FR5fSKzgwjAKTsGtSCVTSLm627Mhp98/TlvJ1nO 6todrBR63aNIFMEptZmTQx8xEg== 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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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