Re: [2.6.31-rc1] oops in acpi_get_pci_dev

Troy Moure
2009-06-25T15:38:39Z

Alessandro Suardi wrote:

> On boot:
...
> kernel: BUG: unable to handle kernel NULL pointer dereference at
> 0000000000000018
> kernel: IP: [<ffffffff8121b556>] acpi_get_pci_dev+0x113/0x17
...
> Dell Latitude E6400 x86_64 SMP with Fedora 11 userspace.

> Box continues working after Oops, but locks up when exiting X session.

> 2.6.30-git22 works fine (probably because acpi_get_pci_dev is
> introduced in -rc1)

I've encountered what seems to be the same issue (a NULL pointer
dereference in acpi_get_pci_dev()). In my case, it caused a kernel panic
during boot (so I don't have any text logs to attach).

In my case, pci_get_slot() is returning a NULL pointer that
acpi_get_pci_dev() doesn't check for. The following patch fixes things
for me. Does it work for you, Alessandro?

(I don't know if it's the "right" fix or not, not being familiar with the
system. If it is, I can send it in as a proper patch.)

diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index 8a5bf3b..55b5b90 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -395,7 +395,7 @@ struct pci_dev *acpi_get_pci_dev(acpi_handle handle)
fn = adr & 0xffff;

pdev = pci_get_slot(pbus, PCI_DEVFN(dev, fn));
- if (hnd == handle)
+ if (!pdev || hnd == handle)
break;

pbus = pdev->subordinate;