Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3886764pxf; Mon, 22 Mar 2021 18:53:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzISArpCbMRFdRv0GBaHtixCx4BfZAnTnVYfZ4LoO4f9LwwjXDa0SQCfxeeCsiPYaI/tWId X-Received: by 2002:aa7:d3d8:: with SMTP id o24mr2290440edr.165.1616464385465; Mon, 22 Mar 2021 18:53:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616464385; cv=none; d=google.com; s=arc-20160816; b=Mgr3w+NFsl3kZcv8x23Mb2RR95pviTCAUfnYnlgMAWRFPK5HTN9VKzaJ9Z3h+feK2F QJdIn+9Nhb1fHWfc/J68O0j7Uq1vZ559GUdsL6Cwqtz8qMNFBfe9jJff1R692C0cwpPC 1FkB0pILtTWGf3trDOs1eRG74kkD2iFJ+sCnkYt6VgtIPxLNWQGlTnNeI1RzT47zgnMA V6dxFLNqYQvPysPmbM5+biQ8WBj8u1MBfQ9Fz2/xKBjFMwMpPWd37Ue3AoshBEDBR7f3 69v/2D9ZxS9bLdId1ORLM/fKkWtLpsDUC/phWM5ytYP4p2RXK1GPjrDKGSkfYXjNDWE+ 612w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from:dmarc-filter :sender:dkim-signature; bh=iqqyIy9tOoNipSpUDnFqIfdhP6wTcipwYtIVVT4KWEA=; b=it6IqW5FDFFPCvXvXbdOuH64Yi8psrNSAggEYaMkyvCIR8wZl8hnLTxnE2xVPxW9AA u1kIa3yaxxG7lO4ywvEZpq13AJ/G2XlZEwrTFtu1nUPVBXWBfO7GjXMC3BVN8JKkF995 d8u2lysQalzdagsK9WZmAzAiDqIFNVRbXppP99bpWPQqfooVwCsQ7+CSTUcMBzuXb6Jo N9w66+2bB21SJ5fMVvdUgabKySTZFPEyGhqgGdmAgFGm9KMzpp0BnHNOTLtTE/lw/CMF hp3opflKM2Emggk4cBP3p0jyQRMJLcnGA+2iggAl9Fk0lCXHA1PRqMlN4hAlec7Zm97O kkdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=oy5vn5Mz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cd8si13443608ejb.26.2021.03.22.18.52.43; Mon, 22 Mar 2021 18:53:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=oy5vn5Mz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229972AbhCWBvC (ORCPT + 99 others); Mon, 22 Mar 2021 21:51:02 -0400 Received: from m43-7.mailgun.net ([69.72.43.7]:26236 "EHLO m43-7.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229472AbhCWBud (ORCPT ); Mon, 22 Mar 2021 21:50:33 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1616464233; h=Message-Id: Date: Subject: Cc: To: From: Sender; bh=iqqyIy9tOoNipSpUDnFqIfdhP6wTcipwYtIVVT4KWEA=; b=oy5vn5MzxxXUEJn4uojQ8j2uD0xwZVVKZdwMhk2QUePsbEf37uC6cVAri8kPjmauzJrXa3Tn 0ibVdcKTDwRpEkvD4B9OdQsWEwq03zwn38ZyZpuCS5V24ib1j2bIopAmA+hErCTRqoGBdH13 +ipZWMfYeRIPbqnQqLNxkMHiT+0= X-Mailgun-Sending-Ip: 69.72.43.7 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n05.prod.us-west-2.postgun.com with SMTP id 60594962c32ceb3a9121de4f (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Tue, 23 Mar 2021 01:50:26 GMT Sender: wcheng=codeaurora.org@mg.codeaurora.org Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 481B5C43461; Tue, 23 Mar 2021 01:50:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=ALL_TRUSTED,BAYES_00,SPF_FAIL autolearn=no autolearn_force=no version=3.4.0 Received: from wcheng-linux.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: wcheng) by smtp.codeaurora.org (Postfix) with ESMTPSA id 2D3F5C433C6; Tue, 23 Mar 2021 01:50:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 2D3F5C433C6 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=wcheng@codeaurora.org From: Wesley Cheng To: balbi@kernel.org, gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Chandana Kishori Chiluveru , Wesley Cheng Subject: [PATCH] usb: gadget: Stall OS descriptor request for unsupported functions Date: Mon, 22 Mar 2021 18:50:17 -0700 Message-Id: <1616464217-2650-1-git-send-email-wcheng@codeaurora.org> X-Mailer: git-send-email 2.7.4 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chandana Kishori Chiluveru Hosts which request "OS descriptors" from gadgets do so during the enumeration phase and before the configuration is set with SET_CONFIGURATION. Composite driver supports OS descriptor handling in composite_setup function. This requires to pass signature field, vendor code, compatibleID and subCompatibleID from user space. For USB compositions that contain functions which don't implement os descriptors, Windows is sending vendor specific requests for os descriptors and composite driver handling this request with invalid data. With this invalid info host resetting the bus and never selecting the configuration and leading enumeration issue. Fix this by bailing out from the OS descriptor setup request handling if the functions does not have OS descriptors compatibleID. Signed-off-by: Chandana Kishori Chiluveru Signed-off-by: Wesley Cheng --- drivers/usb/gadget/composite.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 72a9797..473edda6 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -1945,6 +1945,12 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) buf[6] = w_index; /* Number of ext compat interfaces */ count = count_ext_compat(os_desc_cfg); + /* + * Bailout if device does not + * have ext_compat interfaces. + */ + if (count == 0) + break; buf[8] = count; count *= 24; /* 24 B/ext compat desc */ count += 16; /* header */ -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project