Skip to contentSkip to conversation

perf: arm-spe: Fix null-ptr-deref in arm_spe__alloc_metadata()

PATCH In review Nihar Chaithanya 2 participants 2 messages Dec 20, 2024

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 perf: arm-spe: Fix null-ptr-deref in arm_spe__alloc_metadata()

When metadata is allocated using arm_spe__alloc_metadata(), if the metadata version is 1, metadata is returned as NULL. This value is dereferenced later in arm_spe__free_metadata() and it can cause null-ptr-deref.

Modify the NULL check for metadata to return -EINVAL even when metadata_ver == 1.

This issue was reported by Coverity scan [1].
[1] https://scan5.scan.coverity.com/#/project-view/63616/10063?selectedIssue=1636359

---
 tools/perf/util/arm-spe.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/arm-spe.c +1 -1
index dbf13f47879c..55827d8ce133 100644
@@ -1497,7 +1497,7 @@ int arm_spe_process_auxtrace_info(union perf_event *event,
 
 	metadata = arm_spe__alloc_metadata(auxtrace_info, &metadata_ver,
 					   &nr_cpu);
-	if (!metadata && metadata_ver != 1) {
+	if (!metadata) {
 		pr_err("Failed to parse Arm SPE metadata.\n");
 		return -EINVAL;
 	}
Signature · 1 line
2.34.1
reviewer
#1 lore raw
Quoted 8 lines · Nihar Chaithanya

When metadata is allocated using arm_spe__alloc_metadata(), if the metadata version is 1, metadata is returned as NULL. This value is dereferenced later in arm_spe__free_metadata() and it can cause null-ptr-deref.

Modify the NULL check for metadata to return -EINVAL even when metadata_ver == 1.

Hi Nihar,

I don't think this is the right fix. Doesn't that mean we can't open files with V1 anymore? Did you test opening an old SPE file on a new version of Perf? I actually thought I tested this before but maybe not if there's a NULL deref.

Seems like the correct fix is to not dereference anything if metadata is NULL, or make a fake placeholder one.

Quoted 3 lines

This issue was reported by Coverity scan [1].
[1] https://scan5.scan.coverity.com/#/project-view/63616/10063?selectedIssue=1636359

Is this supposed to be publicly accessible? It goes to a login page for me.

Quoted 2 lines

Probably needs a fixes: tag too for the commit that introduced the issue.

Thanks
James

Quoted 17 lines
---
  tools/perf/util/arm-spe.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/arm-spe.c +1 -1
index dbf13f47879c..55827d8ce133 100644
@@ -1497,7 +1497,7 @@ int arm_spe_process_auxtrace_info(union perf_event *event,
 
  	metadata = arm_spe__alloc_metadata(auxtrace_info, &metadata_ver,
  					   &nr_cpu);
-	if (!metadata && metadata_ver != 1) {
+	if (!metadata) {
  		pr_err("Failed to parse Arm SPE metadata.\n");
  		return -EINVAL;
  	}