Module Name:    src
Committed By:   joe
Date:           Sun Mar 23 17:04:10 UTC 2025

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/nouveau: nouveau_bo.c

Log Message:
safety: fix memory leak in drm use error lable to free and return on error


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bo.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bo.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bo.c:1.19 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bo.c:1.20
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bo.c:1.19	Sun Dec 19 10:51:56 2021
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bo.c	Sun Mar 23 17:04:09 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_bo.c,v 1.19 2021/12/19 10:51:56 riastradh Exp $	*/
+/*	$NetBSD: nouveau_bo.c,v 1.20 2025/03/23 17:04:09 joe Exp $	*/
 
 /*
  * Copyright 2007 Dave Airlied
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_bo.c,v 1.19 2021/12/19 10:51:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_bo.c,v 1.20 2025/03/23 17:04:09 joe Exp $");
 
 #include <linux/dma-mapping.h>
 #include <linux/swiotlb.h>
@@ -234,8 +234,7 @@ nouveau_bo_alloc(struct nouveau_cli *cli
 	if (cli->device.info.family >= NV_DEVICE_INFO_V0_FERMI) {
 		nvbo->kind = (tile_flags & 0x0000ff00) >> 8;
 		if (!nvif_mmu_kind_valid(mmu, nvbo->kind)) {
-			kfree(nvbo);
-			return ERR_PTR(-EINVAL);
+			goto err;
 		}
 
 		nvbo->comp = mmu->kind[nvbo->kind] != nvbo->kind;
@@ -244,8 +243,7 @@ nouveau_bo_alloc(struct nouveau_cli *cli
 		nvbo->kind = (tile_flags & 0x00007f00) >> 8;
 		nvbo->comp = (tile_flags & 0x00030000) >> 16;
 		if (!nvif_mmu_kind_valid(mmu, nvbo->kind)) {
-			kfree(nvbo);
-			return ERR_PTR(-EINVAL);
+			goto err;
 		}
 	} else {
 		nvbo->zeta = (tile_flags & 0x00000007);
@@ -282,7 +280,7 @@ nouveau_bo_alloc(struct nouveau_cli *cli
 	}
 
 	if (WARN_ON(pi < 0))
-		return ERR_PTR(-EINVAL);
+		goto err;
 
 	/* Disable compression if suitable settings couldn't be found. */
 	if (nvbo->comp && !vmm->page[pi].comp) {
@@ -295,6 +293,10 @@ nouveau_bo_alloc(struct nouveau_cli *cli
 	nouveau_bo_fixup_align(nvbo, flags, align, size);
 
 	return nvbo;
+
+err:
+	kfree(nvbo);
+	return ERR_PTR(-EINVAL);
 }
 
 int

Reply via email to