aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc/kernel')
-rw-r--r--arch/sparc/kernel/ebus.c7
-rw-r--r--arch/sparc/kernel/ioport.c2
-rw-r--r--arch/sparc/kernel/sys_sparc.c10
3 files changed, 11 insertions, 8 deletions
diff --git a/arch/sparc/kernel/ebus.c b/arch/sparc/kernel/ebus.c
index 81c0cbd96ff0..75ac24d229b1 100644
--- a/arch/sparc/kernel/ebus.c
+++ b/arch/sparc/kernel/ebus.c
@@ -277,7 +277,7 @@ void __init ebus_init(void)
277 struct pci_dev *pdev; 277 struct pci_dev *pdev;
278 struct pcidev_cookie *cookie; 278 struct pcidev_cookie *cookie;
279 struct device_node *dp; 279 struct device_node *dp;
280 unsigned long addr, *base; 280 struct resource *p;
281 unsigned short pci_command; 281 unsigned short pci_command;
282 int len, reg, nreg; 282 int len, reg, nreg;
283 int num_ebus = 0; 283 int num_ebus = 0;
@@ -321,13 +321,12 @@ void __init ebus_init(void)
321 } 321 }
322 nreg = len / sizeof(struct linux_prom_pci_registers); 322 nreg = len / sizeof(struct linux_prom_pci_registers);
323 323
324 base = &ebus->self->resource[0].start; 324 p = &ebus->self->resource[0];
325 for (reg = 0; reg < nreg; reg++) { 325 for (reg = 0; reg < nreg; reg++) {
326 if (!(regs[reg].which_io & 0x03000000)) 326 if (!(regs[reg].which_io & 0x03000000))
327 continue; 327 continue;
328 328
329 addr = regs[reg].phys_lo; 329 (p++)->start = regs[reg].phys_lo;
330 *base++ = addr;
331 } 330 }
332 331
333 ebus->ofdev.node = dp; 332 ebus->ofdev.node = dp;
diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c
index 8654b446ac9e..d33f8a07ccac 100644
--- a/arch/sparc/kernel/ioport.c
+++ b/arch/sparc/kernel/ioport.c
@@ -508,6 +508,7 @@ void __init sbus_arch_bus_ranges_init(struct device_node *pn, struct sbus_bus *s
508 508
509void __init sbus_setup_iommu(struct sbus_bus *sbus, struct device_node *dp) 509void __init sbus_setup_iommu(struct sbus_bus *sbus, struct device_node *dp)
510{ 510{
511#ifndef CONFIG_SUN4
511 struct device_node *parent = dp->parent; 512 struct device_node *parent = dp->parent;
512 513
513 if (sparc_cpu_model != sun4d && 514 if (sparc_cpu_model != sun4d &&
@@ -524,6 +525,7 @@ void __init sbus_setup_iommu(struct sbus_bus *sbus, struct device_node *dp)
524 525
525 iounit_init(dp->node, parent->node, sbus); 526 iounit_init(dp->node, parent->node, sbus);
526 } 527 }
528#endif
527} 529}
528 530
529void __init sbus_setup_arch_props(struct sbus_bus *sbus, struct device_node *dp) 531void __init sbus_setup_arch_props(struct sbus_bus *sbus, struct device_node *dp)
diff --git a/arch/sparc/kernel/sys_sparc.c b/arch/sparc/kernel/sys_sparc.c
index 94ff58c9d4a9..896863fb208a 100644
--- a/arch/sparc/kernel/sys_sparc.c
+++ b/arch/sparc/kernel/sys_sparc.c
@@ -470,19 +470,21 @@ asmlinkage int sys_getdomainname(char __user *name, int len)
470{ 470{
471 int nlen, err; 471 int nlen, err;
472 472
473 if (len < 0 || len > __NEW_UTS_LEN) 473 if (len < 0)
474 return -EINVAL; 474 return -EINVAL;
475 475
476 down_read(&uts_sem); 476 down_read(&uts_sem);
477 477
478 nlen = strlen(system_utsname.domainname) + 1; 478 nlen = strlen(system_utsname.domainname) + 1;
479 if (nlen < len) 479 err = -EINVAL;
480 len = nlen; 480 if (nlen > len)
481 goto out;
481 482
482 err = -EFAULT; 483 err = -EFAULT;
483 if (!copy_to_user(name, system_utsname.domainname, len)) 484 if (!copy_to_user(name, system_utsname.domainname, nlen))
484 err = 0; 485 err = 0;
485 486
487out:
486 up_read(&uts_sem); 488 up_read(&uts_sem);
487 return err; 489 return err;
488} 490}