From patchwork Fri Mar 21 20:40:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kees Cook X-Patchwork-Id: 14026038 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 31039C36000 for ; Fri, 21 Mar 2025 20:41:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 38BA5280006; Fri, 21 Mar 2025 16:41:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E37BE280009; Fri, 21 Mar 2025 16:41:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7B008280005; Fri, 21 Mar 2025 16:41:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 03C3A280007 for ; Fri, 21 Mar 2025 16:41:10 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 7DF53120628 for ; Fri, 21 Mar 2025 20:41:12 +0000 (UTC) X-FDA: 83246727984.18.5957B1D Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf14.hostedemail.com (Postfix) with ESMTP id 5B761100007 for ; Fri, 21 Mar 2025 20:41:10 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=gxz0E025; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf14.hostedemail.com: domain of kees@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=kees@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742589670; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=PPkUnrSTs7eBzxDj/wX7E0xKPwOUI4fwg7s+cY4+sq0=; b=HGEHzNmvbzNkm+owmK+IQ3gttql6RxG1eQZqRs19N0XZoIQvy92PBNZKDVtUk4ESkiLMJK R0E3bhUV+p6+hrtqi6ogkFtvLX+eC7zORcj6V7jlxW2KSaWhCKBhbEpL93++Qb35Pj+szP nmEuicX7yGmBj35saXQu3F42F7tNrEc= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=gxz0E025; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf14.hostedemail.com: domain of kees@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=kees@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742589670; a=rsa-sha256; cv=none; b=MnYHfxEIhCWxKWzaO5T4W3V0BoHUMJf6Wz1l6wBs1sBzf6VsnPtSeKskLUyuQop4HvCtKQ 5u0LW5oIibIddiXybi+pcnepfGHw0AayM5S0C9uOP0GbIdW+iKa+cUSbE7/OoTfP6MdDI6 2uMr1hYXTL/eFFgN0dvlsO+WPW7l56U= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 524945C6EB1; Fri, 21 Mar 2025 20:38:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E8979C4CEE7; Fri, 21 Mar 2025 20:41:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742589669; bh=JVAu52DHGpijIKeMcuzb7s5YInM6xKk7XO0za9QqBbA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gxz0E025PiYrfenRJPrd1ufKEJqvcOTAsfkSMzPCpgltkP2SUgsQS12N2c8EljgSz zgiVI09srPYhEvOSSgXs5ROaeBYP6SZ7+Fw2YfxQY4i6Ba+7+YcK8mAt2c5d8HuHJ0 Tqh1R3CWTFRJqO4UmegO0hwzusA2xwrmzI9ZQw8roHcweLlbDqkvi+6xBnrniP2oAU BtFiZ+/kQKLLAtFQoGjWoycNyW6GcrT2YXFTX09LE9fFdBY5FGbtkTS5xP5QB8sNqK GMxxzC1y+w8ynUfTcHOa0OSGAo1vnpeMXTa4QG5mmenTP67xq+mJahEu6YMIhSoi2K J59rxHLdvxdcw== From: Kees Cook To: Vlastimil Babka Cc: Kees Cook , Christoph Lameter , Miguel Ojeda , Nathan Chancellor , Marco Elver , Nick Desaulniers , Przemek Kitszel , Pekka Enberg , David Rientjes , Joonsoo Kim , Andrew Morton , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-hardening@vger.kernel.org Subject: [PATCH 1/5] treewide: Replace kfree() casts with union members Date: Fri, 21 Mar 2025 13:40:57 -0700 Message-Id: <20250321204105.1898507-1-kees@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250321202620.work.175-kees@kernel.org> References: <20250321202620.work.175-kees@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3631; i=kees@kernel.org; h=from:subject; bh=JVAu52DHGpijIKeMcuzb7s5YInM6xKk7XO0za9QqBbA=; b=owGbwMvMwCVmps19z/KJym7G02pJDOl3z922vz9LcHfWgx0Ss1JsLgmpPp+5tXNXes5RydM5O qfcave4dpSyMIhxMciKKbIE2bnHuXi8bQ93n6sIM4eVCWQIAxenAEzkhC0jw/9bu8RStOIP8nvI Tuat5NF6IfXqVwb7L4WpryOU8ibcqGFkeFnXW3rnoek685fphrnRuqmihr3NCzmtNWMdb+wo3vG NFQA= X-Developer-Key: i=kees@kernel.org; a=openpgp; fpr=A5C3F68F229DD60F723E6E138972F4DFDC6DC026 X-Rspamd-Server: rspam01 X-Stat-Signature: u9ofkcen38fpytfyfe6wjn9tsjea7y1j X-Rspam-User: X-Rspamd-Queue-Id: 5B761100007 X-HE-Tag: 1742589670-792083 X-HE-Meta: U2FsdGVkX18U2FNLtHR6O6zWauaZqjVfUyoERHM6iBkHDV+mUy0nImaBghnVTzo6eeEbD+/fhVNMAayejfjEBV96Nqoj/Vkyeg3UdlwwL42XWXlh4BA5m9piGKyjGq6Q+ZAtHmldLUx3ENDzmlZYpFiE5edNJ1Otg2/kHnIWYDtNjN4T243WCMR1J8047PFCzUXUcLqhEfBkgWNyayfh0CGdXixfeH2g7et0/y+tsZapLj88UZ2fEzyT/HZE1oKugTyWbp5XSsUZPMozC5sw/HshlaDhJckz8WUrAdBRQZHTkqo/4n5ZvWK3HrfQ2jNYefC0jd1lrteNJphySDz0/3ZbB/LN6wBEoJsRAAz1J2mvHSgTAcAK1Tn4TtOPPtmlS8L3eeDwPiY89pXkkJErgkFLOVggZpuaLg5kre6n0CzC1OZSkl08x5XBnthS8nYwnRGOQVTS7wmgF5ozxfDp1/RryF9GlWt7vMfD9EpZqMaAws02FYRgl1MohThwLL6ORi6kPgi5wqlwBDcvDeeB6NCXzbgSpn2g9kMixDjSE2kuxzZJW2+691edx19mHOtlnExqiaYmyhUPYR0lLRGzQzWJysrLgsIeAOqgweRHd7GDZKsC8pWTkCGMOH5b7024YQVduXlA3gal1RZ/hYdPAdelSsYyw1NQZMdHznX/knBAfTVQOgBNLoAY9mr4r1lq+Mk/6C6DBAp53s0nFVXoTK0M012Nx0SJKUklbsijRtytu+D+zuQmnI9qoVqr5YH2mFxlt5zHJXaGr0XDI+3bIjmmu1ptQZ41KkVfi2OS6tE8yHSY+2sPN5XN3A1js0PxYH94a+ypq3qlz44wCvTonqKJ8KCXU0jKODo/j72/USSPNEYz2uP1jrMi7qIZNZwtLGCT0rO+oQq4RUjX+W3lk/Eackqkd5W+JPymtJ0mCjMdBQrjc5bZhAmeuXQ34lm/A1MoI+p6eqQshDPPsrq TvyZxENf BmKNbo6PhDHuOpBS8YlsopInBsmeZ8RcyAVW/4ee8pF9E2UWTqW3SEy6TbN4nmCW3h7vu5aOgGDjzcxzY3bL9gZgo8zuICdZ9GpRd6cM8fNEDHYdPibEU5kNnHLeopg6sTY5j2WWx5X3ftEmSMLTXG9fCUE/wiTkPOhju7i/QS7KA44iqlg0E456G1gS4lqh0SsiSNUFQz3bNCX2ImOzx4LFaYmciFc1Qwico8NQceDtPy7yxd4jJ5qc4n++TM8HpLSgFAWhh00jcVzX5ih0CrwJoF9n4RDhk3uu/upIEmN1E9IHsZFAlVRVPJg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: As a prerequisite to being able to optionally take the address of any lvalues used in a call to kfree(), replace casts to the kfree() argument with unions to include an actual pointer. This is an example subset. There are another handful remaining: $ git grep '\bkfree((void \*)' arch/mips/alchemy/common/dbdma.c: kfree((void *)ctp->cdb_membase); arch/s390/kernel/crash_dump.c: kfree((void *)(unsigned long)addr); drivers/crypto/atmel-sha204a.c: kfree((void *)i2c_priv->hwrng.priv); drivers/infiniband/hw/cxgb4/mem.c: kfree((void *) (unsigned long) mhp->kva); drivers/isdn/mISDN/fsm.c: kfree((void *) fsm->jumpmatrix); drivers/misc/altera-stapl/altera.c: kfree((void *)vars[variable_id]); drivers/misc/altera-stapl/altera.c: kfree((void *)vars[i]); drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h: kfree((void *)x); \ drivers/net/ethernet/qlogic/qed/qed_main.c: kfree((void *)cdev); drivers/net/usb/cx82310_eth.c: kfree((void *)dev->partial_data); drivers/net/usb/cx82310_eth.c: kfree((void *)dev->partial_data); drivers/scsi/snic/snic_io.c: kfree((void *)rqi->sge_va); drivers/scsi/snic/snic_io.c: kfree((void *)rqi->sge_va); drivers/staging/rtl8723bs/os_dep/os_intfs.c: /* kfree((void *)padapter); */ drivers/video/fbdev/grvga.c: kfree((void *)virtual_start); drivers/video/fbdev/grvga.c: kfree((void *)info->screen_base); drivers/xen/grant-table.c: kfree((void *)page_private(pages[i])); net/ieee802154/nl802154.c: kfree((void *)cb->args[0]); net/sched/em_ipset.c: kfree((void *) em->data); net/sched/em_meta.c: kfree((void *) v->val); Signed-off-by: Kees Cook --- include/linux/netlink.h | 1 + include/net/pkt_cls.h | 5 ++++- net/sched/ematch.c | 2 +- net/wireless/nl80211.c | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/include/linux/netlink.h b/include/linux/netlink.h index c3ae84a77e16..26eb9eea8a74 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h @@ -295,6 +295,7 @@ struct netlink_callback { bool strict_check; union { u8 ctx[NETLINK_CTX_SIZE]; + void * ptr; /* args is deprecated. Cast a struct over ctx instead * for proper type safety. diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index c64fd896b1f9..4faf8d6eed1d 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -403,7 +403,10 @@ struct tcf_ematch_ops; */ struct tcf_ematch { struct tcf_ematch_ops * ops; - unsigned long data; + union { + unsigned long data; + void * ptr; + }; unsigned int datalen; u16 matchid; u16 flags; diff --git a/net/sched/ematch.c b/net/sched/ematch.c index 5c1235e6076a..f4b00e7aca6a 100644 --- a/net/sched/ematch.c +++ b/net/sched/ematch.c @@ -411,7 +411,7 @@ void tcf_em_tree_destroy(struct tcf_ematch_tree *tree) if (em->ops->destroy) em->ops->destroy(em); else if (!tcf_em_is_simple(em)) - kfree((void *) em->data); + kfree(em->ptr); module_put(em->ops->owner); } } diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index d7d3da0f6833..b5a3ae07d84c 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -3270,7 +3270,7 @@ static int nl80211_dump_wiphy(struct sk_buff *skb, struct netlink_callback *cb) static int nl80211_dump_wiphy_done(struct netlink_callback *cb) { - kfree((void *)cb->args[0]); + kfree(cb->ptr); return 0; }