lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZxtzAGLlQ2c1J0dQ@kuha.fi.intel.com>
Date: Fri, 25 Oct 2024 13:29:20 +0300
From: Heikki Krogerus <heikki.krogerus@...ux.intel.com>
To: Amit Sunil Dhamne <amitsd@...gle.com>
Cc: gregkh@...uxfoundation.org, rdbabiera@...gle.com, badhri@...gle.com,
	xu.yang_2@....com, sebastian.reichel@...labora.com,
	linux-usb@...r.kernel.org, linux-kernel@...r.kernel.org,
	stable@...r.kernel.org
Subject: Re: [PATCH v1] usb: typec: tcpm: restrict
 SNK_WAIT_CAPABILITIES_TIMEOUT transitions to non self-powered devices

On Wed, Oct 23, 2024 at 07:22:30PM -0700, Amit Sunil Dhamne wrote:
> PD3.1 spec ("8.3.3.3.3 PE_SNK_Wait_for_Capabilities State") mandates
> that the policy engine perform a hard reset when SinkWaitCapTimer
> expires. Instead the code explicitly does a GET_SOURCE_CAP when the
> timer expires as part of SNK_WAIT_CAPABILITIES_TIMEOUT. Due to this the
> following compliance test failures are reported by the compliance tester
> (added excerpts from the PD Test Spec):
> 
> * COMMON.PROC.PD.2#1:
>   The Tester receives a Get_Source_Cap Message from the UUT. This
>   message is valid except the following conditions: [COMMON.PROC.PD.2#1]
>     a. The check fails if the UUT sends this message before the Tester
>        has established an Explicit Contract
>     ...
> 
> * TEST.PD.PROT.SNK.4:
>   ...
>   4. The check fails if the UUT does not send a Hard Reset between
>     tTypeCSinkWaitCap min and max. [TEST.PD.PROT.SNK.4#1] The delay is
>     between the VBUS present vSafe5V min and the time of the first bit
>     of Preamble of the Hard Reset sent by the UUT.
> 
> For the purpose of interoperability, restrict the quirk introduced in
> https://lore.kernel.org/all/20240523171806.223727-1-sebastian.reichel@collabora.com/
> to only non self-powered devices as battery powered devices will not
> have the issue mentioned in that commit.
> 
> Cc: stable@...r.kernel.org
> Fixes: 122968f8dda8 ("usb: typec: tcpm: avoid resets for missing source capability messages")
> Reported-by: Badhri Jagan Sridharan <badhri@...gle.com>
> Closes: https://lore.kernel.org/all/CAPTae5LAwsVugb0dxuKLHFqncjeZeJ785nkY4Jfd+M-tCjHSnQ@mail.gmail.com/
> Signed-off-by: Amit Sunil Dhamne <amitsd@...gle.com>
> Reviewed-by: Badhri Jagan Sridharan <badhri@...gle.com>

Reviewed-by: Heikki Krogerus <heikki.krogerus@...ux.intel.com>

> ---
>  drivers/usb/typec/tcpm/tcpm.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
> index d6f2412381cf..c8f467d24fbb 100644
> --- a/drivers/usb/typec/tcpm/tcpm.c
> +++ b/drivers/usb/typec/tcpm/tcpm.c
> @@ -4515,7 +4515,8 @@ static inline enum tcpm_state hard_reset_state(struct tcpm_port *port)
>  		return ERROR_RECOVERY;
>  	if (port->pwr_role == TYPEC_SOURCE)
>  		return SRC_UNATTACHED;
> -	if (port->state == SNK_WAIT_CAPABILITIES_TIMEOUT)
> +	if (port->state == SNK_WAIT_CAPABILITIES ||
> +	    port->state == SNK_WAIT_CAPABILITIES_TIMEOUT)
>  		return SNK_READY;
>  	return SNK_UNATTACHED;
>  }
> @@ -5043,8 +5044,11 @@ static void run_state_machine(struct tcpm_port *port)
>  			tcpm_set_state(port, SNK_SOFT_RESET,
>  				       PD_T_SINK_WAIT_CAP);
>  		} else {
> -			tcpm_set_state(port, SNK_WAIT_CAPABILITIES_TIMEOUT,
> -				       PD_T_SINK_WAIT_CAP);
> +			if (!port->self_powered)
> +				upcoming_state = SNK_WAIT_CAPABILITIES_TIMEOUT;
> +			else
> +				upcoming_state = hard_reset_state(port);
> +			tcpm_set_state(port, upcoming_state, PD_T_SINK_WAIT_CAP);
>  		}
>  		break;
>  	case SNK_WAIT_CAPABILITIES_TIMEOUT:
> 
> base-commit: c6d9e43954bfa7415a1e9efdb2806ec1d8a8afc8
> -- 
> 2.47.0.105.g07ac214952-goog
> 

-- 
heikki

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ