Backport pending PCS standalone feature for kernel 6.12 and all the required dependency patch. All affected patch automatically refreshed. Link: https://github.com/openwrt/openwrt/pull/23271 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
80 lines
3.0 KiB
Diff
80 lines
3.0 KiB
Diff
From 0e4d7df2f3b2e59c1bccc09ea099b7a6c2dda886 Mon Sep 17 00:00:00 2001
|
|
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
|
Date: Wed, 28 Jan 2026 10:51:56 +0000
|
|
Subject: [PATCH] net: phylink: fix NULL pointer deref in
|
|
phylink_major_config()
|
|
|
|
When a MAC driver returns a PCS for an interface mode, and then we
|
|
attempt to switch to a different mode that doesn't require a PCS,
|
|
this causes phylink to oops:
|
|
|
|
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000010
|
|
Mem abort info:
|
|
ESR = 0x0000000096000044
|
|
EC = 0x25: DABT (current EL), IL = 32 bits
|
|
SET = 0, FnV = 0
|
|
EA = 0, S1PTW = 0
|
|
FSC = 0x04: level 0 translation fault
|
|
Data abort info:
|
|
ISV = 0, ISS = 0x00000044, ISS2 = 0x00000000
|
|
CM = 0, WnR = 1, TnD = 0, TagAccess = 0
|
|
GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
|
|
user pgtable: 4k pages, 48-bit VAs, pgdp=0000000137f96000
|
|
[0000000000000010] pgd=0000000000000000, p4d=0000000000000000
|
|
Internal error: Oops: 0000000096000044 [#1] SMP
|
|
Modules linked in: --
|
|
CPU: 1 UID: 0 PID: 55 Comm: kworker/u33:0 Not tainted 6.19.0-rc5-00581-g73cb8467a63e #1 PREEMPT
|
|
Hardware name: Qualcomm Technologies, Inc. Lemans Ride Rev3 (DT)
|
|
Workqueue: events_power_efficient phylink_resolve
|
|
pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS +BTYPE=--)
|
|
pc : phylink_major_config+0x408/0x948
|
|
lr : phylink_major_config+0x3fc/0x948
|
|
sp : ffff800080353c60
|
|
x29: ffff800080353cb0 x28: ffffb305068a8a00 x27: ffffb305068a8000
|
|
x26: ffff000080092100 x25: 0000000000000000 x24: 0000000000000000
|
|
x23: 0000000000000001 x22: 0000000000000000 x21: ffffb3050555b3d0
|
|
x20: ffff800080353d10 x19: ffff0000b6059400 x18: 00000000ffffffff
|
|
x17: 74756f2f79687020 x16: ffffb305045e4f18 x15: 6769666e6f632072
|
|
x14: 6f6a616d203a3168 x13: 782d657361623030 x12: ffffb305068c6a98
|
|
x11: 0000000000000583 x10: 0000000000000018 x9 : ffffb305068c6a98
|
|
x8 : 0000000100006583 x7 : 0000000000000000 x6 : ffff00008083cc40
|
|
x5 : ffff00008083cc40 x4 : 0000000000000001 x3 : 0000000000000001
|
|
x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0000b269e5a8
|
|
Call trace:
|
|
phylink_major_config+0x408/0x948 (P)
|
|
phylink_resolve+0x294/0x6e4
|
|
process_one_work+0x148/0x28c
|
|
worker_thread+0x2d8/0x3d8
|
|
kthread+0x134/0x208
|
|
ret_from_fork+0x10/0x20
|
|
Code: d63f0020 f9400e60 b4000040 f900081f (f9000ad3)
|
|
---[ end trace 0000000000000000 ]---
|
|
|
|
This is caused by "pcs" being NULL when we attempt to execute:
|
|
|
|
pcs->phylink = pl;
|
|
|
|
Make this conditional on pcs being non-null.
|
|
|
|
Fixes: 486dc391ef43 ("net: phylink: allow mac_select_pcs() to remove a PCS")
|
|
Reported-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
|
|
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
|
Link: https://patch.msgid.link/E1vl39Q-00000006utm-229h@rmk-PC.armlinux.org.uk
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
drivers/net/phy/phylink.c | 3 ++-
|
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/net/phy/phylink.c
|
|
+++ b/drivers/net/phy/phylink.c
|
|
@@ -1425,7 +1425,8 @@ static void phylink_major_config(struct
|
|
if (pl->pcs)
|
|
pl->pcs->phylink = NULL;
|
|
|
|
- pcs->phylink = pl;
|
|
+ if (pcs)
|
|
+ pcs->phylink = pl;
|
|
|
|
pl->pcs = pcs;
|
|
}
|