in char/openprom.c [463:493]
static int opiocset(void __user *argp, DATA *data)
{
struct opiocdesc op;
struct device_node *dp;
char *str, *tmp;
int err;
if (copy_from_user(&op, argp, sizeof(op)))
return -EFAULT;
dp = get_node(op.op_nodeid, data);
if (!dp)
return -EINVAL;
str = copyin_string(op.op_name, op.op_namelen);
if (IS_ERR(str))
return PTR_ERR(str);
tmp = copyin_string(op.op_buf, op.op_buflen);
if (IS_ERR(tmp)) {
kfree(str);
return PTR_ERR(tmp);
}
err = of_set_property(dp, str, tmp, op.op_buflen);
kfree(str);
kfree(tmp);
return err;
}