[dm-devel] [PATCH] dm verity fec: Fix memory leak in verity_fec_ctr

Heinz Mauelshagen heinzm at redhat.com
Wed Mar 18 15:44:27 UTC 2020


Once we are on this, we should put conditionals on those mempool_exit 
and kmem_cache_destroy
calls in the fec dtr, because the target calls that destructor at any 
time on its error path thus part
of the pools or even the cache won't be defined.

Heinz

On 3/17/20 10:15 AM, Shetty, Harshini X (EXT-Sony Mobile) wrote:
> Fix below kmemleak detected in verity_fec_ctr.
> output_pool is allocated for each dm-target device.
> But it is not freed when dm-table for the target
> is removed.Hence Free the output buffer in destructor
> function verity_fec_dtr
>
> unreferenced object 0xffffffffa574d000 (size 4096):
>    comm "init", pid 1667, jiffies 4294894890 (age 307.168s)
>    hex dump (first 32 bytes):
>      8e 36 00 98 66 a8 0b 9b 00 00 00 00 00 00 00 00  .6..f...........
>      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
>    backtrace:
>      [<0000000060e82407>] __kmalloc+0x2b4/0x340
>      [<00000000dd99488f>] mempool_kmalloc+0x18/0x20
>      [<000000002560172b>] mempool_init_node+0x98/0x118
>      [<000000006c3574d2>] mempool_init+0x14/0x20
>      [<0000000008cb266e>] verity_fec_ctr+0x388/0x3b0
>      [<000000000887261b>] verity_ctr+0x87c/0x8d0
>      [<000000002b1e1c62>] dm_table_add_target+0x174/0x348
>      [<000000002ad89eda>] table_load+0xe4/0x328
>      [<000000001f06f5e9>] dm_ctl_ioctl+0x3b4/0x5a0
>      [<00000000bee5fbb7>] do_vfs_ioctl+0x5dc/0x928
>      [<00000000b475b8f5>] __arm64_sys_ioctl+0x70/0x98
>      [<000000005361e2e8>] el0_svc_common+0xa0/0x158
>      [<000000001374818f>] el0_svc_handler+0x6c/0x88
>      [<000000003364e9f4>] el0_svc+0x8/0xc
>      [<000000009d84cec9>] 0xffffffffffffffff
>
> Signed-off-by: Harshini Shetty <harshini.x.shetty at sony.com>
> ---
>   drivers/md/dm-verity-fec.c | 1 +
>   1 file changed, 1 insertion(+)
>
> diff --git a/drivers/md/dm-verity-fec.c b/drivers/md/dm-verity-fec.c
> index 3ceeb6b..49147e6 100644
> --- a/drivers/md/dm-verity-fec.c
> +++ b/drivers/md/dm-verity-fec.c
> @@ -551,6 +551,7 @@ void verity_fec_dtr(struct dm_verity *v)
>   	mempool_exit(&f->rs_pool);
>   	mempool_exit(&f->prealloc_pool);
>   	mempool_exit(&f->extra_pool);
> +	mempool_exit(&f->output_pool);
>   	kmem_cache_destroy(f->cache);
>   
>   	if (f->data_bufio)




More information about the dm-devel mailing list