Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp3464905iob; Tue, 17 May 2022 00:02:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzZ+mbHj+CFFxfhTs+s63SYmo6zhh/n8oEEQKMRDJEwqKHc8x2cqcKVz2uUCl/0YwB/V1jt X-Received: by 2002:a50:a6c8:0:b0:428:5b3a:6c99 with SMTP id f8-20020a50a6c8000000b004285b3a6c99mr17458396edc.222.1652770960366; Tue, 17 May 2022 00:02:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652770960; cv=none; d=google.com; s=arc-20160816; b=T+ZZx7FWsmJexQ7SMFR6856JxTpPwg0fRw59Mc/q3GWmD6GcVredFF/RTJyqnn3G9k +L1VK29rU6Yf0OyQg05BegKohjzLZIw7GROmY7nCu6J9NhVqynNmchkQT/4Eb6mN0Gcz vrb8G4Jt1gsNDO7OTNXVBbqjJBXEOVJgk6VQLO2qXD7XE9Abmt8sSqYQpoL1bYGQK4YI 8v8PLHSvQ8pygeZP0qTHDDY5DMGrvyKGnWEPTFOQsu5wvXsL8tAU2wpOnrXYHpLo5vip A52nAEXKDcRtQGGoOibwUoZcZHergnF0a1swqPpFc/4VOzT9byeANj66xdHWSgz84V8v A3mA== 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=zyqKO2rSxaf5FD6xIVdLaLNqojcFBw/AUigrn+0wUfA=; b=UODVSUHFdPQa7JaRj+CCzzg7hXirl6BOMGj0akfvvo5nOLJjdAlB6iFkngx0zZn72A N1BJ5hpc94G1aOlvuBY2ZFsmmi7gFhSxrpGwtg0I9mnS0ywjCxqsI2XLr/IsSgZONkse IeDgoqi5MxIX4e+s8ZpXGh/d779O55dhdpQglcwsFVBCLYWFCuNX7dIdGA0ScF8ru1mm +bM41oOe/ytsNQMxAoZ1EOdS3iapNzsoeLwzfIHOXCE4LW5X9uKeIAY9o8/T2BLxtEG3 LB7cRbSJCU5BogwLeag1NMjHPjMWVbpFw69z1zhHwX4/TcOzLhjmH90Ww4uEL0/CCjBs nxPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=IQa55R49; 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 i15-20020a0564020f0f00b0042ac1c6784esi2200559eda.468.2022.05.17.00.02.15; Tue, 17 May 2022 00:02:40 -0700 (PDT) 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=IQa55R49; 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 S1345532AbiEPTiZ (ORCPT + 99 others); Mon, 16 May 2022 15:38:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42148 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345497AbiEPTiJ (ORCPT ); Mon, 16 May 2022 15:38:09 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B14E3ED34; Mon, 16 May 2022 12:38:08 -0700 (PDT) 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 C785E61518; Mon, 16 May 2022 19:38:07 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9BC6DC385AA; Mon, 16 May 2022 19:38:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1652729887; bh=ScNpsefaV/IRFOSh0a6YjQXpA8urLYr9F4cqdHvF6c8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IQa55R49YUHnRvpCJ3ek0tzq54Hrh9yT6waLrqECeaSDcECUNu03VfeHslG2yB8gN 8qrwdrKsCH2GYIZJ/kTj33+hQ8tSAnbyWuo5PEfom6azECzb7HOoJ79acsJJ8+G70K +GXNCCZ0CQGOjcrI10hLGtxhvuBtOjRVLqA5WUKU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sergey Ryazanov , Oliver Neukum Subject: [PATCH 4.9 13/19] usb: cdc-wdm: fix reading stuck on device close Date: Mon, 16 May 2022 21:36:26 +0200 Message-Id: <20220516193613.891833115@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220516193613.497233635@linuxfoundation.org> References: <20220516193613.497233635@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.4 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: Sergey Ryazanov commit 01e01f5c89773c600a9f0b32c888de0146066c3a upstream. cdc-wdm tracks whether a response reading request is in-progress and blocks the next request from being sent until the previous request is completed. As soon as last user closes the cdc-wdm device file, the driver cancels any ongoing requests, resets the pending response counter, but leaves the response reading in-progress flag (WDM_RESPONDING) untouched. So if the user closes the device file during the response receive request is being performed, no more data will be obtained from the modem. The request will be cancelled, effectively preventing the WDM_RESPONDING flag from being reseted. Keeping the flag set will prevent a new response receive request from being sent, permanently blocking the read path. The read path will staying blocked until the module will be reloaded or till the modem will be re-attached. This stuck has been observed with a Huawei E3372 modem attached to an OpenWrt router and using the comgt utility to set up a network connection. Fix this issue by clearing the WDM_RESPONDING flag on the device file close. Without this fix, the device reading stuck can be easily reproduced in a few connection establishing attempts. With this fix, a load test for modem connection re-establishing worked for several hours without any issues. Fixes: 922a5eadd5a3 ("usb: cdc-wdm: Fix race between autosuspend and reading from the device") Signed-off-by: Sergey Ryazanov Cc: stable Acked-by: Oliver Neukum Link: https://lore.kernel.org/r/20220501175828.8185-1-ryazanov.s.a@gmail.com Signed-off-by: Greg Kroah-Hartman --- drivers/usb/class/cdc-wdm.c | 1 + 1 file changed, 1 insertion(+) --- a/drivers/usb/class/cdc-wdm.c +++ b/drivers/usb/class/cdc-wdm.c @@ -744,6 +744,7 @@ static int wdm_release(struct inode *ino kill_urbs(desc); spin_lock_irq(&desc->iuspin); desc->resp_count = 0; + clear_bit(WDM_RESPONDING, &desc->flags); spin_unlock_irq(&desc->iuspin); desc->manage_power(desc->intf, 0); } else {