diff options
Diffstat (limited to 'arch/parisc/hpux')
-rw-r--r-- | arch/parisc/hpux/fs.c | 26 | ||||
-rw-r--r-- | arch/parisc/hpux/sys_hpux.c | 32 |
2 files changed, 30 insertions, 28 deletions
diff --git a/arch/parisc/hpux/fs.c b/arch/parisc/hpux/fs.c index 4204cd1f3cf9..c7a81a2c014c 100644 --- a/arch/parisc/hpux/fs.c +++ b/arch/parisc/hpux/fs.c | |||
@@ -35,13 +35,13 @@ int hpux_execve(struct pt_regs *regs) | |||
35 | int error; | 35 | int error; |
36 | char *filename; | 36 | char *filename; |
37 | 37 | ||
38 | filename = getname((char *) regs->gr[26]); | 38 | filename = getname((char __user *) regs->gr[26]); |
39 | error = PTR_ERR(filename); | 39 | error = PTR_ERR(filename); |
40 | if (IS_ERR(filename)) | 40 | if (IS_ERR(filename)) |
41 | goto out; | 41 | goto out; |
42 | 42 | ||
43 | error = do_execve(filename, (char **) regs->gr[25], | 43 | error = do_execve(filename, (char __user * __user *) regs->gr[25], |
44 | (char **)regs->gr[24], regs); | 44 | (char __user * __user *) regs->gr[24], regs); |
45 | 45 | ||
46 | if (error == 0) { | 46 | if (error == 0) { |
47 | task_lock(current); | 47 | task_lock(current); |
@@ -63,19 +63,19 @@ struct hpux_dirent { | |||
63 | }; | 63 | }; |
64 | 64 | ||
65 | struct getdents_callback { | 65 | struct getdents_callback { |
66 | struct hpux_dirent *current_dir; | 66 | struct hpux_dirent __user *current_dir; |
67 | struct hpux_dirent *previous; | 67 | struct hpux_dirent __user *previous; |
68 | int count; | 68 | int count; |
69 | int error; | 69 | int error; |
70 | }; | 70 | }; |
71 | 71 | ||
72 | #define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de))) | 72 | #define NAME_OFFSET(de) ((int) ((de)->d_name - (char __user *) (de))) |
73 | #define ROUND_UP(x) (((x)+sizeof(long)-1) & ~(sizeof(long)-1)) | 73 | #define ROUND_UP(x) (((x)+sizeof(long)-1) & ~(sizeof(long)-1)) |
74 | 74 | ||
75 | static int filldir(void * __buf, const char * name, int namlen, loff_t offset, | 75 | static int filldir(void * __buf, const char * name, int namlen, loff_t offset, |
76 | u64 ino, unsigned d_type) | 76 | u64 ino, unsigned d_type) |
77 | { | 77 | { |
78 | struct hpux_dirent * dirent; | 78 | struct hpux_dirent __user * dirent; |
79 | struct getdents_callback * buf = (struct getdents_callback *) __buf; | 79 | struct getdents_callback * buf = (struct getdents_callback *) __buf; |
80 | ino_t d_ino; | 80 | ino_t d_ino; |
81 | int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 1); | 81 | int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 1); |
@@ -105,10 +105,10 @@ static int filldir(void * __buf, const char * name, int namlen, loff_t offset, | |||
105 | #undef NAME_OFFSET | 105 | #undef NAME_OFFSET |
106 | #undef ROUND_UP | 106 | #undef ROUND_UP |
107 | 107 | ||
108 | int hpux_getdents(unsigned int fd, struct hpux_dirent *dirent, unsigned int count) | 108 | int hpux_getdents(unsigned int fd, struct hpux_dirent __user *dirent, unsigned int count) |
109 | { | 109 | { |
110 | struct file * file; | 110 | struct file * file; |
111 | struct hpux_dirent * lastdirent; | 111 | struct hpux_dirent __user * lastdirent; |
112 | struct getdents_callback buf; | 112 | struct getdents_callback buf; |
113 | int error = -EBADF; | 113 | int error = -EBADF; |
114 | 114 | ||
@@ -143,7 +143,7 @@ int hpux_mount(const char *fs, const char *path, int mflag, | |||
143 | return -ENOSYS; | 143 | return -ENOSYS; |
144 | } | 144 | } |
145 | 145 | ||
146 | static int cp_hpux_stat(struct kstat *stat, struct hpux_stat64 *statbuf) | 146 | static int cp_hpux_stat(struct kstat *stat, struct hpux_stat64 __user *statbuf) |
147 | { | 147 | { |
148 | struct hpux_stat64 tmp; | 148 | struct hpux_stat64 tmp; |
149 | 149 | ||
@@ -169,7 +169,7 @@ static int cp_hpux_stat(struct kstat *stat, struct hpux_stat64 *statbuf) | |||
169 | return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; | 169 | return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; |
170 | } | 170 | } |
171 | 171 | ||
172 | long hpux_stat64(char *filename, struct hpux_stat64 *statbuf) | 172 | long hpux_stat64(char __user *filename, struct hpux_stat64 __user *statbuf) |
173 | { | 173 | { |
174 | struct kstat stat; | 174 | struct kstat stat; |
175 | int error = vfs_stat(filename, &stat); | 175 | int error = vfs_stat(filename, &stat); |
@@ -180,7 +180,7 @@ long hpux_stat64(char *filename, struct hpux_stat64 *statbuf) | |||
180 | return error; | 180 | return error; |
181 | } | 181 | } |
182 | 182 | ||
183 | long hpux_fstat64(unsigned int fd, struct hpux_stat64 *statbuf) | 183 | long hpux_fstat64(unsigned int fd, struct hpux_stat64 __user *statbuf) |
184 | { | 184 | { |
185 | struct kstat stat; | 185 | struct kstat stat; |
186 | int error = vfs_fstat(fd, &stat); | 186 | int error = vfs_fstat(fd, &stat); |
@@ -191,7 +191,7 @@ long hpux_fstat64(unsigned int fd, struct hpux_stat64 *statbuf) | |||
191 | return error; | 191 | return error; |
192 | } | 192 | } |
193 | 193 | ||
194 | long hpux_lstat64(char *filename, struct hpux_stat64 *statbuf) | 194 | long hpux_lstat64(char __user *filename, struct hpux_stat64 __user *statbuf) |
195 | { | 195 | { |
196 | struct kstat stat; | 196 | struct kstat stat; |
197 | int error = vfs_lstat(filename, &stat); | 197 | int error = vfs_lstat(filename, &stat); |
diff --git a/arch/parisc/hpux/sys_hpux.c b/arch/parisc/hpux/sys_hpux.c index 2e2dc4f2c853..372edb0348d3 100644 --- a/arch/parisc/hpux/sys_hpux.c +++ b/arch/parisc/hpux/sys_hpux.c | |||
@@ -61,7 +61,7 @@ int hpux_ptrace(void) | |||
61 | return -ENOSYS; | 61 | return -ENOSYS; |
62 | } | 62 | } |
63 | 63 | ||
64 | int hpux_wait(int *stat_loc) | 64 | int hpux_wait(int __user *stat_loc) |
65 | { | 65 | { |
66 | return sys_waitpid(-1, stat_loc, 0); | 66 | return sys_waitpid(-1, stat_loc, 0); |
67 | } | 67 | } |
@@ -255,7 +255,7 @@ asmlinkage long hpux_fstatfs(unsigned int fd, struct hpux_statfs __user * buf) | |||
255 | /* TODO: Are these put_user calls OK? Should they pass an int? | 255 | /* TODO: Are these put_user calls OK? Should they pass an int? |
256 | * (I copied it from sys_i386.c like this.) | 256 | * (I copied it from sys_i386.c like this.) |
257 | */ | 257 | */ |
258 | static int hpux_uname(struct hpux_utsname *name) | 258 | static int hpux_uname(struct hpux_utsname __user *name) |
259 | { | 259 | { |
260 | int error; | 260 | int error; |
261 | 261 | ||
@@ -300,14 +300,14 @@ static int hpux_uname(struct hpux_utsname *name) | |||
300 | /* Note: HP-UX just uses the old suser() function to check perms | 300 | /* Note: HP-UX just uses the old suser() function to check perms |
301 | * in this system call. We'll use capable(CAP_SYS_ADMIN). | 301 | * in this system call. We'll use capable(CAP_SYS_ADMIN). |
302 | */ | 302 | */ |
303 | int hpux_utssys(char *ubuf, int n, int type) | 303 | int hpux_utssys(char __user *ubuf, int n, int type) |
304 | { | 304 | { |
305 | int len; | 305 | int len; |
306 | int error; | 306 | int error; |
307 | switch( type ) { | 307 | switch( type ) { |
308 | case 0: | 308 | case 0: |
309 | /* uname(): */ | 309 | /* uname(): */ |
310 | return( hpux_uname( (struct hpux_utsname *)ubuf ) ); | 310 | return hpux_uname((struct hpux_utsname __user *)ubuf); |
311 | break ; | 311 | break ; |
312 | case 1: | 312 | case 1: |
313 | /* Obsolete (used to be umask().) */ | 313 | /* Obsolete (used to be umask().) */ |
@@ -315,8 +315,9 @@ int hpux_utssys(char *ubuf, int n, int type) | |||
315 | break ; | 315 | break ; |
316 | case 2: | 316 | case 2: |
317 | /* ustat(): */ | 317 | /* ustat(): */ |
318 | return( hpux_ustat(new_decode_dev(n), (struct hpux_ustat *)ubuf) ); | 318 | return hpux_ustat(new_decode_dev(n), |
319 | break ; | 319 | (struct hpux_ustat __user *)ubuf); |
320 | break; | ||
320 | case 3: | 321 | case 3: |
321 | /* setuname(): | 322 | /* setuname(): |
322 | * | 323 | * |
@@ -332,7 +333,7 @@ int hpux_utssys(char *ubuf, int n, int type) | |||
332 | return -EINVAL ; | 333 | return -EINVAL ; |
333 | /* Unlike Linux, HP-UX truncates it if n is too big: */ | 334 | /* Unlike Linux, HP-UX truncates it if n is too big: */ |
334 | len = (n <= __NEW_UTS_LEN) ? n : __NEW_UTS_LEN ; | 335 | len = (n <= __NEW_UTS_LEN) ? n : __NEW_UTS_LEN ; |
335 | return( sys_sethostname(ubuf, len) ); | 336 | return sys_sethostname(ubuf, len); |
336 | break ; | 337 | break ; |
337 | case 4: | 338 | case 4: |
338 | /* sethostname(): | 339 | /* sethostname(): |
@@ -346,7 +347,7 @@ int hpux_utssys(char *ubuf, int n, int type) | |||
346 | return -EINVAL ; | 347 | return -EINVAL ; |
347 | /* Unlike Linux, HP-UX truncates it if n is too big: */ | 348 | /* Unlike Linux, HP-UX truncates it if n is too big: */ |
348 | len = (n <= __NEW_UTS_LEN) ? n : __NEW_UTS_LEN ; | 349 | len = (n <= __NEW_UTS_LEN) ? n : __NEW_UTS_LEN ; |
349 | return( sys_sethostname(ubuf, len) ); | 350 | return sys_sethostname(ubuf, len); |
350 | break ; | 351 | break ; |
351 | case 5: | 352 | case 5: |
352 | /* gethostname(): | 353 | /* gethostname(): |
@@ -356,7 +357,7 @@ int hpux_utssys(char *ubuf, int n, int type) | |||
356 | /* Unlike Linux, HP-UX returns an error if n==0: */ | 357 | /* Unlike Linux, HP-UX returns an error if n==0: */ |
357 | if ( n <= 0 ) | 358 | if ( n <= 0 ) |
358 | return -EINVAL ; | 359 | return -EINVAL ; |
359 | return( sys_gethostname(ubuf, n) ); | 360 | return sys_gethostname(ubuf, n); |
360 | break ; | 361 | break ; |
361 | case 6: | 362 | case 6: |
362 | /* Supposedly called from setuname() in libc. | 363 | /* Supposedly called from setuname() in libc. |
@@ -420,7 +421,7 @@ int hpux_utssys(char *ubuf, int n, int type) | |||
420 | } | 421 | } |
421 | } | 422 | } |
422 | 423 | ||
423 | int hpux_getdomainname(char *name, int len) | 424 | int hpux_getdomainname(char __user *name, int len) |
424 | { | 425 | { |
425 | int nlen; | 426 | int nlen; |
426 | int err = -EFAULT; | 427 | int err = -EFAULT; |
@@ -471,17 +472,18 @@ int hpux_sysfs(int opcode, unsigned long arg1, unsigned long arg2) | |||
471 | printk(KERN_DEBUG "hpux_sysfs called with arg1='%lx'\n", arg1); | 472 | printk(KERN_DEBUG "hpux_sysfs called with arg1='%lx'\n", arg1); |
472 | 473 | ||
473 | if ( opcode == 1 ) { /* GETFSIND */ | 474 | if ( opcode == 1 ) { /* GETFSIND */ |
474 | len = strlen_user((char *)arg1); | 475 | char __user *user_fsname = (char __user *)arg1; |
476 | len = strlen_user(user_fsname); | ||
475 | printk(KERN_DEBUG "len of arg1 = %d\n", len); | 477 | printk(KERN_DEBUG "len of arg1 = %d\n", len); |
476 | if (len == 0) | 478 | if (len == 0) |
477 | return 0; | 479 | return 0; |
478 | fsname = (char *) kmalloc(len, GFP_KERNEL); | 480 | fsname = kmalloc(len, GFP_KERNEL); |
479 | if ( !fsname ) { | 481 | if (!fsname) { |
480 | printk(KERN_DEBUG "failed to kmalloc fsname\n"); | 482 | printk(KERN_DEBUG "failed to kmalloc fsname\n"); |
481 | return 0; | 483 | return 0; |
482 | } | 484 | } |
483 | 485 | ||
484 | if ( copy_from_user(fsname, (char *)arg1, len) ) { | 486 | if (copy_from_user(fsname, user_fsname, len)) { |
485 | printk(KERN_DEBUG "failed to copy_from_user fsname\n"); | 487 | printk(KERN_DEBUG "failed to copy_from_user fsname\n"); |
486 | kfree(fsname); | 488 | kfree(fsname); |
487 | return 0; | 489 | return 0; |
@@ -495,7 +497,7 @@ int hpux_sysfs(int opcode, unsigned long arg1, unsigned long arg2) | |||
495 | fstype = 0; | 497 | fstype = 0; |
496 | } else { | 498 | } else { |
497 | fstype = 0; | 499 | fstype = 0; |
498 | }; | 500 | } |
499 | 501 | ||
500 | kfree(fsname); | 502 | kfree(fsname); |
501 | 503 | ||