linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] ACPI: property: Fix error handling in acpi_init_properties()
@ 2022-08-08 21:12 Sakari Ailus
  2022-08-09 17:22 ` Rafael J. Wysocki
  0 siblings, 1 reply; 2+ messages in thread
From: Sakari Ailus @ 2022-08-08 21:12 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Sakari Ailus, LKML, Linux Memory Management List, linux-acpi,
	lkp, lkp, kernel test robot

buf.pointer, memory for storing _DSD data and nodes, was released if either
parsing properties or, as recently added, attaching data node tags failed.
Alas, properties were still left pointing to this memory if parsing
properties were successful but attaching data node tags failed.

Fix this by separating error handling for the two, and leaving properties
intact if data nodes cannot be tagged for a reason or another.

Reported-by: kernel test robot <oliver.sang@intel.com>
Fixes: 1d52f10917a7 ("ACPI: property: Tie data nodes to acpi handles")
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
Hi Rafael,

This should fix the immediate problem. It needs to be figured out why data
node tagging doesn't work sometimes but that can wait.

 drivers/acpi/property.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 9711482014a6..201a5a9b2671 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -566,13 +566,13 @@ void acpi_init_properties(struct acpi_device *adev)
 					&adev->data, acpi_fwnode_handle(adev)))
 		adev->data.pointer = buf.pointer;
 
-	if (!adev->data.pointer ||
-	    !acpi_tie_nondev_subnodes(&adev->data)) {
-		acpi_untie_nondev_subnodes(&adev->data);
+	if (!adev->data.pointer) {
 		acpi_handle_debug(adev->handle, "Invalid _DSD data, skipping\n");
 		ACPI_FREE(buf.pointer);
+	} else {
+		if (!acpi_tie_nondev_subnodes(&adev->data))
+			acpi_untie_nondev_subnodes(&adev->data);
 	}
-
  out:
 	if (acpi_of && !adev->flags.of_compatible_ok)
 		acpi_handle_info(adev->handle,
-- 
2.30.2



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH 1/1] ACPI: property: Fix error handling in acpi_init_properties()
  2022-08-08 21:12 [PATCH 1/1] ACPI: property: Fix error handling in acpi_init_properties() Sakari Ailus
@ 2022-08-09 17:22 ` Rafael J. Wysocki
  0 siblings, 0 replies; 2+ messages in thread
From: Rafael J. Wysocki @ 2022-08-09 17:22 UTC (permalink / raw)
  To: Sakari Ailus
  Cc: Rafael J. Wysocki, LKML, Linux Memory Management List,
	ACPI Devel Maling List, lkp, kbuild test robot,
	kernel test robot

On Mon, Aug 8, 2022 at 11:12 PM Sakari Ailus
<sakari.ailus@linux.intel.com> wrote:
>
> buf.pointer, memory for storing _DSD data and nodes, was released if either
> parsing properties or, as recently added, attaching data node tags failed.
> Alas, properties were still left pointing to this memory if parsing
> properties were successful but attaching data node tags failed.
>
> Fix this by separating error handling for the two, and leaving properties
> intact if data nodes cannot be tagged for a reason or another.
>
> Reported-by: kernel test robot <oliver.sang@intel.com>
> Fixes: 1d52f10917a7 ("ACPI: property: Tie data nodes to acpi handles")
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
> Hi Rafael,
>
> This should fix the immediate problem. It needs to be figured out why data
> node tagging doesn't work sometimes but that can wait.

Applied, but ->

>  drivers/acpi/property.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
> index 9711482014a6..201a5a9b2671 100644
> --- a/drivers/acpi/property.c
> +++ b/drivers/acpi/property.c
> @@ -566,13 +566,13 @@ void acpi_init_properties(struct acpi_device *adev)
>                                         &adev->data, acpi_fwnode_handle(adev)))
>                 adev->data.pointer = buf.pointer;
>
> -       if (!adev->data.pointer ||
> -           !acpi_tie_nondev_subnodes(&adev->data)) {
> -               acpi_untie_nondev_subnodes(&adev->data);
> +       if (!adev->data.pointer) {
>                 acpi_handle_debug(adev->handle, "Invalid _DSD data, skipping\n");
>                 ACPI_FREE(buf.pointer);
> +       } else {
> +               if (!acpi_tie_nondev_subnodes(&adev->data))
> +                       acpi_untie_nondev_subnodes(&adev->data);
>         }
> -

-> dropped this empty line removal which is unrelated to the fix (and
the empty line is there on purpose).

>   out:
>         if (acpi_of && !adev->flags.of_compatible_ok)
>                 acpi_handle_info(adev->handle,
> --

Please note that I will not be able to push things after Thursday this
week and throughout the next week, so either this goes in on Thursday
or it will miss 5.20, in which case sorry about that.  We'll see.

Thanks!


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-08-09 17:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-08 21:12 [PATCH 1/1] ACPI: property: Fix error handling in acpi_init_properties() Sakari Ailus
2022-08-09 17:22 ` Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox