All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Cc: linux-usb@vger.kernel.org, pmalani@chromium.org,
	jthies@google.com, Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
	Fabrice Gasnier <fabrice.gasnier@foss.st.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Hans de Goede <hdegoede@redhat.com>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Prashanth K <quic_prashk@quicinc.com>,
	Rajaram Regupathy <rajaram.regupathy@intel.com>,
	Saranya Gopal <saranya.gopal@intel.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 1/3] usb: typec: ucsi: Limit read size on v1.2
Date: Tue, 30 Jan 2024 15:47:57 +0200	[thread overview]
Message-ID: <Zbj+DWzfMURLKnLn@kuha.fi.intel.com> (raw)
In-Reply-To: <20240126103859.v3.1.Iacf5570a66b82b73ef03daa6557e2fc0db10266a@changeid>

On Fri, Jan 26, 2024 at 10:39:07AM -0800, Abhishek Pandit-Subedi wrote:
> Between UCSI 1.2 and UCSI 2.0, the size of the MESSAGE_IN region was
> increased from 16 to 256. In order to avoid overflowing reads for older
> systems, add a mechanism to use the read UCSI version to truncate read
> sizes on UCSI v1.2.
> 
> Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>

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

> ---
> Tested on 6.6 kernel. Dmesg output from this change:
> [  105.058162] ucsi_um_test ucsi_um_test_device.0: Registered UCSI
> interface with version 3.0.0
> 
> 
> (no changes since v2)
> 
> Changes in v2:
>   - Changed log message to DEBUG
> 
>  drivers/usb/typec/ucsi/ucsi.c | 26 ++++++++++++++++++++++++--
>  drivers/usb/typec/ucsi/ucsi.h | 11 +++++++++++
>  2 files changed, 35 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> index 5392ec698959..a35056ee3e96 100644
> --- a/drivers/usb/typec/ucsi/ucsi.c
> +++ b/drivers/usb/typec/ucsi/ucsi.c
> @@ -36,6 +36,19 @@
>   */
>  #define UCSI_SWAP_TIMEOUT_MS	5000
>  
> +static int ucsi_read_message_in(struct ucsi *ucsi, void *buf,
> +					  size_t buf_size)
> +{
> +	/*
> +	 * Below UCSI 2.0, MESSAGE_IN was limited to 16 bytes. Truncate the
> +	 * reads here.
> +	 */
> +	if (ucsi->version <= UCSI_VERSION_1_2)
> +		buf_size = min_t(size_t, 16, buf_size);
> +
> +	return ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, buf, buf_size);
> +}
> +
>  static int ucsi_acknowledge_command(struct ucsi *ucsi)
>  {
>  	u64 ctrl;
> @@ -72,7 +85,7 @@ static int ucsi_read_error(struct ucsi *ucsi)
>  	if (ret < 0)
>  		return ret;
>  
> -	ret = ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, &error, sizeof(error));
> +	ret = ucsi_read_message_in(ucsi, &error, sizeof(error));
>  	if (ret)
>  		return ret;
>  
> @@ -170,7 +183,7 @@ int ucsi_send_command(struct ucsi *ucsi, u64 command,
>  	length = ret;
>  
>  	if (data) {
> -		ret = ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, data, size);
> +		ret = ucsi_read_message_in(ucsi, data, size);
>  		if (ret)
>  			goto out;
>  	}
> @@ -1556,6 +1569,15 @@ int ucsi_register(struct ucsi *ucsi)
>  	if (!ucsi->version)
>  		return -ENODEV;
>  
> +	/*
> +	 * Version format is JJ.M.N (JJ = Major version, M = Minor version,
> +	 * N = sub-minor version).
> +	 */
> +	dev_dbg(ucsi->dev, "Registered UCSI interface with version %x.%x.%x",
> +		UCSI_BCD_GET_MAJOR(ucsi->version),
> +		UCSI_BCD_GET_MINOR(ucsi->version),
> +		UCSI_BCD_GET_SUBMINOR(ucsi->version));
> +
>  	queue_delayed_work(system_long_wq, &ucsi->work, 0);
>  
>  	ucsi_debugfs_register(ucsi);
> diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
> index 6478016d5cb8..bec920fa6b8a 100644
> --- a/drivers/usb/typec/ucsi/ucsi.h
> +++ b/drivers/usb/typec/ucsi/ucsi.h
> @@ -23,6 +23,17 @@ struct dentry;
>  #define UCSI_CONTROL			8
>  #define UCSI_MESSAGE_IN			16
>  #define UCSI_MESSAGE_OUT		32
> +#define UCSIv2_MESSAGE_OUT		272
> +
> +/* UCSI versions */
> +#define UCSI_VERSION_1_2	0x0120
> +#define UCSI_VERSION_2_0	0x0200
> +#define UCSI_VERSION_2_1	0x0210
> +#define UCSI_VERSION_3_0	0x0300
> +
> +#define UCSI_BCD_GET_MAJOR(_v_)		(((_v_) >> 8) & 0xFF)
> +#define UCSI_BCD_GET_MINOR(_v_)		(((_v_) >> 4) & 0x0F)
> +#define UCSI_BCD_GET_SUBMINOR(_v_)	((_v_) & 0x0F)
>  
>  /* Command Status and Connector Change Indication (CCI) bits */
>  #define UCSI_CCI_CONNECTOR(_c_)		(((_c_) & GENMASK(7, 1)) >> 1)
> -- 
> 2.43.0.429.g432eaa2c6b-goog

-- 
heikki

  parent reply	other threads:[~2024-01-30 13:48 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-26 18:39 [PATCH v3 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Abhishek Pandit-Subedi
2024-01-26 18:39 ` [PATCH v3 1/3] usb: typec: ucsi: Limit read size on v1.2 Abhishek Pandit-Subedi
2024-01-26 20:17   ` Prashant Malani
2024-01-30 13:47   ` Heikki Krogerus [this message]
2024-01-26 18:39 ` [PATCH v3 2/3] usb: typec: ucsi: Update connector cap and status Abhishek Pandit-Subedi
2024-01-26 20:19   ` Prashant Malani
2024-01-30 14:17   ` Heikki Krogerus
2024-01-26 18:39 ` [PATCH v3 3/3] usb: typec: ucsi: Get PD revision for partner Abhishek Pandit-Subedi
2024-01-26 20:25   ` Prashant Malani
2024-02-05 22:05     ` Abhishek Pandit-Subedi
2024-02-06 10:18       ` Heikki Krogerus
2024-02-06 18:04         ` Prashant Malani
2024-01-28 16:06 ` [PATCH v3 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Mario Limonciello
2024-01-30 22:30   ` Abhishek Pandit-Subedi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Zbj+DWzfMURLKnLn@kuha.fi.intel.com \
    --to=heikki.krogerus@linux.intel.com \
    --cc=abhishekpandit@chromium.org \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=fabrice.gasnier@foss.st.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hdegoede@redhat.com \
    --cc=jthies@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=neil.armstrong@linaro.org \
    --cc=pmalani@chromium.org \
    --cc=quic_prashk@quicinc.com \
    --cc=rajaram.regupathy@intel.com \
    --cc=saranya.gopal@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.