diff options
author | skra <skra@FreeBSD.org> | 2015-11-08 18:48:35 +0000 |
---|---|---|
committer | skra <skra@FreeBSD.org> | 2015-11-08 18:48:35 +0000 |
commit | 32f0ed67b358127d8ec92f7615d13f8fed0dad9f (patch) | |
tree | 1635a0dc398ef0c6e993a6a7f97ad2bc6985d816 | |
parent | 425e227d0238d5c8165dc91f128206b6e6e5043f (diff) | |
download | FreeBSD-src-32f0ed67b358127d8ec92f7615d13f8fed0dad9f.zip FreeBSD-src-32f0ed67b358127d8ec92f7615d13f8fed0dad9f.tar.gz |
Fix pagelist bus_dmamap_t map handling. Memory for pagelist is allocated
by bus_dmamem_alloc() which creates associated bus_dmamap_t map for us.
When this memory is freed by bus_dmamem_free(), the map is freed as well.
Thus there is no need to free it explicitly by bus_dmamap_destroy(),
which leads to double freeing.
Discussed with: gonzo
Approved by: kib (mentor)
-rw-r--r-- | sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c b/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c index 9b97615..6e5f320 100644 --- a/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c +++ b/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c @@ -542,9 +542,8 @@ create_pagelist(char __user *buf, size_t count, unsigned short type, return 0; failed_load: - bus_dmamap_unload(bi->pagelist_dma_tag, bi->pagelist_dma_map); + bus_dmamem_free(bi->pagelist_dma_tag, bi->pagelist, bi->pagelist_dma_map); failed_alloc: - bus_dmamap_destroy(bi->pagelist_dma_tag, bi->pagelist_dma_map); bus_dma_tag_destroy(bi->pagelist_dma_tag); return err; @@ -613,7 +612,6 @@ free_pagelist(BULKINFO_T *bi, int actual) bus_dmamap_unload(bi->pagelist_dma_tag, bi->pagelist_dma_map); bus_dmamem_free(bi->pagelist_dma_tag, bi->pagelist, bi->pagelist_dma_map); - bus_dmamap_destroy(bi->pagelist_dma_tag, bi->pagelist_dma_map); bus_dma_tag_destroy(bi->pagelist_dma_tag); free(bi, M_VCPAGELIST); |