Skip to content

Commit 1692cf4

Browse files
Alexander AntonovPeter Zijlstra
authored andcommitted
perf/x86/intel/uncore: Fix NULL pointer dereference issue in upi_fill_topology()
Get logical socket id instead of physical id in discover_upi_topology() to avoid out-of-bound access on 'upi = &type->topology[nid][idx];' line that leads to NULL pointer dereference in upi_fill_topology() Fixes: f680b6e ("perf/x86/intel/uncore: Enable UPI topology discovery for Icelake Server") Reported-by: Kyle Meyer <kyle.meyer@hpe.com> Signed-off-by: Alexander Antonov <alexander.antonov@linux.intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Kan Liang <kan.liang@linux.intel.com> Tested-by: Kyle Meyer <kyle.meyer@hpe.com> Link: https://lore.kernel.org/r/20231127185246.2371939-2-alexander.antonov@linux.intel.com
1 parent 0f9e0d7 commit 1692cf4

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

arch/x86/events/intel/uncore_snbep.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5596,7 +5596,7 @@ static int discover_upi_topology(struct intel_uncore_type *type, int ubox_did, i
55965596
struct pci_dev *ubox = NULL;
55975597
struct pci_dev *dev = NULL;
55985598
u32 nid, gid;
5599-
int i, idx, ret = -EPERM;
5599+
int i, idx, lgc_pkg, ret = -EPERM;
56005600
struct intel_uncore_topology *upi;
56015601
unsigned int devfn;
56025602

@@ -5614,8 +5614,13 @@ static int discover_upi_topology(struct intel_uncore_type *type, int ubox_did, i
56145614
for (i = 0; i < 8; i++) {
56155615
if (nid != GIDNIDMAP(gid, i))
56165616
continue;
5617+
lgc_pkg = topology_phys_to_logical_pkg(i);
5618+
if (lgc_pkg < 0) {
5619+
ret = -EPERM;
5620+
goto err;
5621+
}
56175622
for (idx = 0; idx < type->num_boxes; idx++) {
5618-
upi = &type->topology[nid][idx];
5623+
upi = &type->topology[lgc_pkg][idx];
56195624
devfn = PCI_DEVFN(dev_link0 + idx, ICX_UPI_REGS_ADDR_FUNCTION);
56205625
dev = pci_get_domain_bus_and_slot(pci_domain_nr(ubox->bus),
56215626
ubox->bus->number,
@@ -5626,6 +5631,7 @@ static int discover_upi_topology(struct intel_uncore_type *type, int ubox_did, i
56265631
goto err;
56275632
}
56285633
}
5634+
break;
56295635
}
56305636
}
56315637
err:

0 commit comments

Comments
 (0)