aboutsummaryrefslogtreecommitdiffstats
path: root/arch/parisc
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@pobox.com>2006-02-09 14:17:05 -0500
committerJeff Garzik <jgarzik@pobox.com>2006-02-09 14:17:05 -0500
commit70c07e02625ec46d0ffbfce1acef42d660803528 (patch)
treef500f1a4f93e72747fb08b0eefabb167dcdc5db9 /arch/parisc
parent5d1769ac3d0ea5ff3a286b097c21faaf6a9e6859 (diff)
parent2746b8623abce815aaae7afc946b1b39f8436f5a (diff)
downloadkernel_samsung_tuna-70c07e02625ec46d0ffbfce1acef42d660803528.zip
kernel_samsung_tuna-70c07e02625ec46d0ffbfce1acef42d660803528.tar.gz
kernel_samsung_tuna-70c07e02625ec46d0ffbfce1acef42d660803528.tar.bz2
Merge branch 'viro'
Diffstat (limited to 'arch/parisc')
-rw-r--r--arch/parisc/hpux/sys_hpux.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/parisc/hpux/sys_hpux.c b/arch/parisc/hpux/sys_hpux.c
index 29b4d61..05273cc 100644
--- a/arch/parisc/hpux/sys_hpux.c
+++ b/arch/parisc/hpux/sys_hpux.c
@@ -468,19 +468,23 @@ int hpux_sysfs(int opcode, unsigned long arg1, unsigned long arg2)
if ( opcode == 1 ) { /* GETFSIND */
len = strlen_user((char *)arg1);
printk(KERN_DEBUG "len of arg1 = %d\n", len);
-
- fsname = (char *) kmalloc(len+1, GFP_KERNEL);
+ if (len == 0)
+ return 0;
+ fsname = (char *) kmalloc(len, GFP_KERNEL);
if ( !fsname ) {
printk(KERN_DEBUG "failed to kmalloc fsname\n");
return 0;
}
- if ( copy_from_user(fsname, (char *)arg1, len+1) ) {
+ if ( copy_from_user(fsname, (char *)arg1, len) ) {
printk(KERN_DEBUG "failed to copy_from_user fsname\n");
kfree(fsname);
return 0;
}
+ /* String could be altered by userspace after strlen_user() */
+ fsname[len] = '\0';
+
printk(KERN_DEBUG "that is '%s' as (char *)\n", fsname);
if ( !strcmp(fsname, "hfs") ) {
fstype = 0;