Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932407AbbFLIDq (ORCPT ); Fri, 12 Jun 2015 04:03:46 -0400 Received: from mga11.intel.com ([192.55.52.93]:10761 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754800AbbFLIDe (ORCPT ); Fri, 12 Jun 2015 04:03:34 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,601,1427785200"; d="scan'208";a="725879639" From: Dongxing Zhang To: airlied@linux.ie, bskeggs@redhat.com, airlied@redhat.com, treding@nvidia.com, acourbot@nvidia.com, dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org, Dongxing Zhang Subject: [PATCH] drm/nouveau: fix memory leak by deallocating cli/drm Date: Thu, 11 Jun 2015 16:14:36 +0800 Message-Id: <1434010476-3406-1-git-send-email-dongxing.zhang@intel.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2743 Lines: 82 unreferenced object 0xffff8800bd132fe8 (size 256): comm "Xorg", pid 1260, jiffies 4294901661 (age 660.504s) hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 e8 2f 13 bd 00 88 ff ff ........./...... 01 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 ................ backtrace: [] kmemleak_alloc+0x4e/0xb0 [] __kmalloc+0x204/0x2c0 [] nouveau_cli_create+0x2a/0xb0 [nouveau] [] nouveau_drm_open+0xcb/0x220 [nouveau] [] drm_open+0x1b2/0x4d0 [drm] [] drm_stub_open+0xa9/0x130 [drm] [] chrdev_open+0x9f/0x1d0 [] do_dentry_open+0x257/0x350 [] vfs_open+0x49/0x50 [] do_last+0x1ec/0x1200 [] path_openat+0x80/0x600 [] do_filp_open+0x3a/0x90 [] do_sys_open+0x128/0x220 [] SyS_open+0x1e/0x20 [] system_call_fastpath+0x16/0x75 [] 0xffffffffffffffff Signed-off-by: Dongxing Zhang --- drivers/gpu/drm/nouveau/nouveau_drm.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 8904933..2ead477 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -115,7 +115,8 @@ nouveau_cli_create(u64 name, const char *sname, if (ret == 0) { mutex_init(&cli->mutex); usif_client_init(cli); - } + } else + kfree(cli); return ret; } return -ENOMEM; @@ -489,6 +490,7 @@ fail_ttm: fail_device: nvif_device_fini(&drm->device); nouveau_cli_destroy(&drm->client); + kfree(drm); return ret; } @@ -517,6 +519,7 @@ nouveau_drm_unload(struct drm_device *dev) if (drm->hdmi_device) pci_dev_put(drm->hdmi_device); nouveau_cli_destroy(&drm->client); + kfree(drm); return 0; } @@ -836,6 +839,7 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv) 0x1000, &cli->vm); if (ret) { nouveau_cli_destroy(cli); + kfree(cli); goto out_suspend; } @@ -877,6 +881,7 @@ nouveau_drm_postclose(struct drm_device *dev, struct drm_file *fpriv) { struct nouveau_cli *cli = nouveau_cli(fpriv); nouveau_cli_destroy(cli); + kfree(cli); pm_runtime_mark_last_busy(dev->dev); pm_runtime_put_autosuspend(dev->dev); } -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/