All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <helgaas@kernel.org>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Linux PCI <linux-pci@vger.kernel.org>,
	Linux ACPI <linux-acpi@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Jesse Brandeburg <jesse.brandeburg@intel.com>,
	Shanker Donthineni <sdonthineni@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>
Subject: Re: [PATCH] PCI: ACPI: Check parent pointer in acpi_pci_find_companion()
Date: Wed, 6 Oct 2021 13:58:42 -0500	[thread overview]
Message-ID: <20211006185842.GA1172531@bhelgaas> (raw)
In-Reply-To: <5523582.DvuYhMxLoT@kreacher>

On Fri, Oct 01, 2021 at 03:58:10PM +0200, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> If acpi_pci_find_companion() is called for a device whose parent
> pointer is NULL, it will crash when attempting to get the ACPI
> companion of the parent due to a NULL pointer dereference in
> the ACPI_COMPANION() macro.
> 
> This was not a problem before commit 375553a93201 ("PCI: Setup ACPI
> fwnode early and at the same time with OF") that made pci_setup_device()
> call pci_set_acpi_fwnode() and so it allowed devices with NULL parent
> pointers to be passed to acpi_pci_find_companion() which is the case
> in pci_iov_add_virtfn(), for instance.
> 
> Fix this issue by making acpi_pci_find_companion() check the device's
> parent pointer upfront and bail out if it is NULL.
> 
> While pci_iov_add_virtfn() can be changed to set the device's parent
> pointer before calling pci_setup_device() for it, checking pointers
> against NULL before dereferencing them is prudent anyway and looking
> for ACPI companions of virtual functions isn't really useful.
> 
> Fixes: 375553a93201 ("PCI: Setup ACPI fwnode early and at the same time with OF")
> Link: https://lore.kernel.org/linux-acpi/8e4bbd5c59de31db71f718556654c0aa077df03d.camel@linux.ibm.com/
> Reported-by: Niklas Schnelle <schnelle@linux.ibm.com>
> Tested-by: Niklas Schnelle <schnelle@linux.ibm.com>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Acked-by: Bjorn Helgaas <bhelgaas@google.com>

> ---
>  drivers/pci/pci-acpi.c |    3 +++
>  1 file changed, 3 insertions(+)
> 
> Index: linux-pm/drivers/pci/pci-acpi.c
> ===================================================================
> --- linux-pm.orig/drivers/pci/pci-acpi.c
> +++ linux-pm/drivers/pci/pci-acpi.c
> @@ -1243,6 +1243,9 @@ static struct acpi_device *acpi_pci_find
>  	bool check_children;
>  	u64 addr;
>  
> +	if (!dev->parent)
> +		return NULL;
> +
>  	down_read(&pci_acpi_companion_lookup_sem);
>  
>  	adev = pci_acpi_find_companion_hook ?
> 
> 
> 

      parent reply	other threads:[~2021-10-06 18:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-01 13:58 [PATCH] PCI: ACPI: Check parent pointer in acpi_pci_find_companion() Rafael J. Wysocki
2021-10-05 13:46 ` Rafael J. Wysocki
2021-10-06 18:58 ` Bjorn Helgaas [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=20211006185842.GA1172531@bhelgaas \
    --to=helgaas@kernel.org \
    --cc=alex.williamson@redhat.com \
    --cc=jesse.brandeburg@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=schnelle@linux.ibm.com \
    --cc=sdonthineni@nvidia.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.