mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-14 12:37:32 +00:00
PCI: hotplug: ACPI: Fix context refcounting in acpiphp_grab_context()
commitdae68d7fd4
upstream. If context is not NULL in acpiphp_grab_context(), but the is_going_away flag is set for the device's parent, the reference counter of the context needs to be decremented before returning NULL or the context will never be freed, so make that happen. Fixes:edf5bf34d4
("ACPI / dock: Use callback pointers from devices' ACPI hotplug contexts") Reported-by: Vasily Averin <vvs@virtuozzo.com> Cc: 3.15+ <stable@vger.kernel.org> # 3.15+ Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
233f70bdb1
commit
ceeb1defbd
1 changed files with 11 additions and 3 deletions
|
@ -136,13 +136,21 @@ static struct acpiphp_context *acpiphp_grab_context(struct acpi_device *adev)
|
|||
struct acpiphp_context *context;
|
||||
|
||||
acpi_lock_hp_context();
|
||||
|
||||
context = acpiphp_get_context(adev);
|
||||
if (!context || context->func.parent->is_going_away) {
|
||||
acpi_unlock_hp_context();
|
||||
return NULL;
|
||||
if (!context)
|
||||
goto unlock;
|
||||
|
||||
if (context->func.parent->is_going_away) {
|
||||
acpiphp_put_context(context);
|
||||
context = NULL;
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
get_bridge(context->func.parent);
|
||||
acpiphp_put_context(context);
|
||||
|
||||
unlock:
|
||||
acpi_unlock_hp_context();
|
||||
return context;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue