commit d8408b429ff022ff446ac2607bc26eaf60627658 Author: Tyrel Datwyler Date: Mon Jan 10 16:55:58 2022 -0500 errinjct: sanitize devspec output of a newline if one is present Linux Kernel Commit: 14c19b2a40b6 ("PCI/sysfs: Add 'devspec' newline") introduced a newline character at the end of the devspec result which historically did not have one before. When a newline is present the errinjct utility constructs an invalid pathname for a PCI devices /reg property in the device tree. As a result the tool fails to provide a valid config address to RTAS resulting in a (-3) Parameter Error. errinjct eeh -v -f 6 -s net/eth1 -a 0xe0800000 -m 0xff800000 errinjct: Could not open file /proc/device-tree//pci@800000020000154/ethernet@0,1 /reg, No such file or directory Injecting an ioa-bus-error with the following data: BUS ADDR: e0800000 ADDR MASK: ff800000 CONFIG ADDR: 1 PHB UNIT_ID: 800000020000154 FUNCTION: 6 Store to PCI Memory Address Space - inject an Address Parity Error errinjct: RTAS error injection failed! errinjct: RTAS: ioa-bus-error: Argument error (-3) Fix this issue by nul terminating the devspec output string at the newline if present. Signed-off-by: Tyrel Datwyler diff --git a/src/errinjct/ioa_bus_error.c b/src/errinjct/ioa_bus_error.c index 281b56b..fc38037 100644 --- a/src/errinjct/ioa_bus_error.c +++ b/src/errinjct/ioa_bus_error.c @@ -232,7 +232,7 @@ static int parse_sysfsname(void) { char path[BUFSZ]; char *devspec; - char *at; + char *at, *nl; uint32_t addr; uint64_t phb_id; @@ -247,6 +247,14 @@ static int parse_sysfsname(void) if (!devspec) return 1; + /* Linux Kernel Commit: 14c19b2a40b6 ("PCI/sysfs: Add 'devspec' newline") + * began reporting the devspec value for pci devices with a trailing newline. + * Remove the newline if present to ensure our built pathname for obtaining + * the config address is valid. */ + nl = strchr(devspec, '\n'); + if (nl) + *nl = '\0'; + /* Now we parse something like /pci@400000000112/pci@2/ethernet@1 for * BUID HI =4000 and LOW 00000112 */ at = strchr(devspec, '@');