stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Lukasz Majczak <lma@semihalf.com>,
	Lukasz Bartosik <lb@semihalf.com>,
	Stephen Boyd <sboyd@kernel.org>, Sasha Levin <sashal@kernel.org>
Subject: [PATCH 4.19 44/66] clk: fix invalid usage of list cursor in register
Date: Mon, 12 Apr 2021 10:40:50 +0200	[thread overview]
Message-ID: <20210412083959.543477984@linuxfoundation.org> (raw)
In-Reply-To: <20210412083958.129944265@linuxfoundation.org>

From: Lukasz Bartosik <lb@semihalf.com>

[ Upstream commit 8d3c0c01cb2e36b2bf3c06a82b18b228d0c8f5d0 ]

Fix invalid usage of a list_for_each_entry cursor in
clk_notifier_register(). When list is empty or if the list
is completely traversed (without breaking from the loop on one
of the entries) then the list cursor does not point to a valid
entry and therefore should not be used.

The issue was dicovered when running 5.12-rc1 kernel on x86_64
with KASAN enabled:
BUG: KASAN: global-out-of-bounds in clk_notifier_register+0xab/0x230
Read of size 8 at addr ffffffffa0d10588 by task swapper/0/1

CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.12.0-rc1 #1
Hardware name: Google Caroline/Caroline,
BIOS Google_Caroline.7820.430.0 07/20/2018
Call Trace:
 dump_stack+0xee/0x15c
 print_address_description+0x1e/0x2dc
 kasan_report+0x188/0x1ce
 ? clk_notifier_register+0xab/0x230
 ? clk_prepare_lock+0x15/0x7b
 ? clk_notifier_register+0xab/0x230
 clk_notifier_register+0xab/0x230
 dw8250_probe+0xc01/0x10d4
...
Memory state around the buggy address:
 ffffffffa0d10480: 00 00 00 00 00 03 f9 f9 f9 f9 f9 f9 00 00 00 00
 ffffffffa0d10500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 f9
>ffffffffa0d10580: f9 f9 f9 f9 00 00 00 00 00 00 00 00 00 00 00 00
                      ^
 ffffffffa0d10600: 00 00 00 00 00 00 f9 f9 f9 f9 f9 f9 00 00 00 00
 ffffffffa0d10680: 00 00 00 00 00 00 00 00 f9 f9 f9 f9 00 00 00 00
 ==================================================================

Fixes: b2476490ef11 ("clk: introduce the common clock framework")
Reported-by: Lukasz Majczak <lma@semihalf.com>
Signed-off-by: Lukasz Bartosik <lb@semihalf.com>
Link: https://lore.kernel.org/r/20210401225149.18826-1-lb@semihalf.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/clk/clk.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index c5cf9e77fe86..7bb1c6185f20 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -3628,20 +3628,19 @@ int clk_notifier_register(struct clk *clk, struct notifier_block *nb)
 	/* search the list of notifiers for this clk */
 	list_for_each_entry(cn, &clk_notifier_list, node)
 		if (cn->clk == clk)
-			break;
+			goto found;
 
 	/* if clk wasn't in the notifier list, allocate new clk_notifier */
-	if (cn->clk != clk) {
-		cn = kzalloc(sizeof(*cn), GFP_KERNEL);
-		if (!cn)
-			goto out;
+	cn = kzalloc(sizeof(*cn), GFP_KERNEL);
+	if (!cn)
+		goto out;
 
-		cn->clk = clk;
-		srcu_init_notifier_head(&cn->notifier_head);
+	cn->clk = clk;
+	srcu_init_notifier_head(&cn->notifier_head);
 
-		list_add(&cn->node, &clk_notifier_list);
-	}
+	list_add(&cn->node, &clk_notifier_list);
 
+found:
 	ret = srcu_notifier_chain_register(&cn->notifier_head, nb);
 
 	clk->core->notifier_count++;
-- 
2.30.2




  parent reply	other threads:[~2021-04-12  8:43 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-12  8:40 [PATCH 4.19 00/66] 4.19.187-rc1 review Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 01/66] ALSA: aloop: Fix initialization of controls Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 02/66] ASoC: intel: atom: Stop advertising non working S24LE support Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 03/66] nfc: fix refcount leak in llcp_sock_bind() Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 04/66] nfc: fix refcount leak in llcp_sock_connect() Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 05/66] nfc: fix memory " Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 06/66] nfc: Avoid endless loops caused by repeated llcp_sock_connect() Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 07/66] xen/evtchn: Change irq_info lock to raw_spinlock_t Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 08/66] net: ipv6: check for validity before dereferencing cfg->fc_nlinfo.nlh Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 09/66] ia64: fix user_stack_pointer() for ptrace() Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 10/66] nds32: flush_dcache_page: use page_mapping_file to avoid races with swapoff Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 11/66] ocfs2: fix deadlock between setattr and dio_end_io_write Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 12/66] fs: direct-io: fix missing sdio->boundary Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 13/66] parisc: parisc-agp requires SBA IOMMU driver Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 14/66] parisc: avoid a warning on u8 cast for cmpxchg on u8 pointers Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 15/66] ARM: dts: turris-omnia: configure LED[2]/INTn pin as interrupt pin Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 16/66] batman-adv: initialize "struct batadv_tvlv_tt_vlan_data"->reserved field Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 17/66] ice: Increase control queue timeout Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 18/66] net: hso: fix null-ptr-deref during tty device unregistration Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 19/66] net: ensure mac header is set in virtio_net_hdr_to_skb() Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 20/66] net: sched: sch_teql: fix null-pointer dereference Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 21/66] net-ipv6: bugfix - raw & sctp - switch to ipv6_can_nonlocal_bind() Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 22/66] usbip: add sysfs_lock to synchronize sysfs code paths Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 23/66] usbip: stub-dev " Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 24/66] usbip: vudc " Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 25/66] usbip: synchronize event handler with " Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 26/66] i2c: turn recovery error on init to debug Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 27/66] virtio_net: Add XDP meta data support Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 28/66] virtio_net: Do not pull payload in skb->head Greg Kroah-Hartman
2021-04-12  9:12   ` Michael S. Tsirkin
2021-04-12  8:40 ` [PATCH 4.19 29/66] xfrm: interface: fix ipv4 pmtu check to honor ip header df Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 30/66] regulator: bd9571mwv: Fix AVS and DVFS voltage range Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 31/66] net: xfrm: Localize sequence counter per network namespace Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 32/66] ASoC: wm8960: Fix wrong bclk and lrclk with pll enabled for some chips Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 33/66] i40e: Added Asym_Pause to supported link modes Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 34/66] i40e: Fix kernel oops when i40e driver removes VFs Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 35/66] amd-xgbe: Update DMA coherency values Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 36/66] sch_red: fix off-by-one checks in red_check_params() Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 37/66] gianfar: Handle error code at MAC address change Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 38/66] cxgb4: avoid collecting SGE_QBASE regs during traffic Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 39/66] net:tipc: Fix a double free in tipc_sk_mcast_rcv Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 40/66] ARM: dts: imx6: pbab01: Set vmmc supply for both SD interfaces Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 41/66] net/ncsi: Avoid channel_monitor hrtimer deadlock Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 42/66] ASoC: sunxi: sun4i-codec: fill ASoC card owner Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 43/66] soc/fsl: qbman: fix conflicting alignment attributes Greg Kroah-Hartman
2021-04-12  8:40 ` Greg Kroah-Hartman [this message]
2021-04-12  8:40 ` [PATCH 4.19 45/66] clk: fix invalid usage of list cursor in unregister Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 46/66] workqueue: Move the position of debug_work_activate() in __queue_work() Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 47/66] s390/cpcmd: fix inline assembly register clobbering Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 48/66] net/mlx5: Fix placement of log_max_flow_counter Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 49/66] net/mlx5: Fix PBMC register mapping Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 50/66] RDMA/cxgb4: check for ipv6 address properly while destroying listener Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 51/66] clk: socfpga: fix iomem pointer cast on 64-bit Greg Kroah-Hartman
2021-04-12  8:40 ` [PATCH 4.19 52/66] net: sched: bump refcount for new action in ACT replace mode Greg Kroah-Hartman
2021-04-13 10:37   ` Sudip Mukherjee
2021-04-12  8:40 ` [PATCH 4.19 53/66] cfg80211: remove WARN_ON() in cfg80211_sme_connect Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 54/66] net: tun: set tun->dev->addr_len during TUNSETLINK processing Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 55/66] drivers: net: fix memory leak in atusb_probe Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 56/66] drivers: net: fix memory leak in peak_usb_create_dev Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 57/66] net: mac802154: Fix general protection fault Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 58/66] net: ieee802154: nl-mac: fix check on panid Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 59/66] net: ieee802154: fix nl802154 del llsec key Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 60/66] net: ieee802154: fix nl802154 del llsec dev Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 61/66] net: ieee802154: fix nl802154 add llsec key Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 62/66] net: ieee802154: fix nl802154 del llsec devkey Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 63/66] net: ieee802154: forbid monitor for set llsec params Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 64/66] net: ieee802154: forbid monitor for del llsec seclevel Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 65/66] net: ieee802154: stop dump llsec params for monitors Greg Kroah-Hartman
2021-04-12  8:41 ` [PATCH 4.19 66/66] Revert "cifs: Set CIFS_MOUNT_USE_PREFIX_PATH flag on setting cifs_sb->prepath." Greg Kroah-Hartman
2021-04-12 13:12 ` [PATCH 4.19 00/66] 4.19.187-rc1 review Jon Hunter
2021-04-12 22:08 ` Guenter Roeck
2021-04-13  1:37 ` Shuah Khan
2021-04-13  5:41 ` Naresh Kamboju
2021-04-13  8:47 ` Pavel Machek
2021-04-13 10:40 ` Sudip Mukherjee
2021-04-14  2:50 ` Samuel Zou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210412083959.543477984@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=lb@semihalf.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lma@semihalf.com \
    --cc=sashal@kernel.org \
    --cc=sboyd@kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).