Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp1796915pxp; Mon, 7 Mar 2022 02:33:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJzFawHoz3W8EEfV1wCcErNRYXeFTwMdqkFfI8WSvz3UTxwczj6BVXEvAWzcMk3A7NL+q8A6 X-Received: by 2002:a63:ea48:0:b0:378:af1f:53b4 with SMTP id l8-20020a63ea48000000b00378af1f53b4mr9060085pgk.508.1646649203932; Mon, 07 Mar 2022 02:33:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646649203; cv=none; d=google.com; s=arc-20160816; b=CEUfVLjv/Qoi4cvddU/jo3ZWTKTV/0veHHWZujnNtyHL0VwdRDgKBRIqjNrCwFAMxU C0saQphwRc/Gj3JAEtb7GUiWOVxsJz206don5as/AHfXdjQgLGBZpZIgRQI3D9I9Czow GLRc54HDr4WjPp0qpxsqubaR223QvevrcNv9lTfdCPAKU0xy7nllpDUMvRXVsvv2uVgT /bkMNK4hQxtyydEiMJKpolb4K8nIBK1jw+EeIN/YIAypLgVnqXNfeTAzgCHkX9itfS89 3eR0Mvr8EYOEYn2xNBuh7tfz2eWAgZ1+6+bkkjum9FBmH7vwX59gybfa3uvevsYZysRo 1neQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=3SZ78Ok83NVER9qUu6iwf40u6DUq4x5Dfp2Rnc1A73c=; b=kz68D9DlV2ls6hbajhCR4yogDFtnR/vwOprkntH2YMeauYCDD0shNbmZb2A/bfiCPt l0qeZI25ASMKFIAE2c5aAQVYuGaiX/Y14REfs23278KDqPdRijtAchf4TWFpDMNPtn2K A/zuxHQrs2awXaD2J5tXUy03Z3dwMcUcA3+2eSPoRnNRtgd5bOW71261MMlTlDfY48pv NmXhceBW9KFEEj+Tw3iPn3igf2ZkvT6OWOs96SpcuRBbCZxVrfAqqAfV10jCBUij1O9/ pPrTCa4nHq87V/C3XzMJAPGJqv92yuPivCVHVwNpvDURXemnh9XfTUuUKwRmpoygk+M+ blTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=XKzLqa1H; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h5-20020a17090a710500b001bf0d278ff4si455201pjk.89.2022.03.07.02.33.09; Mon, 07 Mar 2022 02:33:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=XKzLqa1H; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240085AbiCGKF5 (ORCPT + 99 others); Mon, 7 Mar 2022 05:05:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57868 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238230AbiCGJo7 (ORCPT ); Mon, 7 Mar 2022 04:44:59 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C528961A20; Mon, 7 Mar 2022 01:41:42 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 72E0DB8102B; Mon, 7 Mar 2022 09:41:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B4A4FC340E9; Mon, 7 Mar 2022 09:41:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1646646100; bh=SmVEn4GoyNBFLoGjar7lW6qHLF92Ww9k0BA4JayBMZ0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XKzLqa1HFsWdkxPz4EWFnB0/ej0Hcl2SbipmVHGLx+7zv38wIYRaNir7orw9yuO1i 0wYbGZGrpzC9tdEvoa3i+oB0DlppH25iK4Sgkehzr6/fRCu14i0/6NHJoZVxsmEru0 yvjAMPYQL9XE6R2q7seDCfmFRdS8YNG+nwPdGFog= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Andrey Konovalov , Marco Elver , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , Andrey Ryabinin , Andrew Morton , Linus Torvalds , Sasha Levin Subject: [PATCH 5.15 093/262] kasan: fix quarantine conflicting with init_on_free Date: Mon, 7 Mar 2022 10:17:17 +0100 Message-Id: <20220307091705.100178265@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220307091702.378509770@linuxfoundation.org> References: <20220307091702.378509770@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andrey Konovalov [ Upstream commit 26dca996ea7b1ac7008b6b6063fc88b849e3ac3e ] KASAN's quarantine might save its metadata inside freed objects. As this happens after the memory is zeroed by the slab allocator when init_on_free is enabled, the memory coming out of quarantine is not properly zeroed. This causes lib/test_meminit.c tests to fail with Generic KASAN. Zero the metadata when the object is removed from quarantine. Link: https://lkml.kernel.org/r/2805da5df4b57138fdacd671f5d227d58950ba54.1640037083.git.andreyknvl@google.com Fixes: 6471384af2a6 ("mm: security: introduce init_on_alloc=1 and init_on_free=1 boot options") Signed-off-by: Andrey Konovalov Reviewed-by: Marco Elver Cc: Alexander Potapenko Cc: Andrey Konovalov Cc: Dmitry Vyukov Cc: Andrey Ryabinin Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- mm/kasan/quarantine.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mm/kasan/quarantine.c b/mm/kasan/quarantine.c index d8ccff4c1275e..47ed4fc33a29e 100644 --- a/mm/kasan/quarantine.c +++ b/mm/kasan/quarantine.c @@ -132,11 +132,22 @@ static void *qlink_to_object(struct qlist_node *qlink, struct kmem_cache *cache) static void qlink_free(struct qlist_node *qlink, struct kmem_cache *cache) { void *object = qlink_to_object(qlink, cache); + struct kasan_free_meta *meta = kasan_get_free_meta(cache, object); unsigned long flags; if (IS_ENABLED(CONFIG_SLAB)) local_irq_save(flags); + /* + * If init_on_free is enabled and KASAN's free metadata is stored in + * the object, zero the metadata. Otherwise, the object's memory will + * not be properly zeroed, as KASAN saves the metadata after the slab + * allocator zeroes the object. + */ + if (slab_want_init_on_free(cache) && + cache->kasan_info.free_meta_offset == 0) + memzero_explicit(meta, sizeof(*meta)); + /* * As the object now gets freed from the quarantine, assume that its * free track is no longer valid. -- 2.34.1