Commit f5ef9d11 authored by David S. Miller's avatar David S. Miller

[SPARC]: Fix bus_id[] string overflow.

dp->path_component_name can be larger than ->bus_id[]
so use a different naming scheme for this stuff.

Noticed by Jurij Smakov.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e8039150
...@@ -237,12 +237,12 @@ void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_device *d ...@@ -237,12 +237,12 @@ void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_device *d
dev->ofdev.node = dp; dev->ofdev.node = dp;
dev->ofdev.dev.parent = &dev->bus->ofdev.dev; dev->ofdev.dev.parent = &dev->bus->ofdev.dev;
dev->ofdev.dev.bus = &ebus_bus_type; dev->ofdev.dev.bus = &ebus_bus_type;
strcpy(dev->ofdev.dev.bus_id, dp->path_component_name); sprintf(dev->ofdev.dev.bus_id, "ebus[%08x]", dp->node);
/* Register with core */ /* Register with core */
if (of_device_register(&dev->ofdev) != 0) if (of_device_register(&dev->ofdev) != 0)
printk(KERN_DEBUG "ebus: device registration error for %s!\n", printk(KERN_DEBUG "ebus: device registration error for %s!\n",
dev->ofdev.dev.bus_id); dp->path_component_name);
if ((dp = dp->child) != NULL) { if ((dp = dp->child) != NULL) {
dev->children = (struct linux_ebus_child *) dev->children = (struct linux_ebus_child *)
...@@ -332,12 +332,12 @@ void __init ebus_init(void) ...@@ -332,12 +332,12 @@ void __init ebus_init(void)
ebus->ofdev.node = dp; ebus->ofdev.node = dp;
ebus->ofdev.dev.parent = &pdev->dev; ebus->ofdev.dev.parent = &pdev->dev;
ebus->ofdev.dev.bus = &ebus_bus_type; ebus->ofdev.dev.bus = &ebus_bus_type;
strcpy(ebus->ofdev.dev.bus_id, dp->path_component_name); sprintf(ebus->ofdev.dev.bus_id, "ebus%d", num_ebus);
/* Register with core */ /* Register with core */
if (of_device_register(&ebus->ofdev) != 0) if (of_device_register(&ebus->ofdev) != 0)
printk(KERN_DEBUG "ebus: device registration error for %s!\n", printk(KERN_DEBUG "ebus: device registration error for %s!\n",
ebus->ofdev.dev.bus_id); dp->path_component_name);
nd = dp->child; nd = dp->child;
......
...@@ -651,7 +651,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp, ...@@ -651,7 +651,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
if (!parent) if (!parent)
strcpy(op->dev.bus_id, "root"); strcpy(op->dev.bus_id, "root");
else else
strcpy(op->dev.bus_id, dp->path_component_name); sprintf(op->dev.bus_id, "%08x", dp->node);
if (of_device_register(op)) { if (of_device_register(op)) {
printk("%s: Could not register of device.\n", printk("%s: Could not register of device.\n",
......
...@@ -389,12 +389,12 @@ static void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_de ...@@ -389,12 +389,12 @@ static void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_de
dev->ofdev.node = dp; dev->ofdev.node = dp;
dev->ofdev.dev.parent = &dev->bus->ofdev.dev; dev->ofdev.dev.parent = &dev->bus->ofdev.dev;
dev->ofdev.dev.bus = &ebus_bus_type; dev->ofdev.dev.bus = &ebus_bus_type;
strcpy(dev->ofdev.dev.bus_id, dp->path_component_name); sprintf(dev->ofdev.dev.bus_id, "ebus[%08x]", dp->node);
/* Register with core */ /* Register with core */
if (of_device_register(&dev->ofdev) != 0) if (of_device_register(&dev->ofdev) != 0)
printk(KERN_DEBUG "ebus: device registration error for %s!\n", printk(KERN_DEBUG "ebus: device registration error for %s!\n",
dev->ofdev.dev.bus_id); dp->path_component_name);
dp = dp->child; dp = dp->child;
if (dp) { if (dp) {
...@@ -494,12 +494,12 @@ void __init ebus_init(void) ...@@ -494,12 +494,12 @@ void __init ebus_init(void)
ebus->ofdev.node = dp; ebus->ofdev.node = dp;
ebus->ofdev.dev.parent = &pdev->dev; ebus->ofdev.dev.parent = &pdev->dev;
ebus->ofdev.dev.bus = &ebus_bus_type; ebus->ofdev.dev.bus = &ebus_bus_type;
strcpy(ebus->ofdev.dev.bus_id, dp->path_component_name); sprintf(ebus->ofdev.dev.bus_id, "ebus%d", num_ebus);
/* Register with core */ /* Register with core */
if (of_device_register(&ebus->ofdev) != 0) if (of_device_register(&ebus->ofdev) != 0)
printk(KERN_DEBUG "ebus: device registration error for %s!\n", printk(KERN_DEBUG "ebus: device registration error for %s!\n",
ebus->ofdev.dev.bus_id); dp->path_component_name);
child = dp->child; child = dp->child;
......
...@@ -115,12 +115,12 @@ static void __init isa_fill_devices(struct sparc_isa_bridge *isa_br) ...@@ -115,12 +115,12 @@ static void __init isa_fill_devices(struct sparc_isa_bridge *isa_br)
isa_dev->ofdev.node = dp; isa_dev->ofdev.node = dp;
isa_dev->ofdev.dev.parent = &isa_br->ofdev.dev; isa_dev->ofdev.dev.parent = &isa_br->ofdev.dev;
isa_dev->ofdev.dev.bus = &isa_bus_type; isa_dev->ofdev.dev.bus = &isa_bus_type;
strcpy(isa_dev->ofdev.dev.bus_id, dp->path_component_name); sprintf(isa_dev->ofdev.dev.bus_id, "isa[%08x]", dp->node);
/* Register with core */ /* Register with core */
if (of_device_register(&isa_dev->ofdev) != 0) { if (of_device_register(&isa_dev->ofdev) != 0) {
printk(KERN_DEBUG "isa: device registration error for %s!\n", printk(KERN_DEBUG "isa: device registration error for %s!\n",
isa_dev->ofdev.dev.bus_id); dp->path_component_name);
kfree(isa_dev); kfree(isa_dev);
goto next_sibling; goto next_sibling;
} }
...@@ -191,12 +191,12 @@ void __init isa_init(void) ...@@ -191,12 +191,12 @@ void __init isa_init(void)
isa_br->ofdev.node = dp; isa_br->ofdev.node = dp;
isa_br->ofdev.dev.parent = &pdev->dev; isa_br->ofdev.dev.parent = &pdev->dev;
isa_br->ofdev.dev.bus = &isa_bus_type; isa_br->ofdev.dev.bus = &isa_bus_type;
strcpy(isa_br->ofdev.dev.bus_id, dp->path_component_name); sprintf(isa_br->ofdev.dev.bus_id, "isa%d", index);
/* Register with core */ /* Register with core */
if (of_device_register(&isa_br->ofdev) != 0) { if (of_device_register(&isa_br->ofdev) != 0) {
printk(KERN_DEBUG "isa: device registration error for %s!\n", printk(KERN_DEBUG "isa: device registration error for %s!\n",
isa_br->ofdev.dev.bus_id); dp->path_component_name);
kfree(isa_br); kfree(isa_br);
return; return;
} }
......
...@@ -861,7 +861,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp, ...@@ -861,7 +861,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
if (!parent) if (!parent)
strcpy(op->dev.bus_id, "root"); strcpy(op->dev.bus_id, "root");
else else
sprintf(op->dev.bus_id, "%s@%08x", dp->name, dp->node); sprintf(op->dev.bus_id, "%08x", dp->node);
if (of_device_register(op)) { if (of_device_register(op)) {
printk("%s: Could not register of device.\n", printk("%s: Could not register of device.\n",
......
...@@ -61,11 +61,11 @@ static void __init fill_sbus_device(struct device_node *dp, struct sbus_dev *sde ...@@ -61,11 +61,11 @@ static void __init fill_sbus_device(struct device_node *dp, struct sbus_dev *sde
else else
sdev->ofdev.dev.parent = &sdev->bus->ofdev.dev; sdev->ofdev.dev.parent = &sdev->bus->ofdev.dev;
sdev->ofdev.dev.bus = &sbus_bus_type; sdev->ofdev.dev.bus = &sbus_bus_type;
strcpy(sdev->ofdev.dev.bus_id, dp->path_component_name); sprintf(sdev->ofdev.dev.bus_id, "sbus[%08x]", dp->node);
if (of_device_register(&sdev->ofdev) != 0) if (of_device_register(&sdev->ofdev) != 0)
printk(KERN_DEBUG "sbus: device registration error for %s!\n", printk(KERN_DEBUG "sbus: device registration error for %s!\n",
sdev->ofdev.dev.bus_id); dp->path_component_name);
} }
static void __init sbus_bus_ranges_init(struct device_node *dp, struct sbus_bus *sbus) static void __init sbus_bus_ranges_init(struct device_node *dp, struct sbus_bus *sbus)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment