Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp1800572pxp; Mon, 7 Mar 2022 02:39:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJw9ops2OoPtCBNF9th4KWhvb/jBaWpWVDK6GWQTdUBrcss1eiM0DOVodyrblBFHLkoRECcl X-Received: by 2002:a17:90b:a41:b0:1bf:72b5:ae95 with SMTP id gw1-20020a17090b0a4100b001bf72b5ae95mr2165166pjb.110.1646649564032; Mon, 07 Mar 2022 02:39:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646649564; cv=none; d=google.com; s=arc-20160816; b=zRq3LT/crBGVWxhxxBTimUu0QED+8Rg//u+dme2Jyerl6E+nTT6tdQFAiDHFPul3hL x1AkWVK8aJKKjjF5sUsptZmrVgGl22gjvKYwtGzJyJQgnlxIsc+F9KIxinPRK4wWkh4k /70GBMHcQfcp1R0a+hRmR4PX62Dh3X3pnY06OVegIGWfN8hVtMWvmgFD5UnoVAbF3yT3 eNXRqXtdzrk04YLQsBFpZfMiZzfKg7CDiffJMnkDaSj1QkmxvDaV7POzGM2dqiRr+hR3 BqX7ORuB9TbgLVnxz61Mgpn8NrGVx+M06usKNeeBtv8m81zF3UycC17y/m4Tk9Otf5F+ hQ1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=rHcxGsaNBv+rjDSvFBRQYlPBqVSidadDHyNZHMiQBGA=; b=0tE2t9NbTmsTgihjiN1L9j+a7FzqDIPRJ+jzlS5I5l5GI2+jWpXxBBm3u7Dex8xyxL FZ7XezQcxLlZ43Eg7GSCJhgQOlmRvcUH42yUb6YybRSu/vYAqqHi2pHX9oPlcJJOyH9n i44ABVF+zgXBSMnet9+l8f67AoEtMxdaS2A4d6xQoYUrCPIH9lH+jWb2jcsntUfwUin0 igxONPTA91bhxG4IUInvG3olAXG1p02IvhUxRTBpZ6jQRZbBENBs9PSirjJyVyONapon 0gNTnPKMmlnmljYiiCm1tGxijL1+tkmonfT7Af7WUGkSqYsnmpOyofRXZaHf20O7TOg1 cPhQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="0Rsts/Vz"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t11-20020a1709028c8b00b0014ed742d89bsi10969020plo.152.2022.03.07.02.38.58; Mon, 07 Mar 2022 02:39:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="0Rsts/Vz"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241920AbiCGKK5 (ORCPT + 99 others); Mon, 7 Mar 2022 05:10:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240324AbiCGJu4 (ORCPT ); Mon, 7 Mar 2022 04:50:56 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E68687461D; Mon, 7 Mar 2022 01:44:27 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 57BFA612D2; Mon, 7 Mar 2022 09:44:26 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5008CC340E9; Mon, 7 Mar 2022 09:44:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1646646265; bh=xKRWElij6OuQu68z/epaNC3rjgzBAHua+vCW4tVnPjI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0Rsts/Vzu/vbGxjpB07qlXXpI9k2W1oErecGvDfxkAhINOpUPyuyf79LLdWY1tZl2 SUenDl60ZuC5taG2f7MqNRW14iq1hKjspxCWV9og40T7y38FDNwe4tNfp70MtImSMu NZU07+Y78pndoQI86p8uMyGGyfR3ZJ8fnumokZrw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vincent Mailhol , Marc Kleine-Budde Subject: [PATCH 5.15 188/262] can: gs_usb: change active_channelss type from atomic_t to u8 Date: Mon, 7 Mar 2022 10:18:52 +0100 Message-Id: <20220307091707.794205501@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220307091702.378509770@linuxfoundation.org> References: <20220307091702.378509770@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Vincent Mailhol commit 035b0fcf02707d3c9c2890dc1484b11aa5335eb1 upstream. The driver uses an atomic_t variable: gs_usb:active_channels to keep track of the number of opened channels in order to only allocate memory for the URBs when this count changes from zero to one. However, the driver does not decrement the counter when an error occurs in gs_can_open(). This issue is fixed by changing the type from atomic_t to u8 and by simplifying the logic accordingly. It is safe to use an u8 here because the network stack big kernel lock (a.k.a. rtnl_mutex) is being hold. For details, please refer to [1]. [1] https://lore.kernel.org/linux-can/CAMZ6Rq+sHpiw34ijPsmp7vbUpDtJwvVtdV7CvRZJsLixjAFfrg@mail.gmail.com/T/#t Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices") Link: https://lore.kernel.org/all/20220214234814.1321599-1-mailhol.vincent@wanadoo.fr Signed-off-by: Vincent Mailhol Signed-off-by: Marc Kleine-Budde Signed-off-by: Greg Kroah-Hartman --- drivers/net/can/usb/gs_usb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --- a/drivers/net/can/usb/gs_usb.c +++ b/drivers/net/can/usb/gs_usb.c @@ -191,8 +191,8 @@ struct gs_can { struct gs_usb { struct gs_can *canch[GS_MAX_INTF]; struct usb_anchor rx_submitted; - atomic_t active_channels; struct usb_device *udev; + u8 active_channels; }; /* 'allocate' a tx context. @@ -590,7 +590,7 @@ static int gs_can_open(struct net_device if (rc) return rc; - if (atomic_add_return(1, &parent->active_channels) == 1) { + if (!parent->active_channels) { for (i = 0; i < GS_MAX_RX_URBS; i++) { struct urb *urb; u8 *buf; @@ -691,6 +691,7 @@ static int gs_can_open(struct net_device dev->can.state = CAN_STATE_ERROR_ACTIVE; + parent->active_channels++; if (!(dev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)) netif_start_queue(netdev); @@ -706,7 +707,8 @@ static int gs_can_close(struct net_devic netif_stop_queue(netdev); /* Stop polling */ - if (atomic_dec_and_test(&parent->active_channels)) + parent->active_channels--; + if (!parent->active_channels) usb_kill_anchored_urbs(&parent->rx_submitted); /* Stop sending URBs */ @@ -985,8 +987,6 @@ static int gs_usb_probe(struct usb_inter init_usb_anchor(&dev->rx_submitted); - atomic_set(&dev->active_channels, 0); - usb_set_intfdata(intf, dev); dev->udev = interface_to_usbdev(intf);