Resolves: #2039201, santize devspec output of a newline if one is present

This commit is contained in:
Than Ngo 2022-01-14 11:48:02 +01:00
parent 1df5dd4b8c
commit 99257f5d24
2 changed files with 67 additions and 1 deletions

View File

@ -0,0 +1,62 @@
commit d8408b429ff022ff446ac2607bc26eaf60627658
Author: Tyrel Datwyler <tyreld@linux.ibm.com>
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 <tyreld@linux.ibm.com>
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, '@');

View File

@ -1,6 +1,6 @@
Name: powerpc-utils
Version: 1.3.9
Release: 5%{?dist}
Release: 6%{?dist}
Summary: PERL-based scripts for maintaining and servicing PowerPC systems
License: GPLv2
@ -35,6 +35,7 @@ Patch7: powerpc-utils-1.3.8-hcnmgr.patch
Patch8: powerpc-utils-support-vnic-as-backup-device-for-HNV.patch
# fixed hexdump format
Patch9: powerpc-utils-1.3.9-fix-hexdump-format.patch
Patch10: powerpc-utils-1.3.8-sanitize-devspec-output.patch
%description
PERL-based scripts for maintaining and servicing PowerPC systems.
@ -204,6 +205,9 @@ systemctl enable hcn-init.service >/dev/null 2>&1 || :
%changelog
* Fri Jan 14 2022 Than Ngo <than@redhat.com> - 1.3.9-6
- Resolves: #2039201, santize devspec output of a newline if one is present
* Tue Dec 07 2021 Than Ngo <than@redhat.com> - 1.3.9-5
- Resolves: #2024038 - HNV interface fails to configure when added in lpar shutdown state