Re: [PATCH] ACPI: scan: Fix DMA range assignment

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Seems good. Thanks very much.

Reviewed-by: Jianmin Lv <lvjianmin@xxxxxxxxxxx>

On 2022/10/18 下午9:14, Robin Murphy wrote:
Assigning the device's dma_range_map from the iterator variable after
the loop means it always points to the empty terminator at the end of
the map, which is not what we want. Similarly, freeing the iterator on
error when it points to somwhere in the middle of the allocated array
won't work either. Fix this.

Fixes: bf2ee8d0c385 ("ACPI: scan: Support multiple DMA windows with different offsets")
Signed-off-by: Robin Murphy <robin.murphy@xxxxxxx>
---
  drivers/acpi/scan.c | 7 ++++---
  1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 558664d169fc..024cc373a197 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1509,9 +1509,12 @@ int acpi_dma_get_range(struct device *dev, const struct bus_dma_region **map)
  			goto out;
  		}
+ *map = r;
+
  		list_for_each_entry(rentry, &list, node) {
  			if (rentry->res->start >= rentry->res->end) {
-				kfree(r);
+				kfree(*map);
+				*map = NULL;
  				ret = -EINVAL;
  				dev_dbg(dma_dev, "Invalid DMA regions configuration\n");
  				goto out;
@@ -1523,8 +1526,6 @@ int acpi_dma_get_range(struct device *dev, const struct bus_dma_region **map)
  			r->offset = rentry->offset;
  			r++;
  		}
-
-		*map = r;
  	}
   out:
  	acpi_dev_free_resource_list(&list);





[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux