aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorAndy Walker <andy@puszczka.com>2006-09-18 10:11:36 -0400
committerDavid S. Miller <davem@davemloft.net>2006-09-18 10:11:36 -0400
commitb9c54f91a48146778fe91423d4d467a0ee8c719b (patch)
treef123be6ee2fb44b5795a3aa6f0ccbc8e9ea19d2b /arch
parentb9b64e6e89fc5a6ef220747115c5b7764614ca3f (diff)
[SPARC]: Fix regression in sys_getdomainname()
This patch corrects the buffer length checking in the sys_getdomainname() implementation for sparc/sparc64. Signed-off-by: Andy Walker <andy@puszczka.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch')
-rw-r--r--arch/sparc/kernel/sys_sparc.c10
-rw-r--r--arch/sparc64/kernel/sys_sparc.c10
2 files changed, 12 insertions, 8 deletions
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}
diff --git a/arch/sparc64/kernel/sys_sparc.c b/arch/sparc64/kernel/sys_sparc.c
index bf5f14ee73de..c608c947e6c3 100644
--- a/arch/sparc64/kernel/sys_sparc.c
+++ b/arch/sparc64/kernel/sys_sparc.c
@@ -707,19 +707,21 @@ asmlinkage long sys_getdomainname(char __user *name, int len)
707{ 707{
708 int nlen, err; 708 int nlen, err;
709 709
710 if (len < 0 || len > __NEW_UTS_LEN) 710 if (len < 0)
711 return -EINVAL; 711 return -EINVAL;
712 712
713 down_read(&uts_sem); 713 down_read(&uts_sem);
714 714
715 nlen = strlen(system_utsname.domainname) + 1; 715 nlen = strlen(system_utsname.domainname) + 1;
716 if (nlen < len) 716 err = -EINVAL;
717 len = nlen; 717 if (nlen > len)
718 goto out;
718 719
719 err = -EFAULT; 720 err = -EFAULT;
720 if (!copy_to_user(name, system_utsname.domainname, len)) 721 if (!copy_to_user(name, system_utsname.domainname, nlen))
721 err = 0; 722 err = 0;
722 723
724out:
723 up_read(&uts_sem); 725 up_read(&uts_sem);
724 return err; 726 return err;
725} 727}