ARM/dma-mapping: use kvcalloc for fallback memory allocation need
PATCH v3 1/1 ARM/dma-mapping: use kvcalloc for fallback memory allocation need
Current conditional determination of whether to use kzalloc or vzalloc has known issues such as "indefinite retry" when less than PAGE_SIZE memory is needed, but is unavailable. This LWN article [1] describes these issues in greater detail. Use helper function kvcalloc() instead which is more efficient in terms of performance and security.
[1] https://lwn.net/Articles/711653/
This patch proposal is based on following Coccinelle warning using the kvmalloc.cocci semantic patch.
arch/arm/mm/dma-mapping.c:858:28-29: WARNING opportunity for kvmalloc
The semantic patch suggests using kvzalloc() helper function, however, this patch proposes to use kvcalloc instead. kvcalloc() helper function uses 2-factor argument form which is better from a security perspective as described in the following KSPP project commit.
Commit 4e3fd7217105 ("wireguard: ratelimiter: use kvcalloc() instead of kvzalloc()")
---
Changes in v3:
1. Use updated maintainer list to send the patch. Suggested by "Russell King (Oracle)" <[email protected]>
Changes in v2:
1. Update patch subject to use kvcalloc
2. Use kvcalloc instead of kvzalloc helper function. Revise the patch proposal and the patch description accordingly.
arch/arm/mm/dma-mapping.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
arch/arm/mm/dma-mapping.c +1 -5
@@ -851,14 +851,10 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, {struct page **pages;int count = size >>PAGE_SHIFT ; -int array_size = count *sizeof (struct page *);int i =0 ;int order_idx =0 ; -if (array_size <=PAGE_SIZE ) - pages =kzalloc (array_size,GFP_KERNEL ); -else - pages =vzalloc (array_size); + pages =kvcalloc (count,sizeof (struct page *),GFP_KERNEL );if (!pages)return NULL ;
--
2.34.1
Quoted 17 lines · Deepak R Varma
Current conditional determination of whether to use kzalloc or vzalloc has known issues such as "indefinite retry" when less than
PAGE_SIZEmemory is needed, but is unavailable. This LWN article [1] describes these issues in greater detail. Use helper functionkvcalloc()instead which is more efficient in terms of performance and security.[1] https://lwn.net/Articles/711653/
This patch proposal is based on following Coccinelle warning using the
kvmalloc.coccisemantic patch.
arch/arm/mm/dma-mapping.c:858:28-29: WARNING opportunity for kvmallocThe semantic patch suggests using
kvzalloc()helper function, however, this patch proposes to use kvcalloc instead.kvcalloc()helper function uses 2-factor argument form which is better from a security perspective as described in the following KSPP project commit.
Quoted 7 lines
Commit
4e3fd7217105("wireguard: ratelimiter: usekvcalloc()instead ofkvzalloc()")Signed-off-by Deepak R Varma <[email protected]>---
Changes in v3:
1. Use updated maintainer list to send the patch. Suggested by "Russell King (Oracle)" <[email protected]>
Hello,
May I request a review and feedback comment on this patch proposal please?
Thank you,
./drv
Quoted 32 lines
Changes in v2:
1. Update patch subject to use kvcalloc
2. Use kvcalloc instead of kvzalloc helper function. Revise the patch proposal and the patch description accordingly.arch/arm/mm/dma-mapping.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)arch/arm/mm/dma-mapping.c +1
-6@@ -851,14 +851,10 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, {struct page **pages;int count = size >>PAGE_SHIFT ; -int array_size = count *sizeof (struct page *);int i =0 ;int order_idx =0 ; -if (array_size <=PAGE_SIZE ) - pages =kzalloc (array_size,GFP_KERNEL ); -else - pages =vzalloc (array_size); + pages =kvcalloc (count,sizeof (struct page *),GFP_KERNEL );if (!pages)return NULL ; --2.34.1