| From 57beef6e12eeb34ed757425eda7638920351ba9d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 2 Oct 2019 18:58:58 +0200 |
| Subject: efi/cper: Fix endianness of PCIe class code |
| |
| From: Lukas Wunner <lukas@wunner.de> |
| |
| [ Upstream commit 6fb9367a15d1a126d222d738b2702c7958594a5f ] |
| |
| The CPER parser assumes that the class code is big endian, but at least |
| on this edk2-derived Intel Purley platform it's little endian: |
| |
| efi: EFI v2.50 by EDK II BIOS ID:PLYDCRB1.86B.0119.R05.1701181843 |
| DMI: Intel Corporation PURLEY/PURLEY, BIOS PLYDCRB1.86B.0119.R05.1701181843 01/18/2017 |
| |
| {1}[Hardware Error]: device_id: 0000:5d:00.0 |
| {1}[Hardware Error]: slot: 0 |
| {1}[Hardware Error]: secondary_bus: 0x5e |
| {1}[Hardware Error]: vendor_id: 0x8086, device_id: 0x2030 |
| {1}[Hardware Error]: class_code: 000406 |
| ^^^^^^ (should be 060400) |
| |
| Signed-off-by: Lukas Wunner <lukas@wunner.de> |
| Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> |
| Cc: Ben Dooks <ben.dooks@codethink.co.uk> |
| Cc: Dave Young <dyoung@redhat.com> |
| Cc: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> |
| Cc: Jerry Snitselaar <jsnitsel@redhat.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Lyude Paul <lyude@redhat.com> |
| Cc: Matthew Garrett <mjg59@google.com> |
| Cc: Octavian Purdila <octavian.purdila@intel.com> |
| Cc: Peter Jones <pjones@redhat.com> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Scott Talbert <swt@techie.net> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: linux-efi@vger.kernel.org |
| Cc: linux-integrity@vger.kernel.org |
| Link: https://lkml.kernel.org/r/20191002165904.8819-2-ard.biesheuvel@linaro.org |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/firmware/efi/cper.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c |
| index db404aab82b2a..209dc5aefc310 100644 |
| --- a/drivers/firmware/efi/cper.c |
| +++ b/drivers/firmware/efi/cper.c |
| @@ -498,7 +498,7 @@ static void cper_print_pcie(const char *pfx, const struct cper_sec_pcie *pcie, |
| printk("%s""vendor_id: 0x%04x, device_id: 0x%04x\n", pfx, |
| pcie->device_id.vendor_id, pcie->device_id.device_id); |
| p = pcie->device_id.class_code; |
| - printk("%s""class_code: %02x%02x%02x\n", pfx, p[0], p[1], p[2]); |
| + printk("%s""class_code: %02x%02x%02x\n", pfx, p[2], p[1], p[0]); |
| } |
| if (pcie->validation_bits & CPER_PCIE_VALID_SERIAL_NUMBER) |
| printk("%s""serial number: 0x%04x, 0x%04x\n", pfx, |
| -- |
| 2.20.1 |
| |