Patch "wifi: brcmfmac: Check the return value of of_property_read_string_index()" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    wifi: brcmfmac: Check the return value of of_property_read_string_index()

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     wifi-brcmfmac-check-the-return-value-of-of_property_.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit ee0f02f5e812ee9e94abadcdeacd50da720a5ef1
Author: Stefan Dösinger <stefan@xxxxxxxxxxxxxxx>
Date:   Mon Jan 6 20:09:58 2025 +0300

    wifi: brcmfmac: Check the return value of of_property_read_string_index()
    
    [ Upstream commit 082d9e263af8de68f0c34f67b251818205160f6e ]
    
    Somewhen between 6.10 and 6.11 the driver started to crash on my
    MacBookPro14,3. The property doesn't exist and 'tmp' remains
    uninitialized, so we pass a random pointer to devm_kstrdup().
    
    The crash I am getting looks like this:
    
    BUG: unable to handle page fault for address: 00007f033c669379
    PF: supervisor read access in kernel mode
    PF: error_code(0x0001) - permissions violation
    PGD 8000000101341067 P4D 8000000101341067 PUD 101340067 PMD 1013bb067 PTE 800000010aee9025
    Oops: Oops: 0001 [#1] SMP PTI
    CPU: 4 UID: 0 PID: 827 Comm: (udev-worker) Not tainted 6.11.8-gentoo #1
    Hardware name: Apple Inc. MacBookPro14,3/Mac-551B86E5744E2388, BIOS 529.140.2.0.0 06/23/2024
    RIP: 0010:strlen+0x4/0x30
    Code: f7 75 ec 31 c0 c3 cc cc cc cc 48 89 f8 c3 cc cc cc cc 0f 1f 40 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa <80> 3f 00 74 14 48 89 f8 48 83 c0 01 80 38 00 75 f7 48 29 f8 c3 cc
    RSP: 0018:ffffb4aac0683ad8 EFLAGS: 00010202
    RAX: 00000000ffffffea RBX: 00007f033c669379 RCX: 0000000000000001
    RDX: 0000000000000cc0 RSI: 00007f033c669379 RDI: 00007f033c669379
    RBP: 00000000ffffffea R08: 0000000000000000 R09: 00000000c0ba916a
    R10: ffffffffffffffff R11: ffffffffb61ea260 R12: ffff91f7815b50c8
    R13: 0000000000000cc0 R14: ffff91fafefffe30 R15: ffffb4aac0683b30
    FS:  00007f033ccbe8c0(0000) GS:ffff91faeed00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f033c669379 CR3: 0000000107b1e004 CR4: 00000000003706f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     ? __die+0x23/0x70
     ? page_fault_oops+0x149/0x4c0
     ? raw_spin_rq_lock_nested+0xe/0x20
     ? sched_balance_newidle+0x22b/0x3c0
     ? update_load_avg+0x78/0x770
     ? exc_page_fault+0x6f/0x150
     ? asm_exc_page_fault+0x26/0x30
     ? __pfx_pci_conf1_write+0x10/0x10
     ? strlen+0x4/0x30
     devm_kstrdup+0x25/0x70
     brcmf_of_probe+0x273/0x350 [brcmfmac]
    
    Signed-off-by: Stefan Dösinger <stefan@xxxxxxxxxxxxxxx>
    Acked-by: Arend van Spriel <arend.vanspriel@xxxxxxxxxxxx>
    Signed-off-by: Kalle Valo <kvalo@xxxxxxxxxx>
    Link: https://patch.msgid.link/20250106170958.3595-1-stefan@xxxxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
index 73fc701204e29..90d2c536bdaf0 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
@@ -96,13 +96,13 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
 	/* Set board-type to the first string of the machine compatible prop */
 	root = of_find_node_by_path("/");
 	if (root && err) {
-		char *board_type;
+		char *board_type = NULL;
 		const char *tmp;
 
-		of_property_read_string_index(root, "compatible", 0, &tmp);
-
 		/* get rid of '/' in the compatible string to be able to find the FW */
-		board_type = devm_kstrdup(dev, tmp, GFP_KERNEL);
+		if (!of_property_read_string_index(root, "compatible", 0, &tmp))
+			board_type = devm_kstrdup(dev, tmp, GFP_KERNEL);
+
 		if (!board_type) {
 			of_node_put(root);
 			return;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux