Patch "platform/x86: lenovo-yoga-tab2-pro-1380-fastcharger: fix serdev race" has been added to the 6.12-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

    platform/x86: lenovo-yoga-tab2-pro-1380-fastcharger: fix serdev race

to the 6.12-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:
     platform-x86-lenovo-yoga-tab2-pro-1380-fastcharger-f.patch
and it can be found in the queue-6.12 subdirectory.

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



commit 12834b0c4f900d665235a6cfd15e1b8a6b6b058d
Author: Chenyuan Yang <chenyuan0y@xxxxxxxxx>
Date:   Sat Jan 11 12:09:51 2025 -0600

    platform/x86: lenovo-yoga-tab2-pro-1380-fastcharger: fix serdev race
    
    [ Upstream commit 59616a91e5e74833b2008b56c66879857c616006 ]
    
    The yt2_1380_fc_serdev_probe() function calls 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 5e700b384ec1
    ("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
    devm_serdev_device_open().
    
    Note, serdev_device_set_baudrate() and serdev_device_set_flow_control()
    calls should be after the devm_serdev_device_open() call.
    
    Fixes: b2ed33e8d486 ("platform/x86: Add lenovo-yoga-tab2-pro-1380-fastcharger driver")
    Signed-off-by: Chenyuan Yang <chenyuan0y@xxxxxxxxx>
    Reviewed-by: Hans de Goede <hdegoede@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20250111180951.2277757-1-chenyuan0y@xxxxxxxxx
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/platform/x86/lenovo-yoga-tab2-pro-1380-fastcharger.c b/drivers/platform/x86/lenovo-yoga-tab2-pro-1380-fastcharger.c
index d525bdc8ca9b3..32d9b6009c422 100644
--- a/drivers/platform/x86/lenovo-yoga-tab2-pro-1380-fastcharger.c
+++ b/drivers/platform/x86/lenovo-yoga-tab2-pro-1380-fastcharger.c
@@ -199,14 +199,15 @@ static int yt2_1380_fc_serdev_probe(struct serdev_device *serdev)
 	if (ret)
 		return ret;
 
+	serdev_device_set_drvdata(serdev, fc);
+	serdev_device_set_client_ops(serdev, &yt2_1380_fc_serdev_ops);
+
 	ret = devm_serdev_device_open(dev, serdev);
 	if (ret)
 		return dev_err_probe(dev, ret, "opening UART device\n");
 
 	serdev_device_set_baudrate(serdev, 600);
 	serdev_device_set_flow_control(serdev, false);
-	serdev_device_set_drvdata(serdev, fc);
-	serdev_device_set_client_ops(serdev, &yt2_1380_fc_serdev_ops);
 
 	ret = devm_extcon_register_notifier_all(dev, fc->extcon, &fc->nb);
 	if (ret)




[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