Unverified Commit 2a330592 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!8486 [sync] PR-8373: dma-direct: Leak pages on dma_set_decrypted() failure

parents 364a3cae 45e0fad6
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -212,7 +212,7 @@ void *dma_direct_alloc(struct device *dev, size_t size,
		err = set_memory_decrypted((unsigned long)ret,
		err = set_memory_decrypted((unsigned long)ret,
					   PFN_UP(size));
					   PFN_UP(size));
		if (err)
		if (err)
			goto out_free_pages;
			goto out_leak_pages;
	}
	}


	memset(ret, 0, size);
	memset(ret, 0, size);
@@ -239,6 +239,8 @@ void *dma_direct_alloc(struct device *dev, size_t size,
out_free_pages:
out_free_pages:
	dma_free_contiguous(dev, page, size);
	dma_free_contiguous(dev, page, size);
	return NULL;
	return NULL;
out_leak_pages:
	return NULL;
}
}


void dma_direct_free(struct device *dev, size_t size,
void dma_direct_free(struct device *dev, size_t size,
@@ -301,7 +303,7 @@ struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
	ret = page_address(page);
	ret = page_address(page);
	if (force_dma_unencrypted(dev)) {
	if (force_dma_unencrypted(dev)) {
		if (set_memory_decrypted((unsigned long)ret, PFN_UP(size)))
		if (set_memory_decrypted((unsigned long)ret, PFN_UP(size)))
			goto out_free_pages;
			goto out_leak_pages;
	}
	}
	memset(ret, 0, size);
	memset(ret, 0, size);
	*dma_handle = phys_to_dma_direct(dev, page_to_phys(page));
	*dma_handle = phys_to_dma_direct(dev, page_to_phys(page));
@@ -309,6 +311,8 @@ struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
out_free_pages:
out_free_pages:
	dma_free_contiguous(dev, page, size);
	dma_free_contiguous(dev, page, size);
	return NULL;
	return NULL;
out_leak_pages:
	return NULL;
}
}


void dma_direct_free_pages(struct device *dev, size_t size,
void dma_direct_free_pages(struct device *dev, size_t size,