Skip to content

Commit

Permalink
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
Browse files Browse the repository at this point in the history
* master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6:
  [SPARC]: Fix regression in sys_getdomainname()
  [OPENPROMIO]: Handle current_node being NULL correctly.
  • Loading branch information
Linus Torvalds committed Sep 18, 2006
2 parents 77e2782 + b9c54f9 commit 20bf94e
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 11 deletions.
10 changes: 6 additions & 4 deletions arch/sparc/kernel/sys_sparc.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,19 +470,21 @@ asmlinkage int sys_getdomainname(char __user *name, int len)
{
int nlen, err;

if (len < 0 || len > __NEW_UTS_LEN)
if (len < 0)
return -EINVAL;

down_read(&uts_sem);

nlen = strlen(system_utsname.domainname) + 1;
if (nlen < len)
len = nlen;
err = -EINVAL;
if (nlen > len)
goto out;

err = -EFAULT;
if (!copy_to_user(name, system_utsname.domainname, len))
if (!copy_to_user(name, system_utsname.domainname, nlen))
err = 0;

out:
up_read(&uts_sem);
return err;
}
10 changes: 6 additions & 4 deletions arch/sparc64/kernel/sys_sparc.c
Original file line number Diff line number Diff line change
Expand Up @@ -707,19 +707,21 @@ asmlinkage long sys_getdomainname(char __user *name, int len)
{
int nlen, err;

if (len < 0 || len > __NEW_UTS_LEN)
if (len < 0)
return -EINVAL;

down_read(&uts_sem);

nlen = strlen(system_utsname.domainname) + 1;
if (nlen < len)
len = nlen;
err = -EINVAL;
if (nlen > len)
goto out;

err = -EFAULT;
if (!copy_to_user(name, system_utsname.domainname, len))
if (!copy_to_user(name, system_utsname.domainname, nlen))
err = 0;

out:
up_read(&uts_sem);
return err;
}
Expand Down
13 changes: 10 additions & 3 deletions drivers/sbus/char/openprom.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,9 @@ static int opromgetprop(void __user *argp, struct device_node *dp, struct openpr
void *pval;
int len;

pval = of_get_property(dp, op->oprom_array, &len);
if (!pval || len <= 0 || len > bufsize)
if (!dp ||
!(pval = of_get_property(dp, op->oprom_array, &len)) ||
len <= 0 || len > bufsize)
return copyout(argp, op, sizeof(int));

memcpy(op->oprom_array, pval, len);
Expand All @@ -161,6 +162,8 @@ static int opromnxtprop(void __user *argp, struct device_node *dp, struct openpr
struct property *prop;
int len;

if (!dp)
return copyout(argp, op, sizeof(int));
if (op->oprom_array[0] == '\0') {
prop = dp->properties;
if (!prop)
Expand Down Expand Up @@ -266,9 +269,13 @@ static int oprompci2node(void __user *argp, struct device_node *dp, struct openp

static int oprompath2node(void __user *argp, struct device_node *dp, struct openpromio *op, int bufsize, DATA *data)
{
phandle ph = 0;

dp = of_find_node_by_path(op->oprom_array);
if (dp)
ph = dp->node;
data->current_node = dp;
*((int *)op->oprom_array) = dp->node;
*((int *)op->oprom_array) = ph;
op->oprom_size = sizeof(int);

return copyout(argp, op, bufsize + sizeof(int));
Expand Down

0 comments on commit 20bf94e

Please sign in to comment.