Blame SOURCES/nouveau-1.0.11-coverity.patch

e53e0d
From bb57f9af9d179af0962456dca369953521ea8c2c Mon Sep 17 00:00:00 2001
e53e0d
From: Ben Skeggs <bskeggs@redhat.com>
e53e0d
Date: Thu, 2 Jun 2016 10:17:58 +1000
e53e0d
Subject: [PATCH] fix use of out-of-scope data
e53e0d
e53e0d
Reported by Coverity.
e53e0d
e53e0d
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
e53e0d
---
e53e0d
 src/nouveau_copy.c | 38 +++++++++++++++++++++-----------------
e53e0d
 1 file changed, 21 insertions(+), 17 deletions(-)
e53e0d
e53e0d
diff --git a/src/nouveau_copy.c b/src/nouveau_copy.c
e53e0d
index d0b868d..e152a53 100644
e53e0d
--- a/src/nouveau_copy.c
e53e0d
+++ b/src/nouveau_copy.c
e53e0d
@@ -50,8 +50,7 @@ nouveau_copy_init(ScreenPtr pScreen)
e53e0d
 	}, *method = methods;
e53e0d
 	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
e53e0d
 	NVPtr pNv = NVPTR(pScrn);
e53e0d
-	void *data;
e53e0d
-	int ret, size;
e53e0d
+	int ret;
e53e0d
 
e53e0d
 	if (pNv->AccelMethod == NONE) {
e53e0d
 		xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
e53e0d
@@ -65,30 +64,35 @@ nouveau_copy_init(ScreenPtr pScreen)
e53e0d
 		    pNv->dev->chipset == 0xaa ||
e53e0d
 		    pNv->dev->chipset == 0xac)
e53e0d
 			return FALSE;
e53e0d
-		data = &(struct nv04_fifo) {
e53e0d
-			.vram = NvDmaFB,
e53e0d
-			.gart = NvDmaTT,
e53e0d
-		};
e53e0d
-		size = sizeof(struct nv04_fifo);
e53e0d
+
e53e0d
+		ret = nouveau_object_new(&pNv->dev->object, 0,
e53e0d
+					 NOUVEAU_FIFO_CHANNEL_CLASS,
e53e0d
+					 &(struct nv04_fifo) {
e53e0d
+						.vram = NvDmaFB,
e53e0d
+						.gart = NvDmaTT,
e53e0d
+					 }, sizeof(struct nv04_fifo),
e53e0d
+					 &pNv->ce_channel);
e53e0d
 		break;
e53e0d
 	case NV_FERMI:
e53e0d
-		data = &(struct nvc0_fifo) {};
e53e0d
-		size = sizeof(struct nvc0_fifo);
e53e0d
+		ret = nouveau_object_new(&pNv->dev->object, 0,
e53e0d
+					 NOUVEAU_FIFO_CHANNEL_CLASS,
e53e0d
+					 &(struct nvc0_fifo) {
e53e0d
+					 }, sizeof(struct nvc0_fifo),
e53e0d
+					 &pNv->ce_channel);
e53e0d
 		break;
e53e0d
 	case NV_KEPLER:
e53e0d
-		data = &(struct nve0_fifo) {
e53e0d
-			.engine = NVE0_FIFO_ENGINE_CE0 |
e53e0d
-				  NVE0_FIFO_ENGINE_CE1,
e53e0d
-		};
e53e0d
-		size = sizeof(struct nvc0_fifo);
e53e0d
+		ret = nouveau_object_new(&pNv->dev->object, 0,
e53e0d
+					 NOUVEAU_FIFO_CHANNEL_CLASS,
e53e0d
+					 &(struct nve0_fifo) {
e53e0d
+						.engine = NVE0_FIFO_ENGINE_CE0 |
e53e0d
+							  NVE0_FIFO_ENGINE_CE1,
e53e0d
+					 }, sizeof(struct nve0_fifo),
e53e0d
+					 &pNv->ce_channel);
e53e0d
 		break;
e53e0d
 	default:
e53e0d
 		return FALSE;
e53e0d
 	}
e53e0d
 
e53e0d
-	ret = nouveau_object_new(&pNv->dev->object, 0,
e53e0d
-				 NOUVEAU_FIFO_CHANNEL_CLASS, data, size,
e53e0d
-				 &pNv->ce_channel);
e53e0d
 	if (ret) {
e53e0d
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
e53e0d
 			   "[COPY] error allocating channel: %d\n", ret);
e53e0d
-- 
e53e0d
2.8.4
e53e0d