Re: [PATCH 3/4] firmware: arm_scmi: Validate SENSOR_UPDATE payload size

Cristian Marussi <[email protected]>
Newsgroups org.kernel.vger.arm-scmi,org.infradead.lists.linux-arm-kernel
Message-ID <agwwCJ5_cL-Ip-xm@pluto>
On Sun, May 17, 2026 at 08:02:42PM +0100, Sudeep Holla wrote:
> SENSOR_UPDATE carries one or more sensor readings after the fixed
> notification header. The parser derives the expected reading count
> from the sensor description, but it did not verify that the received
> payload contains those entries before parsing them.
> 
> Reject truncated update notifications before reading the variable
> array.
> 
> Signed-off-by: Sudeep Holla <[email protected]>
> ---
>  drivers/firmware/arm_scmi/sensors.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/firmware/arm_scmi/sensors.c b/drivers/firmware/arm_scmi/sensors.c
> index 836c294a9f42..b14bb1146356 100644
> --- a/drivers/firmware/arm_scmi/sensors.c
> +++ b/drivers/firmware/arm_scmi/sensors.c
> @@ -1072,12 +1072,15 @@ scmi_sensor_fill_custom_report(const struct scmi_protocol_handle *ph,
>  	case SCMI_EVENT_SENSOR_UPDATE:
>  	{
>  		int i;
> +		size_t expected_sz;
>  		struct scmi_sensor_info *s;
>  		const struct scmi_sensor_update_notify_payld *p = payld;
>  		struct scmi_sensor_update_report *r = report;
>  		struct sensors_info *sinfo = ph->get_priv(ph);
>  
> -		/* payld_sz is variable for this event */
> +		if (payld_sz < sizeof(*p))
> +			break;
> +
>  		r->sensor_id = le32_to_cpu(p->sensor_id);
>  		if (r->sensor_id >= sinfo->num_sensors)
>  			break;
> @@ -1091,6 +1094,11 @@ scmi_sensor_fill_custom_report(const struct scmi_protocol_handle *ph,
>  		 * readings defined for this sensor or 1 for scalar sensors.
>  		 */
>  		r->readings_count = s->num_axis ?: 1;
> +		expected_sz = sizeof(*p) + r->readings_count *
> +			      sizeof(p->readings[0]);
> +		if (payld_sz < expected_sz)
> +			break;
> +

LGTM.
Reviewed-by: Cristian Marussi <[email protected]>

Thanks,
Cristian
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.