From: Dave Jiang <dave.jiang@intel.com>
To: "Rafael J. Wysocki (Intel)" <rafael@kernel.org>
Cc: linux-acpi@vger.kernel.org, linux-cxl@vger.kernel.org,
tony.luck@intel.com, bp@alien8.de, guohanjun@huawei.com,
mchehab@kernel.org, xueshuai@linux.alibaba.com,
terry.bowman@amd.com, benjamin.cheatham@amd.com,
alison.schofield@intel.com,
Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
Subject: Re: [PATCH v6 00/13] ACPI: APEI: GHES: Collection of fixes for issues reported by sashiko
Date: Fri, 4 Sep 2026 12:44:06 -0700 [thread overview]
Message-ID: <60466c81-f7c9-46fc-a809-06ac2f8a76af@intel.com> (raw)
In-Reply-To: <CAJZ5v0hDv11cPuztPZsaDd7uwD_49KznJy=tzuRO+dZc=CnAEQ@mail.gmail.com>
On 9/4/26 11:21 AM, Rafael J. Wysocki (Intel) wrote:
> On Fri, Sep 4, 2026 at 7:23 PM Dave Jiang <dave.jiang@intel.com> wrote:
>>
>> Fixes for pre-existing issues sashiko-bot found while reviewing patches in the
>> CPER, extlog and GHES paths. v1 through v3 fixed successive batches as the
>> review widened; see the links below.
>>
>> The series is grouped in three parts, plus a cleanup.
>>
>> Bound the record before anything walks it:
>>
>> 1/13: Reject CPER records with an out-of-range error_data_length.
>> 2/13: Reject an error status block length that wraps a u32.
>> 3/13: Validate the extlog record length before walking sections.
>>
>> Fix the extlog error paths, then enable them:
>>
>> 4/13: Defer CXL protocol error handling to avoid a lock inversion.
>> 5/13: Avoid populating software AER metadata from the raw hardware buffer.
>> 6/13: Validate the PCIe error section length before payload access.
>> 7/13: Fix the CONFIG_ACPI_APEI_PCIEAER guard typo in extlog.c.
>>
>> Bound each section payload before its consumers read it:
>>
>> 8/13: Bound the CXL event record copy to the firmware section length.
>> 9/13: Validate the CXL protocol error section length before the RAS cap copy.
>> 10/13: Read only validated fields in cper_mem_err_pack().
>> 11/13: Validate the memory error section length before payload access.
>> 12/13: Bound the AER info copy and sanitize software metadata in ghes.c.
>>
>> Then drop an export patch 4 made redundant:
>>
>> 13/13: Make cxl_cper_handle_prot_err() static.
>>
>> Patches 1, 2 and 10 touch drivers/firmware/efi/cper.c, closing the holes at
>> the shared choke point the rest of the series relies on. Patch 2 also fixes an
>> infinite loop in bert_print_all(), unrelated to this series but the same root
>> cause.
>>
>> Known gaps, left for separate patches:
>>
>> - cxl_cper_print_prot_err() in drivers/firmware/efi/cper_cxl.c uses
>> dvsec_len without bounding it against the section length.
>> - cxl_rch_get_aer_info() in drivers/cxl/core/ras_rch.c reads the RCH AER
>> capability from MMIO without clearing header_len/flit, the same class as
>> patches 5 and 12. In the same file, cxl_rch_get_aer_severity() tests
>> PCI_ERR_ROOT_FATAL_RCV against uncor_status, where that bit is
>> PCI_ERR_UNC_FCP.
>> - struct pcie_tlp_log grew to 60 bytes for Flit mode, so the 96-byte CPER
>> AER info no longer maps 1:1 onto struct aer_capability_regs past the
>> Header Log. Patches 5 and 12 now copy the part that maps and place the TLP
>> Prefix Log from its own offset, which covers every field the print path
>> reads - but nothing here decodes the Flit-mode header DWORDs, which reuse
>> those same prefix registers at payload offset 56 while the struct expects
>> dw[4..13] at 44. Doing that properly wants a field-by-field mapping
>> shared with cxl_rch_get_aer_info(), plus a clamp: pcie_print_tlp_log()
>> trusts header_len against a 14-entry dw[], and PCI_ERR_CAP_TLP_LOG_SIZE
>> is five bits wide.
>>
>> v1: https://lore.kernel.org/linux-cxl/20260709162807.1957783-1-dave.jiang@intel.com/
>> v2: https://lore.kernel.org/linux-cxl/20260714231835.303081-1-dave.jiang@intel.com/
>> v3: https://lore.kernel.org/linux-cxl/20260717161647.1493259-1-dave.jiang@intel.com/
>> v4: https://lore.kernel.org/linux-cxl/20260824174936.939059-1-dave.jiang@intel.com/
>> v5: https://lore.kernel.org/linux-cxl/20260827203726.3027541-1-dave.jiang@intel.com/
>>
>> Changes since v5
>> ----------------
>> - Patches 5 and 12: also place the TLP Prefix Log from its own hardware
>> offset rather than leaving it zero. Shortening the copy in v5 dropped it,
>> and it is the one field the print path still reads (sashiko). Alison's and
>> Shuai's Reviewed-by are kept on both, since the intent and location have
>> not changed.
>>
>> Changes since v4
>> ----------------
>> - Patch 1: use check_add_overflow() instead of a u64 sum plus an INT_MAX
>> test, and drop the now-redundant acpi_hest_get_size() bound, since
>> record_size is never smaller than the header (Jonathan Cameron).
>> - Patches 5 and 12: copy only the 44 bytes of aer_info that map onto struct
>> aer_capability_regs - the leading registers and the four Header Log DWORDs
>> - and leave the rest zero, instead of copying all 96 bytes and then
>> clearing header_len and flit (Jonathan Cameron). That also keeps the Root
>> Error Command, Root Error Status and Error Source ID out of
>> header_log.prefix[], where pcie_print_tlp_log() was printing them as
>> end-to-end prefixes.
>> - Patch 3: kept the length bound ahead of cper_estatus_check() and expanded
>> the comment to say why. Swapping them would let cper_estatus_check() walk
>> sections over an unbounded data_length, past the end of elog_buf
>> (Jonathan Cameron).
>> - Condensed the commit logs and comments again; prose only.
>>
>> Changes since v3
>> ----------------
>> - Regrouped into three parts: bound the record, fix and enable the extlog
>> paths, then bound each section payload. v3 interleaved them, so patch 1
>> checked a section before the patch establishing that contract. No code
>> changed.
>> - Moved the extlog lock inversion fix (patch 4) ahead of the CXL protocol
>> error length validation (patch 9). The former deletes
>> extlog_cxl_cper_handle_prot_err(), which the v3 order plumbed a new len
>> argument through three patches before removing it. No functional change.
>> - Patch 1: bound the sum rather than the u32 error_data_length, so the check
>> does not depend on the <acpi/ghes.h> helpers behaving. The v3 "< 0" check
>> was dead code (Tony Luck, Shuai Xue). Reviewed-by dropped; not the same
>> check.
>> - New patch 2: reject an error status block length that wraps the u32 sum in
>> cper_estatus_len(). A data_length of 0xffffffec makes it read back as 0,
>> slipping past the extlog bound in patch 3 and leaving bert_print_all()
>> advancing by zero forever (sashiko).
>> - Patch 4: moved the cxl_cper_post_prot_err() declaration inside the
>> CONFIG_ACPI_APEI_GHES block in <acpi/ghes.h> (Shuai Xue).
>> - Patch 6: warn instead of returning silently on a short PCIe section (Shuai
>> Xue), and added the Closes: link v3 omitted.
>> - Patch 7: corrected the Fixes tag to e778ffefa34d, the commit that added the
>> "#ifdef ACPI_APEI_PCIEAER" guard, and dropped its Reported-by; sashiko-bot
>> reviewed that patch rather than reporting the typo.
>> - Patch 9: made the two prot-err length messages distinguishable; both printed
>> the same text. The second now reports dvsec_len (Shuai Xue).
>> - New patch 10: read only validated fields in cper_mem_err_pack(). It copied
>> extended, rank, mem_array_handle and mem_dev_handle unconditionally from
>> offsets 73 to 79, past the end of the 73-byte UEFI 2.1/2.2 layout (sashiko).
>> - Patch 11: derive the required length from the claimed validation bits. A
>> single size gets it wrong both ways (sashiko). Reviewed-by dropped; the
>> check gained a helper and is no longer the one Alison and Shuai reviewed.
>> - New patch 13: make cxl_cper_handle_prot_err() static. Patch 4 removed its
>> last external caller.
>>
>> Dave Jiang (13):
>> efi/cper: Reject CPER records with an out-of-range error_data_length
>> efi/cper: Reject an error status block length that wraps a u32
>> ACPI: extlog: Validate elog record length before walking sections
>> ACPI: extlog: Defer CXL protocol error handling to avoid lock
>> inversion
>> ACPI: extlog: Avoid populating software AER metadata from raw hardware
>> buffer
>> ACPI: extlog: Validate PCIe error section length before payload access
>> ACPI: extlog: Fix CONFIG_ACPI_APEI_PCIEAER guard typo
>> ACPI: APEI: GHES: Bound CXL event record copy to the firmware section
>> length
>> ACPI: APEI: GHES: Validate CXL protocol error section length before
>> RAS cap copy
>> efi/cper: Read only validated fields in cper_mem_err_pack()
>> ACPI: APEI: GHES: Validate memory error section length before payload
>> access
>> ACPI: APEI: GHES: Bound AER info copy and sanitize software metadata
>> cxl/ras: Make cxl_cper_handle_prot_err() static
>>
>> drivers/acpi/acpi_extlog.c | 64 +++++++++++++---------
>> drivers/acpi/apei/ghes.c | 92 +++++++++++++++++++++++++++-----
>> drivers/acpi/apei/ghes_helpers.c | 18 ++++++-
>> drivers/cxl/core/ras.c | 3 +-
>> drivers/firmware/efi/cper.c | 51 +++++++++++++++---
>> include/acpi/ghes.h | 4 ++
>> include/cxl/event.h | 6 +--
>> 7 files changed, 186 insertions(+), 52 deletions(-)
>
> Sashiko has still reported a finding (medium-level) in patch [5/13]:
>
> https://sashiko.dev/#/patchset/20260904172337.1409775-1-dave.jiang%40intel.com
>
> but since the entire series has been reviewed by humans, I'm going to
> apply it as is for 7.4 and if you think that the potential issue
> pointed out in the above is worth taking care of, please send a
> follow-up fix patch (which also applies to the pre-existing issues
> reported there).
You can apply as is. I have a follow on patch to address the issue raised. Thank you!>
> Thanks!
>
prev parent reply other threads:[~2026-09-04 19:44 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 17:23 [PATCH v6 00/13] ACPI: APEI: GHES: Collection of fixes for issues reported by sashiko Dave Jiang
2026-09-04 17:23 ` [PATCH v6 01/13] efi/cper: Reject CPER records with an out-of-range error_data_length Dave Jiang
2026-09-04 17:23 ` [PATCH v6 02/13] efi/cper: Reject an error status block length that wraps a u32 Dave Jiang
2026-09-04 17:23 ` [PATCH v6 03/13] ACPI: extlog: Validate elog record length before walking sections Dave Jiang
2026-09-04 17:23 ` [PATCH v6 04/13] ACPI: extlog: Defer CXL protocol error handling to avoid lock inversion Dave Jiang
2026-09-04 17:23 ` [PATCH v6 05/13] ACPI: extlog: Avoid populating software AER metadata from raw hardware buffer Dave Jiang
2026-09-04 17:23 ` [PATCH v6 06/13] ACPI: extlog: Validate PCIe error section length before payload access Dave Jiang
2026-09-04 17:23 ` [PATCH v6 07/13] ACPI: extlog: Fix CONFIG_ACPI_APEI_PCIEAER guard typo Dave Jiang
2026-09-04 17:23 ` [PATCH v6 08/13] ACPI: APEI: GHES: Bound CXL event record copy to the firmware section length Dave Jiang
2026-09-04 17:23 ` [PATCH v6 09/13] ACPI: APEI: GHES: Validate CXL protocol error section length before RAS cap copy Dave Jiang
2026-09-04 17:23 ` [PATCH v6 10/13] efi/cper: Read only validated fields in cper_mem_err_pack() Dave Jiang
2026-09-04 17:23 ` [PATCH v6 11/13] ACPI: APEI: GHES: Validate memory error section length before payload access Dave Jiang
2026-09-04 17:23 ` [PATCH v6 12/13] ACPI: APEI: GHES: Bound AER info copy and sanitize software metadata Dave Jiang
2026-09-04 17:23 ` [PATCH v6 13/13] cxl/ras: Make cxl_cper_handle_prot_err() static Dave Jiang
2026-09-04 18:21 ` [PATCH v6 00/13] ACPI: APEI: GHES: Collection of fixes for issues reported by sashiko Rafael J. Wysocki (Intel)
2026-09-04 19:44 ` Dave Jiang [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=60466c81-f7c9-46fc-a809-06ac2f8a76af@intel.com \
--to=dave.jiang@intel.com \
--cc=alison.schofield@intel.com \
--cc=benjamin.cheatham@amd.com \
--cc=bp@alien8.de \
--cc=guohanjun@huawei.com \
--cc=jonathan.cameron@oss.qualcomm.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-cxl@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=rafael@kernel.org \
--cc=terry.bowman@amd.com \
--cc=tony.luck@intel.com \
--cc=xueshuai@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox