diff mbox series

[v5,11/11] platform/x86/amd/hsmp: Fix potential spectre issue

Message ID 20240823075543.884265-11-suma.hegde@amd.com (mailing list archive)
State Rejected, archived
Headers show
Series [v5,01/11] platform/x86/amd/hsmp: Create hsmp/ directory | expand

Commit Message

Suma Hegde Aug. 23, 2024, 7:55 a.m. UTC
Fix below warning caused by smatch by using array_index_nospec()
to clamp the index within the range.
"warn: potential spectre issue 'plat_dev.sock' [r] (local cap)"

Signed-off-by: Suma Hegde <suma.hegde@amd.com>
Reviewed-by: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com>
---
Changes since v4:
None

Changes since v3:
None

Changes since v2:
None

Changes since v1:
Change plat_dev to hsmp_pdev

 drivers/platform/x86/amd/hsmp/acpi.c | 3 +++
 drivers/platform/x86/amd/hsmp/plat.c | 3 +++
 2 files changed, 6 insertions(+)

Comments

Ilpo Järvinen Aug. 23, 2024, 1:54 p.m. UTC | #1
On Fri, 23 Aug 2024, Suma Hegde wrote:

> Fix below warning caused by smatch by using array_index_nospec()
> to clamp the index within the range.
> "warn: potential spectre issue 'plat_dev.sock' [r] (local cap)"

While the warning have always been bogus for these code paths because
those are not user controllable values, I suspect the warning might no 
longer trigger at all. I suspect the warning is tied to kstr*() which is 
no longer used.

Also, it should be hsmp_pdev but please retest if this patch can be 
dropped from this series (no need to resend the entire series because of 
that, just mention if this patch can be left out).
Suma Hegde Aug. 26, 2024, 5:38 a.m. UTC | #2
Hi Ilpo,

On 8/23/2024 7:24 PM, Ilpo Järvinen wrote:
> Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
>
>
> On Fri, 23 Aug 2024, Suma Hegde wrote:
>
>> Fix below warning caused by smatch by using array_index_nospec()
>> to clamp the index within the range.
>> "warn: potential spectre issue 'plat_dev.sock' [r] (local cap)"
> While the warning have always been bogus for these code paths because
> those are not user controllable values, I suspect the warning might no
> longer trigger at all. I suspect the warning is tied to kstr*() which is
> no longer used.
>
> Also, it should be hsmp_pdev but please retest if this patch can be
> dropped from this series (no need to resend the entire series because of
> that, just mention if this patch can be left out).
I retested with smatch and warning is no more seen. Please drop this 
patch. Thank you.
> --
>   i.
>
>
>> Signed-off-by: Suma Hegde <suma.hegde@amd.com>
>> Reviewed-by: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com>
>> ---
>> Changes since v4:
>> None
>>
>> Changes since v3:
>> None
>>
>> Changes since v2:
>> None
>>
>> Changes since v1:
>> Change plat_dev to hsmp_pdev
>>
>>   drivers/platform/x86/amd/hsmp/acpi.c | 3 +++
>>   drivers/platform/x86/amd/hsmp/plat.c | 3 +++
>>   2 files changed, 6 insertions(+)
>>
>> diff --git a/drivers/platform/x86/amd/hsmp/acpi.c b/drivers/platform/x86/amd/hsmp/acpi.c
>> index f2bfc5981590..16a82b8bce28 100644
>> --- a/drivers/platform/x86/amd/hsmp/acpi.c
>> +++ b/drivers/platform/x86/amd/hsmp/acpi.c
>> @@ -18,6 +18,7 @@
>>   #include <linux/ioport.h>
>>   #include <linux/kstrtox.h>
>>   #include <linux/module.h>
>> +#include <linux/nospec.h>
>>   #include <linux/platform_device.h>
>>   #include <linux/sysfs.h>
>>   #include <linux/uuid.h>
>> @@ -272,6 +273,8 @@ static int init_acpi(struct device *dev)
>>        if (sock_ind >= hsmp_pdev.num_sockets)
>>                return -EINVAL;
>>
>> +     sock_ind = array_index_nospec(sock_ind, hsmp_pdev.num_sockets);
>> +
>>        ret = hsmp_parse_acpi_table(dev, sock_ind);
>>        if (ret) {
>>                dev_err(dev, "Failed to parse ACPI table\n");
>> diff --git a/drivers/platform/x86/amd/hsmp/plat.c b/drivers/platform/x86/amd/hsmp/plat.c
>> index d55c984a9a5a..8fb395e91806 100644
>> --- a/drivers/platform/x86/amd/hsmp/plat.c
>> +++ b/drivers/platform/x86/amd/hsmp/plat.c
>> @@ -15,6 +15,7 @@
>>   #include <linux/device.h>
>>   #include <linux/module.h>
>>   #include <linux/pci.h>
>> +#include <linux/nospec.h>
>>   #include <linux/platform_device.h>
>>   #include <linux/sysfs.h>
>>
>> @@ -79,6 +80,8 @@ static ssize_t hsmp_metric_tbl_read(struct file *filp, struct kobject *kobj,
>>        if (sock_ind >= hsmp_pdev.num_sockets)
>>                return -EINVAL;
>>
>> +     sock_ind = array_index_nospec(sock_ind, hsmp_pdev.num_sockets);
>> +
>>        sock = &hsmp_pdev.sock[sock_ind];
>>        if (!sock)
>>                return -EINVAL;
>>

> Regards,
Suma Hegde
diff mbox series

Patch

diff --git a/drivers/platform/x86/amd/hsmp/acpi.c b/drivers/platform/x86/amd/hsmp/acpi.c
index f2bfc5981590..16a82b8bce28 100644
--- a/drivers/platform/x86/amd/hsmp/acpi.c
+++ b/drivers/platform/x86/amd/hsmp/acpi.c
@@ -18,6 +18,7 @@ 
 #include <linux/ioport.h>
 #include <linux/kstrtox.h>
 #include <linux/module.h>
+#include <linux/nospec.h>
 #include <linux/platform_device.h>
 #include <linux/sysfs.h>
 #include <linux/uuid.h>
@@ -272,6 +273,8 @@  static int init_acpi(struct device *dev)
 	if (sock_ind >= hsmp_pdev.num_sockets)
 		return -EINVAL;
 
+	sock_ind = array_index_nospec(sock_ind, hsmp_pdev.num_sockets);
+
 	ret = hsmp_parse_acpi_table(dev, sock_ind);
 	if (ret) {
 		dev_err(dev, "Failed to parse ACPI table\n");
diff --git a/drivers/platform/x86/amd/hsmp/plat.c b/drivers/platform/x86/amd/hsmp/plat.c
index d55c984a9a5a..8fb395e91806 100644
--- a/drivers/platform/x86/amd/hsmp/plat.c
+++ b/drivers/platform/x86/amd/hsmp/plat.c
@@ -15,6 +15,7 @@ 
 #include <linux/device.h>
 #include <linux/module.h>
 #include <linux/pci.h>
+#include <linux/nospec.h>
 #include <linux/platform_device.h>
 #include <linux/sysfs.h>
 
@@ -79,6 +80,8 @@  static ssize_t hsmp_metric_tbl_read(struct file *filp, struct kobject *kobj,
 	if (sock_ind >= hsmp_pdev.num_sockets)
 		return -EINVAL;
 
+	sock_ind = array_index_nospec(sock_ind, hsmp_pdev.num_sockets);
+
 	sock = &hsmp_pdev.sock[sock_ind];
 	if (!sock)
 		return -EINVAL;