Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp2233120ybg; Fri, 5 Jun 2020 08:46:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwhZvnZiV6gQU92NeN9U1yF9qjckII4Qxb5TGqMo8VMap+eVmdtWKzZ6BRhuehfQBETIxqx X-Received: by 2002:a17:906:b79a:: with SMTP id dt26mr9835195ejb.422.1591372002576; Fri, 05 Jun 2020 08:46:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591372002; cv=none; d=google.com; s=arc-20160816; b=p1rJLFrZ0P7HYdYHdOOuABsQeRYZlfqkbA2Snrm4yzdguvT/9oBfVTijRTajGTXnrd skzS6R1nVaatEWBO354773oITlL9IDalIu4Tb2R4Z83RIuADKQmRdUUc7R8qiX1cVaWL w+a3iEjngC/2Yu5tA5Ofw1KbuMbpYIBEMJ1xJ3uMWan5EqsonsJXgy4u6CxFqqfj2Yt7 5c1PeHXviHXu/EY/dUEQujo2RbIUVS+oggHVNwSSik1qalsDHaQ1iux0SM5Fo0Iboord kcXbDQXekgaOxMdvd0DLqbxAkVTNZa2+VJLvjYRv0ukTeyaCxuL3rqUy1ZAafRzy4tzH BTow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=1mULMROuThJEJ5mn2BpH3TCtjO6X9vn9NXYKq1SVXCQ=; b=j6+pYV7FZpu2j/81zqfOzxsnZQpndJaRVPAzsJ8SzIHcLKqUi2K+vKct7LFW8PGH1F EeCi30bUcT9m1duRNQaB6GeK0RSWN2Bjgfse06yEmPgsfFRqU6h6vWrGmbFjR4+o3U5y RLN/4kht2t0E5UxCqIP8SUqVR1YnMSrgHXiDZYVTOce1/044ZrrMzsgW/vP4fYrgBYjU ZjPDVSZeqz2ye1SxPBcqnI3ONb6Ua0ykrMagCOq9DW6byaFzO68PVw3J3rd7XgDob0C2 a7CoRXKom5Gj5cc7GV5A7zcJiXn8HJQyD6eYxK7rUIbcOFT5IyiLLRPPBsJNAIAeCm38 bgfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=NikDzLOK; 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=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p20si4051051ejj.553.2020.06.05.08.46.20; Fri, 05 Jun 2020 08:46:42 -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=@chromium.org header.s=google header.b=NikDzLOK; 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=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728237AbgFEPoM (ORCPT + 99 others); Fri, 5 Jun 2020 11:44:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726802AbgFEPoL (ORCPT ); Fri, 5 Jun 2020 11:44:11 -0400 Received: from mail-pj1-x1043.google.com (mail-pj1-x1043.google.com [IPv6:2607:f8b0:4864:20::1043]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D3630C08C5C3 for ; Fri, 5 Jun 2020 08:44:11 -0700 (PDT) Received: by mail-pj1-x1043.google.com with SMTP id q24so2884945pjd.1 for ; Fri, 05 Jun 2020 08:44:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=1mULMROuThJEJ5mn2BpH3TCtjO6X9vn9NXYKq1SVXCQ=; b=NikDzLOKEbkdHl/a+qsn72HQQdgG4lUWew7gJeKOem2r+jk/zX/zfvHnv0NNmhzFm7 zYt45PiWRzHSua6gEBvhxICbkJ5xlf/RiDfUJZz+Pg7FKaHqMzUC7gOAd2VZzDeTZ/8/ QO+Gu1UWhZuFTFXNwtbOJqb0F1nglhXU1rzYA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=1mULMROuThJEJ5mn2BpH3TCtjO6X9vn9NXYKq1SVXCQ=; b=PFzYHAA74S7fXKFnzbKoUNNHaypAHLB40eu9cc68eIeEtTFTbA/Le9zqmecJkk8Lyr yqYYOztvOhs0MF8L/HXivnM1cV+0LGVwbC163/aLwwiir8hQ07HUHsn/dDwZntxfrFHA aocZVyo+z1qXxaJSQpFEbXpKZQ7jvZ1Rq8xCk5fxMtRRWxoRYesqEu3aSeq2SJ+dXsrd kI5sgmFlJJ69M1eWl2VQaZAV9iTC1AVXhNdZSG0F5KkLI/QfhHVwmHoYCu5c+2wNBnL+ Q+PV3koJ01IDCUFl/PnqxFlPOwjplmoPWKyUjnNAiiLQegCbmHWFnCpFWYdJbkdvig7Z X8VA== X-Gm-Message-State: AOAM533bKv7GZnNN+vi+rUVIJIB7AcdAYrv86Q+Qb08YTAdrBbs8Lhvb Jqjqg7bp7w8LBd+Xzj7P91FlWQ== X-Received: by 2002:a17:90a:f694:: with SMTP id cl20mr3815256pjb.141.1591371851304; Fri, 05 Jun 2020 08:44:11 -0700 (PDT) Received: from www.outflux.net (smtp.outflux.net. [198.145.64.163]) by smtp.gmail.com with ESMTPSA id w190sm39003pfw.35.2020.06.05.08.44.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2020 08:44:09 -0700 (PDT) Date: Fri, 5 Jun 2020 08:44:08 -0700 From: Kees Cook To: Vegard Nossum Cc: Vlastimil Babka , "Rafael J. Wysocki" , Robert Moore , Erik Kaneda , "Rafael J. Wysocki" , Christoph Lameter , Andrew Morton , Marco Elver , Waiman Long , LKML , Linux MM , ACPI Devel Maling List , Len Brown , Steven Rostedt Subject: Re: slub freelist issue / BUG: unable to handle page fault for address: 000000003ffe0018 Message-ID: <202006050828.F85A75D13@keescook> References: <7839183d-1c0b-da02-73a2-bf5e1e8b02b9@suse.cz> <94296941-1073-913c-2adb-bf2e41be9f0f@oracle.com> <202006041054.874AA564@keescook> <34455dce-6675-1fc2-8d61-45bf56f3f554@suse.cz> <6b2b149e-c2bc-f87a-ea2c-3046c5e39bf9@oracle.com> <894e8cee-33df-1f63-fb12-72dceb024ea7@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <894e8cee-33df-1f63-fb12-72dceb024ea7@oracle.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jun 05, 2020 at 04:44:51PM +0200, Vegard Nossum wrote: > On 2020-06-05 16:08, Vlastimil Babka wrote: > > On 6/5/20 3:12 PM, Rafael J. Wysocki wrote: > > > On Fri, Jun 5, 2020 at 2:48 PM Vegard Nossum wrote: > > > > > > > > On 2020-06-05 11:36, Vegard Nossum wrote: > > > > > > > > > > On 2020-06-05 11:11, Vlastimil Babka wrote: > > > > > > So, with Kees' patch reverted, booting with slub_debug=F (or even more > > > > > > specific slub_debug=F,ftrace_event_field) also hits this bug below. I > > > > > > wanted to bisect it, but v5.7 was also bad, and also v5.6. Didn't try > > > > > > further in history. So it's not new at all, and likely very specific to > > > > > > your config+QEMU? (and related to the ACPI error messages that precede > > > > > > it?). > > [...] > > [ 0.140408] ------------[ cut here ]------------ > > [ 0.140837] cache_from_obj: Wrong slab cache. Acpi-Namespace but object is from kmalloc-64 > > [ 0.141406] WARNING: CPU: 0 PID: 1 at mm/slab.h:524 kmem_cache_free+0x1d3/0x250 Ah yes! Good. I had improved this check recently too, and I was worried the freelist pointer patch was somehow blocking it, but I see now that the failing config didn't have CONFIG_SLAB_FREELIST_HARDENED=y. Once SLAB_CONSISTENCY_CHECKS was enabled ("slub_debug=F"), it started tripping. Whew. I wonder if that entire test block should just be removed from cache_from_obj(): if (!memcg_kmem_enabled() && !IS_ENABLED(CONFIG_SLAB_FREELIST_HARDENED) && !unlikely(s->flags & SLAB_CONSISTENCY_CHECKS)) return s; and make this test unconditional? It's mostly only called during free(), and shouldn't be too expensive to be made unconditional. Hmm. > > And it seems ACPI is allocating an object via kmalloc() and then freeing it > > via kmem_cache_free(<"Acpi-Namespace" kmem_cache>) which is wrong. > > > > > ./scripts/faddr2line vmlinux 'acpi_ns_root_initialize+0xb6' > > acpi_ns_root_initialize+0xb6/0x2d1: > > kmalloc at include/linux/slab.h:555 > > (inlined by) kzalloc at include/linux/slab.h:669 > > (inlined by) acpi_os_allocate_zeroed at include/acpi/platform/aclinuxex.h:57 > > (inlined by) acpi_ns_root_initialize at drivers/acpi/acpica/nsaccess.c:102 > > > > That's it :-) This fixes it for me: > > diff --git a/drivers/acpi/acpica/nsaccess.c b/drivers/acpi/acpica/nsaccess.c > index 2566e2d4c7803..b76bbab917941 100644 > --- a/drivers/acpi/acpica/nsaccess.c > +++ b/drivers/acpi/acpica/nsaccess.c > @@ -98,14 +98,12 @@ acpi_status acpi_ns_root_initialize(void) > * predefined names are at the root level. It is much easier > to > * just create and link the new node(s) here. > */ > - new_node = > - ACPI_ALLOCATE_ZEROED(sizeof(struct > acpi_namespace_node)); > + new_node = acpi_ns_create_node(*ACPI_CAST_PTR (u32, > init_val->name)); > if (!new_node) { > status = AE_NO_MEMORY; > goto unlock_and_exit; > } > > - ACPI_COPY_NAMESEG(new_node->name.ascii, init_val->name); > new_node->descriptor_type = ACPI_DESC_TYPE_NAMED; > new_node->type = init_val->type; I'm a bit confused by the internals of acpi_ns_create_note(). It can still end up calling ACPI_ALLOCATE_ZEROED() via acpi_os_acquire_object(). Is this fix correct? -- Kees Cook