Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1125161ybt; Tue, 7 Jul 2020 08:19:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyu9Sk8OA12g5NEGbiwRER9hoBkgA/74k4xqQE9kfG2kdlRdD6F+vluk/l/5ZqlCoAE86uz X-Received: by 2002:aa7:c606:: with SMTP id h6mr60796727edq.363.1594135163776; Tue, 07 Jul 2020 08:19:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594135163; cv=none; d=google.com; s=arc-20160816; b=Bf9OVrkLLEZJKAonc7bomKr399E7dHbPzkgH44KvlUmEPf+gSMUm4KpUpCSRuSnwz1 2TVZGns8M3VUz9oUNumKJx7Z15pVoZtplyio1iJwhYmgv3aMBUH09RFdUvcjgTRconBV JPlnI8nJQCJ6cViL4C7JvXhLHV0VVt0xHTFWQ9FnsQfC5WA2eHfywyGjGH9jBSRz1TqQ yYU1PeEB41wuiVvNDJc3hPUSKmVAnuuoood1hI4TfS1dYI0Qi0igoIMHmHD0upPRr3N1 TbbWmK9CmpXAbLvadj17gOZWe82hkj2jR1UB62Yl2KAvNCbCX6EuYWAiUmzmyanbV4yI u+Fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=+LiOM0LLRrSXEdkWgCWf/aHMakGagnF7DYuKz9NsrPo=; b=wbP/ucmM/VnTm5/dkaCW42um6KslFAdnw1676I9n12eokgdspU+hRNbbWaNsfZHQHT 1Q7OzYXKrp9aSPM9kYkdy5jSucmCtyeLahFzkQNsRGonCl1Bn3MDD//e87wQ2RXzomEy PKdAzrbGE1n4rpR1Hl7PITL4f0sya2+bm5h9xp0OYfkAnMUhpDh1lELbOymAcEuoddi+ OhoMg0hkEng+LjtuE3yLevKXWHzgTjHMi4dj3DzoHAv0lNcECN7zPUjQgcXGN4JyvHtD cBnmGjKV95RIyYVw2VY8H467jD19wWJLq8BKicVpe8+CRVpEz0XI0C2pPHYWbVoxYxo2 /oAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=opRmXq9N; 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 dc14si15042883edb.240.2020.07.07.08.19.00; Tue, 07 Jul 2020 08:19:23 -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=@kernel.org header.s=default header.b=opRmXq9N; 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 S1729069AbgGGPQl (ORCPT + 99 others); Tue, 7 Jul 2020 11:16:41 -0400 Received: from mail.kernel.org ([198.145.29.99]:56082 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729048AbgGGPQi (ORCPT ); Tue, 7 Jul 2020 11:16:38 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 667D820663; Tue, 7 Jul 2020 15:16:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594134997; bh=U+B+7RFkci1f7yxGdvHrTpuTzMDQAB/yfQC6i3ElCu8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=opRmXq9N9zdjCzP3wJfF3ieFGbSx0FxRxJKZioUZwvSOQORX8l5KftfyVVPyyuZvH vlhtaKSwrfN8HBF3lwi1iYwki+CfHSG+MjqdVku6zqWqt/Q6owXNlqdhq/hKC+OQKH R61W2QmfHwe4Ej32p3P6939rfGRpim3ilKWHde74= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Qian Cai , Andrew Morton , Glauber Costa , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Linus Torvalds , Sasha Levin Subject: [PATCH 4.14 08/27] mm/slub: fix stack overruns with SLUB_STATS Date: Tue, 7 Jul 2020 17:15:35 +0200 Message-Id: <20200707145749.371039874@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200707145748.944863698@linuxfoundation.org> References: <20200707145748.944863698@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Qian Cai [ Upstream commit a68ee0573991e90af2f1785db309206408bad3e5 ] There is no need to copy SLUB_STATS items from root memcg cache to new memcg cache copies. Doing so could result in stack overruns because the store function only accepts 0 to clear the stat and returns an error for everything else while the show method would print out the whole stat. Then, the mismatch of the lengths returns from show and store methods happens in memcg_propagate_slab_attrs(): else if (root_cache->max_attr_size < ARRAY_SIZE(mbuf)) buf = mbuf; max_attr_size is only 2 from slab_attr_store(), then, it uses mbuf[64] in show_stat() later where a bounch of sprintf() would overrun the stack variable. Fix it by always allocating a page of buffer to be used in show_stat() if SLUB_STATS=y which should only be used for debug purpose. # echo 1 > /sys/kernel/slab/fs_cache/shrink BUG: KASAN: stack-out-of-bounds in number+0x421/0x6e0 Write of size 1 at addr ffffc900256cfde0 by task kworker/76:0/53251 Hardware name: HPE ProLiant DL385 Gen10/ProLiant DL385 Gen10, BIOS A40 07/10/2019 Workqueue: memcg_kmem_cache memcg_kmem_cache_create_func Call Trace: number+0x421/0x6e0 vsnprintf+0x451/0x8e0 sprintf+0x9e/0xd0 show_stat+0x124/0x1d0 alloc_slowpath_show+0x13/0x20 __kmem_cache_create+0x47a/0x6b0 addr ffffc900256cfde0 is located in stack of task kworker/76:0/53251 at offset 0 in frame: process_one_work+0x0/0xb90 this frame has 1 object: [32, 72) 'lockdep_map' Memory state around the buggy address: ffffc900256cfc80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ffffc900256cfd00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >ffffc900256cfd80: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1 ^ ffffc900256cfe00: 00 00 00 00 00 f2 f2 f2 00 00 00 00 00 00 00 00 ffffc900256cfe80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ================================================================== Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: __kmem_cache_create+0x6ac/0x6b0 Workqueue: memcg_kmem_cache memcg_kmem_cache_create_func Call Trace: __kmem_cache_create+0x6ac/0x6b0 Fixes: 107dab5c92d5 ("slub: slub-specific propagation changes") Signed-off-by: Qian Cai Signed-off-by: Andrew Morton Cc: Glauber Costa Cc: Christoph Lameter Cc: Pekka Enberg Cc: David Rientjes Cc: Joonsoo Kim Link: http://lkml.kernel.org/r/20200429222356.4322-1-cai@lca.pw Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- mm/slub.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mm/slub.c b/mm/slub.c index 66b7987129337..09d4cc4391bb2 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -5601,7 +5601,8 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s) */ if (buffer) buf = buffer; - else if (root_cache->max_attr_size < ARRAY_SIZE(mbuf)) + else if (root_cache->max_attr_size < ARRAY_SIZE(mbuf) && + !IS_ENABLED(CONFIG_SLUB_STATS)) buf = mbuf; else { buffer = (char *) get_zeroed_page(GFP_KERNEL); -- 2.25.1