lkml.org 
[lkml]   [2022]   [Sep]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 105/148] can: gs_usb: gs_can_open(): fix race dev->can.state condition
    Date
    From: Marc Kleine-Budde <mkl@pengutronix.de>

    [ Upstream commit 5440428b3da65408dba0241985acb7a05258b85e ]

    The dev->can.state is set to CAN_STATE_ERROR_ACTIVE, after the device
    has been started. On busy networks the CAN controller might receive
    CAN frame between and go into an error state before the dev->can.state
    is assigned.

    Assign dev->can.state before starting the controller to close the race
    window.

    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Link: https://lore.kernel.org/all/20220920195216.232481-1-mkl@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/can/usb/gs_usb.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
    index e26b3d6f5b48..5a43e542b302 100644
    --- a/drivers/net/can/usb/gs_usb.c
    +++ b/drivers/net/can/usb/gs_usb.c
    @@ -680,6 +680,7 @@ static int gs_can_open(struct net_device *netdev)
    flags |= GS_CAN_MODE_TRIPLE_SAMPLE;

    /* finally start device */
    + dev->can.state = CAN_STATE_ERROR_ACTIVE;
    dm->mode = cpu_to_le32(GS_CAN_MODE_START);
    dm->flags = cpu_to_le32(flags);
    rc = usb_control_msg(interface_to_usbdev(dev->iface),
    @@ -696,13 +697,12 @@ static int gs_can_open(struct net_device *netdev)
    if (rc < 0) {
    netdev_err(netdev, "Couldn't start device (err=%d)\n", rc);
    kfree(dm);
    + dev->can.state = CAN_STATE_STOPPED;
    return rc;
    }

    kfree(dm);

    - dev->can.state = CAN_STATE_ERROR_ACTIVE;
    -
    parent->active_channels++;
    if (!(dev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY))
    netif_start_queue(netdev);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-09-26 13:25    [W:4.161 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site