The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=cb38499303621553c977fd7dd7f18d12731fcd9c
commit cb38499303621553c977fd7dd7f18d12731fcd9c Author: Justin Hibbits <[email protected]> AuthorDate: 2025-10-26 02:45:26 +0000 Commit: Justin Hibbits <[email protected]> CommitDate: 2025-10-27 14:33:49 +0000 x86/intr: Handle case of disabling MSI after release Once an interrupt source is registered it's never deregistered. However, when an MSI is released the pointer for it becomes NULLed out, resulting in a NULL pointer dereference when attempting to disable the now-released MSI source. Add NULL check to avoid this. Reviewed by: kib Sponsored by: Juniper Networks, Inc. Differential Revision: https://reviews.freebsd.org/D51624 --- sys/x86/x86/msi.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sys/x86/x86/msi.c b/sys/x86/x86/msi.c index 9d5a51f9753c..b38247bf6e45 100644 --- a/sys/x86/x86/msi.c +++ b/sys/x86/x86/msi.c @@ -219,6 +219,14 @@ msi_disable_intr(struct intsrc *isrc) struct msi_intsrc *msi = (struct msi_intsrc *)isrc; msi = msi->msi_first; + + /* + * Interrupt sources are always registered, but never unregistered. + * Handle the case where MSIs have all been unregistered. + */ + if (msi == NULL) + return; + msi->msi_enabled--; if (msi->msi_enabled == 0) { for (u_int i = 0; i < msi->msi_count; i++)
