drm/nouveau: Fix runtime PM leak in drm_open()
authorLyude Paul <lyude@redhat.com>
Thu, 12 Jul 2018 17:02:52 +0000 (13:02 -0400)
committerBen Skeggs <bskeggs@redhat.com>
Mon, 16 Jul 2018 08:06:29 +0000 (18:06 +1000)
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 <lyude@redhat.com>
Reviewed-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_drm.c

index 775443c9af943eb2e96ffd3187852b681fc3f916..c779ee3c665b0f8ce37d163843c624ee54930a62 100644 (file)
@@ -912,8 +912,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)