Re: [PATCH 1/2] platform/x86: ISST: Validate socket ID in clos_assoc ioctl

srinivas pandruvada <[email protected]>
Newsgroups org.kernel.vger.stable,org.kernel.vger.linux-kernel,org.kernel.vger.platform-driver-x86
Message-ID <[email protected]>
On Fri, 2026-08-07 at 23:40 +0900, HyeongJun An wrote:
> isst_if_clos_assoc() validates the user-supplied socket_id with
> 'socket_id > topology_max_packages()', but isst_common.sst_inst[] is
> allocated with topology_max_packages() entries, so the valid index
> range
> is [0, topology_max_packages()).  The '>' comparison lets
> socket_id == topology_max_packages() pass and index one entry past
> the
> array.
> 
> In addition, isst_common.sst_inst[socket_id] is NULL for an in-range
> package that has no bound TPMI SST instance, and the pointer is used
> without a NULL check.  Both the out-of-bounds entry and the NULL
> pointer
> are then dereferenced by map_partition_power_domain_id() and the
> following power_domain_info access.
> 
> Reject socket_id >= topology_max_packages() and a NULL sst_inst,
> matching
> the checks already performed by get_instance().
> 
> Fixes: 12a7d2cb811d ("platform/x86: ISST: Add SST-CP support via
> TPMI")
> Cc: [email protected]
> Assisted-by: Claude:claude-opus-5
> Signed-off-by: HyeongJun An <[email protected]>

Acked-by: Srinivas Pandruvada <[email protected]>

> ---
>  drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git
> a/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
> b/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
> index 24334ae70d82..b2965baeaa36 100644
> --- a/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
> +++ b/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
> @@ -729,7 +729,7 @@ static long isst_if_clos_assoc(void __user *argp)
>  		if (copy_from_user(&clos_assoc, ptr,
> sizeof(clos_assoc)))
>  			return -EFAULT;
>  
> -		if (clos_assoc.socket_id > topology_max_packages())
> +		if (clos_assoc.socket_id >= topology_max_packages())
>  			return -EINVAL;
>  
>  		cpu = clos_assoc.logical_cpu;
> @@ -747,6 +747,8 @@ static long isst_if_clos_assoc(void __user *argp)
>  		pkg_id = clos_assoc.socket_id;
>  
>  		sst_inst = isst_common.sst_inst[pkg_id];
> +		if (!sst_inst)
> +			return -EINVAL;
>  
>  		punit_id = map_partition_power_domain_id(sst_inst,
> punit_id, &part);
>  		if (punit_id < 0)
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.