|
|
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 |
|