From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH v2 1/3] drm/nouveau: Fix runtime PM leak in drm_open() Date: Thu, 12 Jul 2018 13:02:52 -0400 Message-ID: <20180712170256.13018-2-lyude@redhat.com> References: <20180712170256.13018-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180712170256.13018-1-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: David Airlie , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Ben Skeggs , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: nouveau.vger.kernel.org Tm90aWNlZCB0aGlzIGFzIEkgd2FzIHNraW1taW5nIHRocm91Z2gsIGlmIHdlIGZhaWwgdG8gYWxs b2NhdGUgbWVtb3J5CmZvciBjbGkgd2UnbGwgZW5kIHVwIHJldHVybmluZyB3aXRob3V0IGRyb3Bw aW5nIHRoZSBydW50aW1lIFBNIHJlZiB3ZQpnb3QuIEFkZGl0aW9uYWxseSwgd2UnbGwgZXZlbiBy ZXR1cm4gdGhlIHdyb25nIHJldHVybiBjb2RlISAocmV0IG1vc3QKbGlrZWx5IHdpbGwgPT0gMCBo ZXJlLCB3ZSB3YW50IC1FTk9NRU0pLgoKU2lnbmVkLW9mZi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVA cmVkaGF0LmNvbT4KUmV2aWV3ZWQtYnk6IEx1a2FzIFd1bm5lciA8bHVrYXNAd3VubmVyLmRlPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMgfCA2ICsrKystLQogMSBm aWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jIGIvZHJpdmVycy9ncHUvZHJt L25vdXZlYXUvbm91dmVhdV9kcm0uYwppbmRleCAwNDUyYjE4ZDM2YjkuLjBmNjY4ZTI3NWVlMSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jCkBAIC05MTksOCArOTE5LDEwIEBA IG5vdXZlYXVfZHJtX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxl ICpmcHJpdikKIAlnZXRfdGFza19jb21tKHRtcG5hbWUsIGN1cnJlbnQpOwogCXNucHJpbnRmKG5h bWUsIHNpemVvZihuYW1lKSwgIiVzWyVkXSIsIHRtcG5hbWUsIHBpZF9ucihmcHJpdi0+cGlkKSk7 CiAKLQlpZiAoIShjbGkgPSBremFsbG9jKHNpemVvZigqY2xpKSwgR0ZQX0tFUk5FTCkpKQotCQly ZXR1cm4gcmV0OworCWlmICghKGNsaSA9IGt6YWxsb2Moc2l6ZW9mKCpjbGkpLCBHRlBfS0VSTkVM KSkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KIAogCXJldCA9IG5vdXZl YXVfY2xpX2luaXQoZHJtLCBuYW1lLCBjbGkpOwogCWlmIChyZXQpCi0tIAoyLjE3LjEKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5vdXZlYXUgbWFpbGlu ZyBsaXN0Ck5vdXZlYXVAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vbm91dmVhdQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 563D8C476E5 for ; Thu, 12 Jul 2018 17:03:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F3CF220852 for ; Thu, 12 Jul 2018 17:03:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F3CF220852 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732392AbeGLRN1 (ORCPT ); Thu, 12 Jul 2018 13:13:27 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:34826 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726912AbeGLRN0 (ORCPT ); Thu, 12 Jul 2018 13:13:26 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A06B34074452; Thu, 12 Jul 2018 17:03:02 +0000 (UTC) Received: from whitewolf.lyude.net.com (ovpn-120-214.rdu2.redhat.com [10.10.120.214]) by smtp.corp.redhat.com (Postfix) with ESMTP id 42E3510FFE4D; Thu, 12 Jul 2018 17:03:02 +0000 (UTC) From: Lyude Paul To: nouveau@lists.freedesktop.org Cc: Karol Herbst , Ben Skeggs , David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/3] drm/nouveau: Fix runtime PM leak in drm_open() Date: Thu, 12 Jul 2018 13:02:52 -0400 Message-Id: <20180712170256.13018-2-lyude@redhat.com> In-Reply-To: <20180712170256.13018-1-lyude@redhat.com> References: <20180712170256.13018-1-lyude@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Thu, 12 Jul 2018 17:03:02 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Thu, 12 Jul 2018 17:03:02 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'lyude@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Noticed this as I was skimming through, if we fail to allocate memory for cli we'll end up returning without dropping the runtime PM ref we got. Additionally, we'll even return the wrong return code! (ret most likely will == 0 here, we want -ENOMEM). Signed-off-by: Lyude Paul Reviewed-by: Lukas Wunner --- drivers/gpu/drm/nouveau/nouveau_drm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 0452b18d36b9..0f668e275ee1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -919,8 +919,10 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv) get_task_comm(tmpname, current); snprintf(name, sizeof(name), "%s[%d]", tmpname, pid_nr(fpriv->pid)); - if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL))) - return ret; + if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL))) { + ret = -ENOMEM; + goto done; + } ret = nouveau_cli_init(drm, name, cli); if (ret) -- 2.17.1