[PATCH v8 1/2] mm: security: introduce init_on_alloc=1 and init_on_free=1 boot options
Michal Hocko
mhocko at kernel.org
Wed Jun 26 14:49:43 UTC 2019
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
More information about the Linux-security-module-archive
mailing list