浏览代码

[SPARC]: Fix EBUS use of uninitialized variable.

If of_get_property() fails, it returns NULL and the 'len'
parameter is undefined.  So we need to explicitly set len
to zero in such cases.

Noticed by Al Viro.

Signed-off-by: David S. Miller <davem@davemloft.net>
David S. Miller 17 年之前
父节点
当前提交
9c908f97d0
共有 2 个文件被更改,包括 6 次插入1 次删除
  1. 2 0
      arch/sparc/kernel/ebus.c
  2. 4 1
      arch/sparc64/kernel/ebus.c

+ 2 - 0
arch/sparc/kernel/ebus.c

@@ -156,6 +156,8 @@ void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_device *d
 	dev->prom_node = dp;
 	dev->prom_node = dp;
 
 
 	regs = of_get_property(dp, "reg", &len);
 	regs = of_get_property(dp, "reg", &len);
+	if (!regs)
+		len = 0;
 	if (len % sizeof(struct linux_prom_registers)) {
 	if (len % sizeof(struct linux_prom_registers)) {
 		prom_printf("UGH: proplen for %s was %d, need multiple of %d\n",
 		prom_printf("UGH: proplen for %s was %d, need multiple of %d\n",
 			    dev->prom_node->name, len,
 			    dev->prom_node->name, len,

+ 4 - 1
arch/sparc64/kernel/ebus.c

@@ -375,7 +375,10 @@ static void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_de
 		dev->num_addrs = 0;
 		dev->num_addrs = 0;
 		dev->num_irqs = 0;
 		dev->num_irqs = 0;
 	} else {
 	} else {
-		(void) of_get_property(dp, "reg", &len);
+		const int *regs = of_get_property(dp, "reg", &len);
+
+		if (!regs)
+			len = 0;
 		dev->num_addrs = len / sizeof(struct linux_prom_registers);
 		dev->num_addrs = len / sizeof(struct linux_prom_registers);
 
 
 		for (i = 0; i < dev->num_addrs; i++)
 		for (i = 0; i < dev->num_addrs; i++)