linux-acpi.vger.kernel.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).