Skip to content

Commit 5564cc3

Browse files
WhiteFox-Projectmehmetb0
authored andcommitted
w1: fix NULL pointer dereference in probe
BugLink: https://bugs.launchpad.net/bugs/2107212 [ Upstream commit 0dd6770 ] The w1_uart_probe() function calls w1_uart_serdev_open() (which includes devm_serdev_device_open()) before setting the client ops via serdev_device_set_client_ops(). This ordering can trigger a NULL pointer dereference in the serdev controller's receive_buf handler, as it assumes serdev->ops is valid when SERPORT_ACTIVE is set. This is similar to the issue fixed in commit 5e700b3 ("platform/chrome: cros_ec_uart: properly fix race condition") where devm_serdev_device_open() was called before fully initializing the device. Fix the race by ensuring client ops are set before enabling the port via w1_uart_serdev_open(). Fixes: a3c0880 ("w1: add UART w1 bus driver") Signed-off-by: Chenyuan Yang <[email protected]> Acked-by: Christoph Winklhofer <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Krzysztof Kozlowski <[email protected]> Signed-off-by: Sasha Levin <[email protected]> Signed-off-by: Manuel Diewald <[email protected]> Signed-off-by: Timo Aaltonen <[email protected]>
1 parent 5241874 commit 5564cc3

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

drivers/w1/masters/w1-uart.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,11 +372,11 @@ static int w1_uart_probe(struct serdev_device *serdev)
372372
init_completion(&w1dev->rx_byte_received);
373373
mutex_init(&w1dev->rx_mutex);
374374

375+
serdev_device_set_drvdata(serdev, w1dev);
376+
serdev_device_set_client_ops(serdev, &w1_uart_serdev_ops);
375377
ret = w1_uart_serdev_open(w1dev);
376378
if (ret < 0)
377379
return ret;
378-
serdev_device_set_drvdata(serdev, w1dev);
379-
serdev_device_set_client_ops(serdev, &w1_uart_serdev_ops);
380380

381381
return w1_add_master_device(&w1dev->bus);
382382
}

0 commit comments

Comments
 (0)