Received: by 2002:a05:7412:b10a:b0:f3:1519:9f41 with SMTP id az10csp2896165rdb; Mon, 4 Dec 2023 10:20:14 -0800 (PST) X-Google-Smtp-Source: AGHT+IFdkDb0bt1DXODrji+IQjpc3gpjHJj9vwZ2UVihBDtb5SGBYBy0dBHvWLUmAOXBQY1X6SeC X-Received: by 2002:a17:90b:3908:b0:285:93d4:1d0 with SMTP id ob8-20020a17090b390800b0028593d401d0mr1707168pjb.6.1701714013710; Mon, 04 Dec 2023 10:20:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701714013; cv=none; d=google.com; s=arc-20160816; b=09ZYVghnGk3UNV9rSfOctapb8/J99TPyB36lB6KcpXnWYb5y/bQ7w2aflowJHu4Uuo 4uTyV/DaUlQDQ7dFgM9+g+KfKIt2eZMtHAxlLKcXoVbgV7HNg8vJSzDGI79frs3dIiMi bFqlxhdI0G43aMcPNlAi7/zAWiwk6ZgYsZG1OMYznQmks+edPddiSMljS5GQI762KRki KQI2yototA/LvgRHpMh3ABMNKafM/YXjcHhx1s1+PrKIarnWgppGayB4gBmSz+AbEsmP R6qrXrCo69PEo4p4tCCBoqMNQjVaeMO5CTOX+bMzRxFuvCyOspJI0I8DdABEhyN/4oYP Wplw== 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 :message-id:date:subject:cc:to:from:dkim-signature:dkim-filter; bh=hapnOCz7N50/xiqT9sjD7kWuwPtxGk7RX/cUkNtJPic=; fh=Rd6HdvXkAQOeO9wzvJ4xPYhZ10H20VMbGiok+pAFBP0=; b=ivihh+6KWecmiTuoV7wWaNHewD+zDtHhJsPZzPm+r4fkSsFxH6SHZAq5vnmw6wVUDc /uhqSclEXR3cfYf923GpqfnzKkGMGOZfEducV9Ws0Q7gg8Zd1zGTp+22bXZnmlQPFrWO 49kNFQggrSvj8okcSC8hJr+tc1k2IkMvQzuUn+xTwHQLDVDgE0eK+094AYr1maexTjNw J9j0jI2IraMyyCWdeoSUzc0l4F4NK7s+FYVI0OsZzoyhKAjCFVf0zzQ0au2Ymw5pVZMa UykAoMBH270KoukcMMeMtLu+QHz3T/a7kpqwhT++RznDOvXULOiV/yKxYpfysc6Tg6YG jlBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ispras.ru header.s=default header.b=jZskYT+X; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ispras.ru Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id s5-20020a170902ea0500b001cfb14a09a2si8383575plg.457.2023.12.04.10.20.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Dec 2023 10:20:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@ispras.ru header.s=default header.b=jZskYT+X; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ispras.ru Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id A893E8056939; Mon, 4 Dec 2023 10:20:10 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231803AbjLDSTz (ORCPT + 99 others); Mon, 4 Dec 2023 13:19:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48426 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229518AbjLDSTy (ORCPT ); Mon, 4 Dec 2023 13:19:54 -0500 Received: from mail.ispras.ru (mail.ispras.ru [83.149.199.84]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 46324AA; Mon, 4 Dec 2023 10:19:59 -0800 (PST) Received: from localhost.ispras.ru (unknown [10.10.165.9]) by mail.ispras.ru (Postfix) with ESMTPSA id 176CB40F1DE9; Mon, 4 Dec 2023 18:19:56 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 mail.ispras.ru 176CB40F1DE9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ispras.ru; s=default; t=1701713996; bh=hapnOCz7N50/xiqT9sjD7kWuwPtxGk7RX/cUkNtJPic=; h=From:To:Cc:Subject:Date:From; b=jZskYT+XqqFEn/TsdlSKf3xUncApwt4Zq8OjXuB0tBwvGcf1MxQmyjrTqUzDMRZ40 6xmsz1HQ0CoIP3gR/z1wJ2rMDw8vEgBhnAQxdCLWHlmbPyIsOBNiFTovZFO4Rzo1Il YvPUUuQxfL48lJHbirWNnjJYn7slbaSTlj+lYkr4= From: Fedor Pchelkin To: John Johansen Cc: Fedor Pchelkin , Paul Moore , James Morris , "Serge E. Hallyn" , apparmor@lists.ubuntu.com, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, Alexey Khoroshilov , lvc-project@linuxtesting.org Subject: [PATCH] apparmor: fix possible memory leak in unpack_trans_table Date: Mon, 4 Dec 2023 21:19:44 +0300 Message-ID: <20231204181945.5903-1-pchelkin@ispras.ru> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Mon, 04 Dec 2023 10:20:10 -0800 (PST) If we fail to unpack the transition table then the table elements which have been already allocated are not freed on error path. unreferenced object 0xffff88802539e000 (size 128): comm "apparmor_parser", pid 903, jiffies 4294914938 (age 35.085s) hex dump (first 32 bytes): 20 73 6f 6d 65 20 6e 61 73 74 79 20 73 74 72 69 some nasty stri 6e 67 20 73 6f 6d 65 20 6e 61 73 74 79 20 73 74 ng some nasty st backtrace: [] __kmem_cache_alloc_node+0x1e2/0x2d0 [] __kmalloc_node_track_caller+0x54/0x170 [] kmemdup+0x29/0x60 [] aa_unpack_strdup+0xe5/0x1b0 [] unpack_pdb+0xeb8/0x2700 [] unpack_profile+0x1507/0x4a30 [] aa_unpack+0x36a/0x1560 [] aa_replace_profiles+0x213/0x33c0 [] policy_update+0x261/0x370 [] profile_replace+0x20e/0x2a0 [] vfs_write+0x2af/0xe00 [] ksys_write+0x126/0x250 [] do_syscall_64+0x46/0xf0 [] entry_SYSCALL_64_after_hwframe+0x6e/0x76 Call aa_free_str_table() on error path as was done before the blamed commit. It implements all necessary checks, frees str_table if it is available and nullifies the pointers. Found by Linux Verification Center (linuxtesting.org). Fixes: a0792e2ceddc ("apparmor: make transition table unpack generic so it can be reused") Signed-off-by: Fedor Pchelkin --- security/apparmor/lib.c | 1 + security/apparmor/policy_unpack.c | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/security/apparmor/lib.c b/security/apparmor/lib.c index 4c198d273f09..cd569fbbfe36 100644 --- a/security/apparmor/lib.c +++ b/security/apparmor/lib.c @@ -41,6 +41,7 @@ void aa_free_str_table(struct aa_str_table *t) kfree_sensitive(t->table[i]); kfree_sensitive(t->table); t->table = NULL; + t->size = 0; } } diff --git a/security/apparmor/policy_unpack.c b/security/apparmor/policy_unpack.c index fc21952aca6b..887010692538 100644 --- a/security/apparmor/policy_unpack.c +++ b/security/apparmor/policy_unpack.c @@ -478,6 +478,8 @@ static bool unpack_trans_table(struct aa_ext *e, struct aa_str_table *strs) if (!table) goto fail; + strs->table = table; + strs->size = size; for (i = 0; i < size; i++) { char *str; int c, j, pos, size2 = aa_unpack_strdup(e, &str, NULL); @@ -520,14 +522,11 @@ static bool unpack_trans_table(struct aa_ext *e, struct aa_str_table *strs) goto fail; if (!aa_unpack_nameX(e, AA_STRUCTEND, NULL)) goto fail; - - strs->table = table; - strs->size = size; } return true; fail: - kfree_sensitive(table); + aa_free_str_table(strs); e->pos = saved_pos; return false; } -- 2.43.0