diff mbox series

drm/nouveau: Fix potential memory access error in nouveau_debugfs_pstate_get()

Message ID 20180731010347.21921-1-lyude@redhat.com (mailing list archive)
State New, archived
Headers show
Series drm/nouveau: Fix potential memory access error in nouveau_debugfs_pstate_get() | expand

Commit Message

Lyude Paul July 31, 2018, 1:03 a.m. UTC
nouveau_debugfs(drm) will never be NULL, because we're taking the value
of the potentially null device pointer and adding to it so it isn't 0x0.
So, check if drm is NULL instead.

Signed-off-by: Lyude Paul <lyude@redhat.com>
Cc: Karol Herbst <karolherbst@gmail.com>
---
 drivers/gpu/drm/nouveau/nouveau_debugfs.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

kernel test robot Aug. 1, 2018, 9:13 a.m. UTC | #1
Hi Lyude,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v4.18-rc7 next-20180731]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Lyude-Paul/drm-nouveau-Fix-potential-memory-access-error-in-nouveau_debugfs_pstate_get/20180801-155246
config: i386-randconfig-a1-201830 (attached as .config)
compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   drivers/gpu//drm/nouveau/nouveau_debugfs.c: In function 'nouveau_debugfs_pstate_get':
>> drivers/gpu//drm/nouveau/nouveau_debugfs.c:54:22: warning: 'debugfs' is used uninitialized in this function [-Wuninitialized]
     struct nvif_object *ctrl = &debugfs->ctrl;
                         ^

vim +/debugfs +54 drivers/gpu//drm/nouveau/nouveau_debugfs.c

33b903e8 Marcin Slusarz 2013-02-08   48  
6e9fc177 Karol Herbst   2015-07-30   49  static int
6e9fc177 Karol Herbst   2015-07-30   50  nouveau_debugfs_pstate_get(struct seq_file *m, void *data)
6e9fc177 Karol Herbst   2015-07-30   51  {
1a54082a Noralf Trønnes 2017-01-26   52  	struct drm_device *drm = m->private;
11a2501e Lyude Paul     2018-07-30   53  	struct nouveau_debugfs *debugfs;
6e9fc177 Karol Herbst   2015-07-30  @54  	struct nvif_object *ctrl = &debugfs->ctrl;
6e9fc177 Karol Herbst   2015-07-30   55  	struct nvif_control_pstate_info_v0 info = {};
6e9fc177 Karol Herbst   2015-07-30   56  	int ret, i;
6e9fc177 Karol Herbst   2015-07-30   57  
11a2501e Lyude Paul     2018-07-30   58  	if (!drm)
6e9fc177 Karol Herbst   2015-07-30   59  		return -ENODEV;
11a2501e Lyude Paul     2018-07-30   60  	debugfs = nouveau_debugfs(drm);
6e9fc177 Karol Herbst   2015-07-30   61  
6e9fc177 Karol Herbst   2015-07-30   62  	ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_INFO, &info, sizeof(info));
6e9fc177 Karol Herbst   2015-07-30   63  	if (ret)
6e9fc177 Karol Herbst   2015-07-30   64  		return ret;
6e9fc177 Karol Herbst   2015-07-30   65  
6e9fc177 Karol Herbst   2015-07-30   66  	for (i = 0; i < info.count + 1; i++) {
6e9fc177 Karol Herbst   2015-07-30   67  		const s32 state = i < info.count ? i :
6e9fc177 Karol Herbst   2015-07-30   68  			NVIF_CONTROL_PSTATE_ATTR_V0_STATE_CURRENT;
6e9fc177 Karol Herbst   2015-07-30   69  		struct nvif_control_pstate_attr_v0 attr = {
6e9fc177 Karol Herbst   2015-07-30   70  			.state = state,
6e9fc177 Karol Herbst   2015-07-30   71  			.index = 0,
6e9fc177 Karol Herbst   2015-07-30   72  		};
6e9fc177 Karol Herbst   2015-07-30   73  
6e9fc177 Karol Herbst   2015-07-30   74  		ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_ATTR,
6e9fc177 Karol Herbst   2015-07-30   75  				&attr, sizeof(attr));
6e9fc177 Karol Herbst   2015-07-30   76  		if (ret)
6e9fc177 Karol Herbst   2015-07-30   77  			return ret;
6e9fc177 Karol Herbst   2015-07-30   78  
6e9fc177 Karol Herbst   2015-07-30   79  		if (i < info.count)
6e9fc177 Karol Herbst   2015-07-30   80  			seq_printf(m, "%02x:", attr.state);
6e9fc177 Karol Herbst   2015-07-30   81  		else
6e9fc177 Karol Herbst   2015-07-30   82  			seq_printf(m, "%s:", info.pwrsrc == 0 ? "DC" :
6e9fc177 Karol Herbst   2015-07-30   83  					     info.pwrsrc == 1 ? "AC" : "--");
6e9fc177 Karol Herbst   2015-07-30   84  
6e9fc177 Karol Herbst   2015-07-30   85  		attr.index = 0;
6e9fc177 Karol Herbst   2015-07-30   86  		do {
6e9fc177 Karol Herbst   2015-07-30   87  			attr.state = state;
6e9fc177 Karol Herbst   2015-07-30   88  			ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_ATTR,
6e9fc177 Karol Herbst   2015-07-30   89  					&attr, sizeof(attr));
6e9fc177 Karol Herbst   2015-07-30   90  			if (ret)
6e9fc177 Karol Herbst   2015-07-30   91  				return ret;
6e9fc177 Karol Herbst   2015-07-30   92  
6e9fc177 Karol Herbst   2015-07-30   93  			seq_printf(m, " %s %d", attr.name, attr.min);
6e9fc177 Karol Herbst   2015-07-30   94  			if (attr.min != attr.max)
6e9fc177 Karol Herbst   2015-07-30   95  				seq_printf(m, "-%d", attr.max);
6e9fc177 Karol Herbst   2015-07-30   96  			seq_printf(m, " %s", attr.unit);
6e9fc177 Karol Herbst   2015-07-30   97  		} while (attr.index);
6e9fc177 Karol Herbst   2015-07-30   98  
6e9fc177 Karol Herbst   2015-07-30   99  		if (state >= 0) {
6e9fc177 Karol Herbst   2015-07-30  100  			if (info.ustate_ac == state)
6e9fc177 Karol Herbst   2015-07-30  101  				seq_printf(m, " AC");
6e9fc177 Karol Herbst   2015-07-30  102  			if (info.ustate_dc == state)
6e9fc177 Karol Herbst   2015-07-30  103  				seq_printf(m, " DC");
6e9fc177 Karol Herbst   2015-07-30  104  			if (info.pstate == state)
6e9fc177 Karol Herbst   2015-07-30  105  				seq_printf(m, " *");
6e9fc177 Karol Herbst   2015-07-30  106  		} else {
6e9fc177 Karol Herbst   2015-07-30  107  			if (info.ustate_ac < -1)
6e9fc177 Karol Herbst   2015-07-30  108  				seq_printf(m, " AC");
6e9fc177 Karol Herbst   2015-07-30  109  			if (info.ustate_dc < -1)
6e9fc177 Karol Herbst   2015-07-30  110  				seq_printf(m, " DC");
6e9fc177 Karol Herbst   2015-07-30  111  		}
6e9fc177 Karol Herbst   2015-07-30  112  
6e9fc177 Karol Herbst   2015-07-30  113  		seq_printf(m, "\n");
6e9fc177 Karol Herbst   2015-07-30  114  	}
6e9fc177 Karol Herbst   2015-07-30  115  
6e9fc177 Karol Herbst   2015-07-30  116  	return 0;
6e9fc177 Karol Herbst   2015-07-30  117  }
6e9fc177 Karol Herbst   2015-07-30  118  

:::::: The code at line 54 was first introduced by commit
:::::: 6e9fc177399f08446293fec7607913fdbc95e191 drm/nouveau/debugfs: add copy of sysfs pstate interface ported to debugfs

:::::: TO: Karol Herbst <nouveau@karolherbst.de>
:::::: CC: Ben Skeggs <bskeggs@redhat.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox series

Patch

diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
index 963a4dba8213..d83313c02913 100644
--- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c
+++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
@@ -50,13 +50,14 @@  static int
 nouveau_debugfs_pstate_get(struct seq_file *m, void *data)
 {
 	struct drm_device *drm = m->private;
-	struct nouveau_debugfs *debugfs = nouveau_debugfs(drm);
+	struct nouveau_debugfs *debugfs;
 	struct nvif_object *ctrl = &debugfs->ctrl;
 	struct nvif_control_pstate_info_v0 info = {};
 	int ret, i;
 
-	if (!debugfs)
+	if (!drm)
 		return -ENODEV;
+	debugfs = nouveau_debugfs(drm);
 
 	ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_INFO, &info, sizeof(info));
 	if (ret)