| From 162eb69750b9f5ff339aa3b0210bda7e2473da69 Mon Sep 17 00:00:00 2001 |
| From: Ben Skeggs <bskeggs@redhat.com> |
| Date: Tue, 28 Jan 2020 14:39:26 +1000 |
| Subject: [PATCH] drm/nouveau/disp/nv50-: prevent oops when no channel method |
| map provided |
| |
| commit 0e6176c6d286316e9431b4f695940cfac4ffe6c2 upstream. |
| |
| The implementations for most channel types contains a map of methods to |
| priv registers in order to provide debugging info when a disp exception |
| has been raised. |
| |
| This info is missing from the implementation of PIO channels as they're |
| rather simplistic already, however, if an exception is raised by one of |
| them, we'd end up triggering a NULL-pointer deref. Not ideal... |
| |
| Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=206299 |
| Signed-off-by: Ben Skeggs <bskeggs@redhat.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c |
| index bcf32d92ee5a..50e3539f33d2 100644 |
| --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c |
| +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c |
| @@ -74,6 +74,8 @@ nv50_disp_chan_mthd(struct nv50_disp_chan *chan, int debug) |
| |
| if (debug > subdev->debug) |
| return; |
| + if (!mthd) |
| + return; |
| |
| for (i = 0; (list = mthd->data[i].mthd) != NULL; i++) { |
| u32 base = chan->head * mthd->addr; |
| -- |
| 2.7.4 |
| |