Re: [PATCH v8 1/2] mm: security: introduce init_on_alloc=1 and init_on_free=1 boot options
From: Michal Hocko <mhocko@kernel.org>
Date: 2019-06-26 14:49:48
Also in:
linux-mm
From: Michal Hocko <mhocko@kernel.org>
Date: 2019-06-26 14:49:48
Also in:
linux-mm
On Wed 26-06-19 14:19:42, Alexander Potapenko wrote: [...]
diff --git a/mm/dmapool.c b/mm/dmapool.c index 8c94c89a6f7e..fe5d33060415 100644 --- a/mm/dmapool.c +++ b/mm/dmapool.c
[...]
@@ -428,6 +428,8 @@ void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t dma) } offset = vaddr - page->vaddr; + if (want_init_on_free()) + memset(vaddr, 0, pool->size);
any reason why this is not in DMAPOOL_DEBUG else branch? Why would you want to both zero on free and poison on free?
#ifdef DMAPOOL_DEBUG
if ((dma - page->dma) != offset) {
spin_unlock_irqrestore(&pool->lock, flags);[...]
@@ -1142,6 +1200,8 @@ static __always_inline bool free_pages_prepare(struct page *page, } arch_free_page(page, order); kernel_poison_pages(page, 1 << order, 0); + if (want_init_on_free()) + kernel_init_free_pages(page, 1 << order);
same here. If you don't want to make this exclusive then you have to zero before poisoning otherwise you are going to blow up on the poison check, right?
if (debug_pagealloc_enabled()) kernel_map_pages(page, 1 << order, 0);
-- Michal Hocko SUSE Labs