[Nouveau] drm/nouveau/core/memory: kmemleak 684 new suspected memory leaks

Sergey Senozhatsky sergey.senozhatsky.work at gmail.com
Fri May 17 06:31:34 UTC 2019


On (05/17/19 15:13), Sergey Senozhatsky wrote:
> 5.1.0-next-20190517
> 
> I'm looking at quite a lot of kmemleak reports coming from
> drm/nouveau/core/memory, all of which are:
> 
>     unreferenced object 0xffff8deec27c4ac0 (size 16):
>       comm "Web Content", pid 5309, jiffies 4309675011 (age 68.076s)
>       hex dump (first 16 bytes):
>         00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
>       backtrace:
>         [<0000000081f2894f>] nvkm_memory_tags_get+0x8e/0x130
>         [<000000007cd7c0bc>] gf100_vmm_valid+0x196/0x2f0
>         [<0000000070cc6d67>] nvkm_vmm_map+0xa8/0x360
>         [<00000000ab678644>] nvkm_vram_map+0x48/0x50
>         [<00000000d8176378>] nvkm_uvmm_mthd+0x658/0x770
>         [<00000000463fca5a>] nvkm_ioctl+0xdf/0x177
>         [<000000000afc4996>] nvif_object_mthd+0xd4/0x100
>         [<000000002f7a7385>] nvif_vmm_map+0xeb/0x100
>         [<00000000ef2537ed>] nouveau_mem_map+0x79/0xd0
>         [<0000000014ddc0cf>] nouveau_vma_new+0x19d/0x1c0
>         [<00000000f99888a1>] nouveau_gem_object_open+0xd4/0x140
>         [<000000009cd25861>] drm_gem_handle_create_tail+0xe3/0x160
>         [<00000000191784d9>] nouveau_gem_ioctl_new+0x6e/0xd0
>         [<00000000159678df>] drm_ioctl_kernel+0x8c/0xd0
>         [<00000000fbaa6154>] drm_ioctl+0x1c4/0x360
>         [<000000006833fe15>] nouveau_drm_ioctl+0x63/0xb0

Yet another one (4 leaks), but this looks more like a real leak.

unreferenced object 0xffff8f1e0cbbe840 (size 192):
  comm "swapper/0", pid 1, jiffies 4294668445 (age 742.639s)
  hex dump (first 32 bytes):
    00 90 89 0c 1e 8f ff ff 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<000000006933ed2b>] nouveau_conn_reset+0x20/0xb0
    [<00000000572e2e30>] nouveau_connector_create+0x356/0x54c
    [<000000008a6a13cd>] nv50_display_create+0x2fb/0x917
    [<000000007fab0a58>] nouveau_display_create+0x3e6/0x600
    [<000000008b8644c8>] nouveau_drm_device_init+0x149/0x6b0
    [<000000004fd78a1f>] nouveau_drm_probe+0x263/0x2b0
    [<00000000357716ef>] pci_device_probe+0xa3/0x110
    [<00000000061d40e4>] really_probe+0xd3/0x240
    [<000000000ade44b6>] driver_probe_device+0x50/0xc0
    [<000000009cd0024c>] device_driver_attach+0x53/0x60
    [<00000000b11ab0bb>] __driver_attach+0x4c/0xb0
    [<0000000016d8457f>] bus_for_each_dev+0x66/0x90
    [<00000000f2855f5e>] bus_add_driver+0x171/0x1c0
    [<0000000021c08fc1>] driver_register+0x6c/0xaf
    [<0000000086357843>] do_one_initcall+0x36/0x1d4
    [<00000000a6be055a>] kernel_init_freeable+0x1bf/0x24f

Seems that connector ->state is not fully destroyed.

---
 drivers/gpu/drm/nouveau/nouveau_connector.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
index 4116ee62adaf..caec1737a7de 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -251,8 +251,10 @@ nouveau_conn_reset(struct drm_connector *connector)
 	if (WARN_ON(!(asyc = kzalloc(sizeof(*asyc), GFP_KERNEL))))
 		return;
 
-	if (connector->state)
+	if (connector->state) {
 		__drm_atomic_helper_connector_destroy_state(connector->state);
+		kfree(connector->state);
+	}
 	__drm_atomic_helper_connector_reset(connector, &asyc->state);
 	asyc->dither.mode = DITHERING_MODE_AUTO;
 	asyc->dither.depth = DITHERING_DEPTH_AUTO;
-- 
2.21.0



More information about the Nouveau mailing list