All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 0/2] ACPI: CPPC: acpi_cppc_processor_probe() fix and cleanup
@ 2022-03-22 16:00 Rafael J. Wysocki
  2022-03-22 16:02 ` [PATCH v1 1/2] ACPI: CPPC: Avoid out of bounds access when parsing _CPC data Rafael J. Wysocki
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2022-03-22 16:00 UTC (permalink / raw)
  To: Linux ACPI
  Cc: Linux PM, LKML, Srinivas Pandruvada, Mario Limonciello,
	Ionela Voinescu

Hi All,

This series of two patches addresses a possible out-of-bounds array access
in acpi_cppc_processor_probe() [1/2] and clean up some of it [2/2].

Please refer to the patch changelogs for details.

Thanks!




^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v1 1/2] ACPI: CPPC: Avoid out of bounds access when parsing _CPC data
  2022-03-22 16:00 [PATCH v1 0/2] ACPI: CPPC: acpi_cppc_processor_probe() fix and cleanup Rafael J. Wysocki
@ 2022-03-22 16:02 ` Rafael J. Wysocki
  2022-03-22 16:03 ` [PATCH v1 2/2] ACPI: CPPC: Change default error code and clean up debug messages in probe Rafael J. Wysocki
  2022-03-23  2:54 ` [PATCH v1 0/2] ACPI: CPPC: acpi_cppc_processor_probe() fix and cleanup Huang Rui
  2 siblings, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2022-03-22 16:02 UTC (permalink / raw)
  To: Linux ACPI
  Cc: Linux PM, LKML, Srinivas Pandruvada, Mario Limonciello,
	Ionela Voinescu

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

If the NumEntries field in the _CPC return package is less than 2, do
not attempt to access the "Revision" element of that package, because
it may not be present then.

Fixes: 337aadff8e45 ("ACPI: Introduce CPU performance controls using CPPC")
BugLink: https://lore.kernel.org/lkml/20220322143534.GC32582@xsang-OptiPlex-9020/
Reported-by: kernel test robot <oliver.sang@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/acpi/cppc_acpi.c |    5 +++++
 1 file changed, 5 insertions(+)

Index: linux-pm/drivers/acpi/cppc_acpi.c
===================================================================
--- linux-pm.orig/drivers/acpi/cppc_acpi.c
+++ linux-pm/drivers/acpi/cppc_acpi.c
@@ -679,6 +679,11 @@ int acpi_cppc_processor_probe(struct acp
 	cpc_obj = &out_obj->package.elements[0];
 	if (cpc_obj->type == ACPI_TYPE_INTEGER)	{
 		num_ent = cpc_obj->integer.value;
+		if (num_ent <= 1) {
+			pr_debug("Unexpected _CPC NumEntries value (%d) for CPU:%d\n",
+				 num_ent, pr->id);
+			goto out_free;
+		}
 	} else {
 		pr_debug("Unexpected entry type(%d) for NumEntries\n",
 				cpc_obj->type);




^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v1 2/2] ACPI: CPPC: Change default error code and clean up debug messages in probe
  2022-03-22 16:00 [PATCH v1 0/2] ACPI: CPPC: acpi_cppc_processor_probe() fix and cleanup Rafael J. Wysocki
  2022-03-22 16:02 ` [PATCH v1 1/2] ACPI: CPPC: Avoid out of bounds access when parsing _CPC data Rafael J. Wysocki
@ 2022-03-22 16:03 ` Rafael J. Wysocki
  2022-03-23  2:54 ` [PATCH v1 0/2] ACPI: CPPC: acpi_cppc_processor_probe() fix and cleanup Huang Rui
  2 siblings, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2022-03-22 16:03 UTC (permalink / raw)
  To: Linux ACPI
  Cc: Linux PM, LKML, Srinivas Pandruvada, Mario Limonciello,
	Ionela Voinescu

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Change the default error code returned by acpi_cppc_processor_probe()
from -EFAULT (which is completely inadequate) to -ENODATA and change
the debug messages printed by it to contain more information and be
more consistent.

While at it, format some white space to follow the coding style.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/acpi/cppc_acpi.c |   27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

Index: linux-pm/drivers/acpi/cppc_acpi.c
===================================================================
--- linux-pm.orig/drivers/acpi/cppc_acpi.c
+++ linux-pm/drivers/acpi/cppc_acpi.c
@@ -654,7 +654,7 @@ int acpi_cppc_processor_probe(struct acp
 	unsigned int num_ent, i, cpc_rev;
 	int pcc_subspace_id = -1;
 	acpi_status status;
-	int ret = -EFAULT;
+	int ret = -ENODATA;
 
 	if (osc_sb_cppc_not_supported)
 		return -ENODEV;
@@ -685,8 +685,8 @@ int acpi_cppc_processor_probe(struct acp
 			goto out_free;
 		}
 	} else {
-		pr_debug("Unexpected entry type(%d) for NumEntries\n",
-				cpc_obj->type);
+		pr_debug("Unexpected _CPC NumEntries entry type (%d) for CPU:%d\n",
+			 cpc_obj->type, pr->id);
 		goto out_free;
 	}
 	cpc_ptr->num_entries = num_ent;
@@ -696,8 +696,8 @@ int acpi_cppc_processor_probe(struct acp
 	if (cpc_obj->type == ACPI_TYPE_INTEGER)	{
 		cpc_rev = cpc_obj->integer.value;
 	} else {
-		pr_debug("Unexpected entry type(%d) for Revision\n",
-				cpc_obj->type);
+		pr_debug("Unexpected _CPC Revision entry type (%d) for CPU:%d\n",
+			 cpc_obj->type, pr->id);
 		goto out_free;
 	}
 	cpc_ptr->version = cpc_rev;
@@ -728,7 +728,8 @@ int acpi_cppc_processor_probe(struct acp
 					if (pcc_data_alloc(pcc_subspace_id))
 						goto out_free;
 				} else if (pcc_subspace_id != gas_t->access_width) {
-					pr_debug("Mismatched PCC ids.\n");
+					pr_debug("Mismatched PCC ids in _CPC for CPU:%d\n",
+						 pr->id);
 					goto out_free;
 				}
 			} else if (gas_t->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
@@ -747,20 +748,21 @@ int acpi_cppc_processor_probe(struct acp
 					 * SystemIO doesn't implement 64-bit
 					 * registers.
 					 */
-					pr_debug("Invalid access width %d for SystemIO register\n",
-						gas_t->access_width);
+					pr_debug("Invalid access width %d for SystemIO register in _CPC\n",
+						 gas_t->access_width);
 					goto out_free;
 				}
 				if (gas_t->address & OVER_16BTS_MASK) {
 					/* SystemIO registers use 16-bit integer addresses */
-					pr_debug("Invalid IO port %llu for SystemIO register\n",
-						gas_t->address);
+					pr_debug("Invalid IO port %llu for SystemIO register in _CPC\n",
+						 gas_t->address);
 					goto out_free;
 				}
 			} else {
 				if (gas_t->space_id != ACPI_ADR_SPACE_FIXED_HARDWARE || !cpc_ffh_supported()) {
 					/* Support only PCC, SystemMemory, SystemIO, and FFH type regs. */
-					pr_debug("Unsupported register type: %d\n", gas_t->space_id);
+					pr_debug("Unsupported register type (%d) in _CPC\n",
+						 gas_t->space_id);
 					goto out_free;
 				}
 			}
@@ -768,7 +770,8 @@ int acpi_cppc_processor_probe(struct acp
 			cpc_ptr->cpc_regs[i-2].type = ACPI_TYPE_BUFFER;
 			memcpy(&cpc_ptr->cpc_regs[i-2].cpc_entry.reg, gas_t, sizeof(*gas_t));
 		} else {
-			pr_debug("Err in entry:%d in CPC table of CPU:%d\n", i, pr->id);
+			pr_debug("Invalid entry type (%d) in _CPC for CPU:%d\n",
+				 i, pr->id);
 			goto out_free;
 		}
 	}




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1 0/2] ACPI: CPPC: acpi_cppc_processor_probe() fix and cleanup
  2022-03-22 16:00 [PATCH v1 0/2] ACPI: CPPC: acpi_cppc_processor_probe() fix and cleanup Rafael J. Wysocki
  2022-03-22 16:02 ` [PATCH v1 1/2] ACPI: CPPC: Avoid out of bounds access when parsing _CPC data Rafael J. Wysocki
  2022-03-22 16:03 ` [PATCH v1 2/2] ACPI: CPPC: Change default error code and clean up debug messages in probe Rafael J. Wysocki
@ 2022-03-23  2:54 ` Huang Rui
  2 siblings, 0 replies; 4+ messages in thread
From: Huang Rui @ 2022-03-23  2:54 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Linux ACPI, Linux PM, LKML, Srinivas Pandruvada,
	Mario Limonciello, Ionela Voinescu

On Tue, Mar 22, 2022 at 05:00:27PM +0100, Rafael J. Wysocki wrote:
> Hi All,
> 
> This series of two patches addresses a possible out-of-bounds array access
> in acpi_cppc_processor_probe() [1/2] and clean up some of it [2/2].
> 
> Please refer to the patch changelogs for details.
> 

Series are Reviewed-by: Huang Rui <ray.huang@amd.com>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-03-23  2:54 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-22 16:00 [PATCH v1 0/2] ACPI: CPPC: acpi_cppc_processor_probe() fix and cleanup Rafael J. Wysocki
2022-03-22 16:02 ` [PATCH v1 1/2] ACPI: CPPC: Avoid out of bounds access when parsing _CPC data Rafael J. Wysocki
2022-03-22 16:03 ` [PATCH v1 2/2] ACPI: CPPC: Change default error code and clean up debug messages in probe Rafael J. Wysocki
2022-03-23  2:54 ` [PATCH v1 0/2] ACPI: CPPC: acpi_cppc_processor_probe() fix and cleanup Huang Rui

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.