Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[CVE-2009-0029] Convert all system calls to return a long

Convert all system calls to return a long. This should be a NOP since all
converted types should have the same size anyway.
With the exception of sys_exit_group which returned void. But that doesn't
matter since the system call doesn't return.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>

+64 -63
+9 -9
fs/read_write.c
··· 147 147 } 148 148 EXPORT_SYMBOL(vfs_llseek); 149 149 150 - asmlinkage off_t sys_lseek(unsigned int fd, off_t offset, unsigned int origin) 150 + asmlinkage long sys_lseek(unsigned int fd, off_t offset, unsigned int origin) 151 151 { 152 152 off_t retval; 153 153 struct file * file; ··· 369 369 file->f_pos = pos; 370 370 } 371 371 372 - asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) 372 + asmlinkage long sys_read(unsigned int fd, char __user * buf, size_t count) 373 373 { 374 374 struct file *file; 375 375 ssize_t ret = -EBADF; ··· 386 386 return ret; 387 387 } 388 388 389 - asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t count) 389 + asmlinkage long sys_write(unsigned int fd, const char __user * buf, size_t count) 390 390 { 391 391 struct file *file; 392 392 ssize_t ret = -EBADF; ··· 403 403 return ret; 404 404 } 405 405 406 - asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf, 406 + asmlinkage long sys_pread64(unsigned int fd, char __user *buf, 407 407 size_t count, loff_t pos) 408 408 { 409 409 struct file *file; ··· 424 424 return ret; 425 425 } 426 426 427 - asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf, 427 + asmlinkage long sys_pwrite64(unsigned int fd, const char __user *buf, 428 428 size_t count, loff_t pos) 429 429 { 430 430 struct file *file; ··· 672 672 673 673 EXPORT_SYMBOL(vfs_writev); 674 674 675 - asmlinkage ssize_t 675 + asmlinkage long 676 676 sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) 677 677 { 678 678 struct file *file; ··· 693 693 return ret; 694 694 } 695 695 696 - asmlinkage ssize_t 696 + asmlinkage long 697 697 sys_writev(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) 698 698 { 699 699 struct file *file; ··· 812 812 return retval; 813 813 } 814 814 815 - asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t __user *offset, size_t count) 815 + asmlinkage long sys_sendfile(int out_fd, int in_fd, off_t __user *offset, size_t count) 816 816 { 817 817 loff_t pos; 818 818 off_t off; ··· 831 831 return do_sendfile(out_fd, in_fd, NULL, count, 0); 832 832 } 833 833 834 - asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, loff_t __user *offset, size_t count) 834 + asmlinkage long sys_sendfile64(int out_fd, int in_fd, loff_t __user *offset, size_t count) 835 835 { 836 836 loff_t pos; 837 837 ssize_t ret;
+6 -6
fs/xattr.c
··· 349 349 return error; 350 350 } 351 351 352 - asmlinkage ssize_t 352 + asmlinkage long 353 353 sys_getxattr(const char __user *pathname, const char __user *name, 354 354 void __user *value, size_t size) 355 355 { ··· 364 364 return error; 365 365 } 366 366 367 - asmlinkage ssize_t 367 + asmlinkage long 368 368 sys_lgetxattr(const char __user *pathname, const char __user *name, void __user *value, 369 369 size_t size) 370 370 { ··· 379 379 return error; 380 380 } 381 381 382 - asmlinkage ssize_t 382 + asmlinkage long 383 383 sys_fgetxattr(int fd, const char __user *name, void __user *value, size_t size) 384 384 { 385 385 struct file *f; ··· 424 424 return error; 425 425 } 426 426 427 - asmlinkage ssize_t 427 + asmlinkage long 428 428 sys_listxattr(const char __user *pathname, char __user *list, size_t size) 429 429 { 430 430 struct path path; ··· 438 438 return error; 439 439 } 440 440 441 - asmlinkage ssize_t 441 + asmlinkage long 442 442 sys_llistxattr(const char __user *pathname, char __user *list, size_t size) 443 443 { 444 444 struct path path; ··· 452 452 return error; 453 453 } 454 454 455 - asmlinkage ssize_t 455 + asmlinkage long 456 456 sys_flistxattr(int fd, char __user *list, size_t size) 457 457 { 458 458 struct file *f;
+39 -40
include/linux/syscalls.h
··· 77 77 78 78 asmlinkage long sys_gettid(void); 79 79 asmlinkage long sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp); 80 - asmlinkage unsigned long sys_alarm(unsigned int seconds); 80 + asmlinkage long sys_alarm(unsigned int seconds); 81 81 asmlinkage long sys_getpid(void); 82 82 asmlinkage long sys_getppid(void); 83 83 asmlinkage long sys_getuid(void); ··· 166 166 unsigned long flags); 167 167 168 168 asmlinkage long sys_exit(int error_code); 169 - asmlinkage void sys_exit_group(int error_code); 169 + asmlinkage long sys_exit_group(int error_code); 170 170 asmlinkage long sys_wait4(pid_t pid, int __user *stat_addr, 171 171 int options, struct rusage __user *ru); 172 172 asmlinkage long sys_waitid(int which, pid_t pid, ··· 196 196 asmlinkage long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user *uinfo); 197 197 asmlinkage long sys_sgetmask(void); 198 198 asmlinkage long sys_ssetmask(int newmask); 199 - asmlinkage unsigned long sys_signal(int sig, __sighandler_t handler); 199 + asmlinkage long sys_signal(int sig, __sighandler_t handler); 200 200 asmlinkage long sys_pause(void); 201 201 202 202 asmlinkage long sys_sync(void); ··· 246 246 const void __user *value, size_t size, int flags); 247 247 asmlinkage long sys_fsetxattr(int fd, const char __user *name, 248 248 const void __user *value, size_t size, int flags); 249 - asmlinkage ssize_t sys_getxattr(const char __user *path, const char __user *name, 250 - void __user *value, size_t size); 251 - asmlinkage ssize_t sys_lgetxattr(const char __user *path, const char __user *name, 252 - void __user *value, size_t size); 253 - asmlinkage ssize_t sys_fgetxattr(int fd, const char __user *name, 254 - void __user *value, size_t size); 255 - asmlinkage ssize_t sys_listxattr(const char __user *path, char __user *list, 256 - size_t size); 257 - asmlinkage ssize_t sys_llistxattr(const char __user *path, char __user *list, 258 - size_t size); 259 - asmlinkage ssize_t sys_flistxattr(int fd, char __user *list, size_t size); 249 + asmlinkage long sys_getxattr(const char __user *path, const char __user *name, 250 + void __user *value, size_t size); 251 + asmlinkage long sys_lgetxattr(const char __user *path, const char __user *name, 252 + void __user *value, size_t size); 253 + asmlinkage long sys_fgetxattr(int fd, const char __user *name, 254 + void __user *value, size_t size); 255 + asmlinkage long sys_listxattr(const char __user *path, char __user *list, 256 + size_t size); 257 + asmlinkage long sys_llistxattr(const char __user *path, char __user *list, 258 + size_t size); 259 + asmlinkage long sys_flistxattr(int fd, char __user *list, size_t size); 260 260 asmlinkage long sys_removexattr(const char __user *path, 261 261 const char __user *name); 262 262 asmlinkage long sys_lremovexattr(const char __user *path, 263 263 const char __user *name); 264 264 asmlinkage long sys_fremovexattr(int fd, const char __user *name); 265 265 266 - asmlinkage unsigned long sys_brk(unsigned long brk); 266 + asmlinkage long sys_brk(unsigned long brk); 267 267 asmlinkage long sys_mprotect(unsigned long start, size_t len, 268 268 unsigned long prot); 269 - asmlinkage unsigned long sys_mremap(unsigned long addr, 270 - unsigned long old_len, unsigned long new_len, 271 - unsigned long flags, unsigned long new_addr); 269 + asmlinkage long sys_mremap(unsigned long addr, 270 + unsigned long old_len, unsigned long new_len, 271 + unsigned long flags, unsigned long new_addr); 272 272 asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size, 273 273 unsigned long prot, unsigned long pgoff, 274 274 unsigned long flags); ··· 321 321 struct iocb __user * __user *); 322 322 asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb, 323 323 struct io_event __user *result); 324 - asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, 325 - off_t __user *offset, size_t count); 326 - asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, 327 - loff_t __user *offset, size_t count); 324 + asmlinkage long sys_sendfile(int out_fd, int in_fd, 325 + off_t __user *offset, size_t count); 326 + asmlinkage long sys_sendfile64(int out_fd, int in_fd, 327 + loff_t __user *offset, size_t count); 328 328 asmlinkage long sys_readlink(const char __user *path, 329 329 char __user *buf, int bufsiz); 330 330 asmlinkage long sys_creat(const char __user *pathname, int mode); ··· 368 368 struct utimbuf __user *times); 369 369 asmlinkage long sys_utimes(char __user *filename, 370 370 struct timeval __user *utimes); 371 - asmlinkage off_t sys_lseek(unsigned int fd, off_t offset, 372 - unsigned int origin); 371 + asmlinkage long sys_lseek(unsigned int fd, off_t offset, 372 + unsigned int origin); 373 373 asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high, 374 374 unsigned long offset_low, loff_t __user *result, 375 375 unsigned int origin); 376 - asmlinkage ssize_t sys_read(unsigned int fd, char __user *buf, 377 - size_t count); 378 - asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count); 379 - asmlinkage ssize_t sys_readv(unsigned long fd, 380 - const struct iovec __user *vec, 381 - unsigned long vlen); 382 - asmlinkage ssize_t sys_write(unsigned int fd, const char __user *buf, 383 - size_t count); 384 - asmlinkage ssize_t sys_writev(unsigned long fd, 385 - const struct iovec __user *vec, 386 - unsigned long vlen); 387 - asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf, 388 - size_t count, loff_t pos); 389 - asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf, 390 - size_t count, loff_t pos); 376 + asmlinkage long sys_read(unsigned int fd, char __user *buf, size_t count); 377 + asmlinkage long sys_readahead(int fd, loff_t offset, size_t count); 378 + asmlinkage long sys_readv(unsigned long fd, 379 + const struct iovec __user *vec, 380 + unsigned long vlen); 381 + asmlinkage long sys_write(unsigned int fd, const char __user *buf, 382 + size_t count); 383 + asmlinkage long sys_writev(unsigned long fd, 384 + const struct iovec __user *vec, 385 + unsigned long vlen); 386 + asmlinkage long sys_pread64(unsigned int fd, char __user *buf, 387 + size_t count, loff_t pos); 388 + asmlinkage long sys_pwrite64(unsigned int fd, const char __user *buf, 389 + size_t count, loff_t pos); 391 390 asmlinkage long sys_getcwd(char __user *buf, unsigned long size); 392 391 asmlinkage long sys_mkdir(const char __user *pathname, int mode); 393 392 asmlinkage long sys_chdir(const char __user *filename); ··· 475 476 asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr); 476 477 asmlinkage long sys_mq_unlink(const char __user *name); 477 478 asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec __user *abs_timeout); 478 - asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout); 479 + asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout); 479 480 asmlinkage long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *notification); 480 481 asmlinkage long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user *mqstat, struct mq_attr __user *omqstat); 481 482
+1 -1
ipc/mqueue.c
··· 907 907 return ret; 908 908 } 909 909 910 - asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr, 910 + asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr, 911 911 size_t msg_len, unsigned int __user *u_msg_prio, 912 912 const struct timespec __user *u_abs_timeout) 913 913 {
+3 -1
kernel/exit.c
··· 1182 1182 * wait4()-ing process will get the correct exit code - even if this 1183 1183 * thread is not the thread group leader. 1184 1184 */ 1185 - asmlinkage void sys_exit_group(int error_code) 1185 + asmlinkage long sys_exit_group(int error_code) 1186 1186 { 1187 1187 do_group_exit((error_code & 0xff) << 8); 1188 + /* NOTREACHED */ 1189 + return 0; 1188 1190 } 1189 1191 1190 1192 static struct pid *task_pid_type(struct task_struct *task, enum pid_type type)
+1 -1
kernel/signal.c
··· 2559 2559 /* 2560 2560 * For backwards compatibility. Functionality superseded by sigaction. 2561 2561 */ 2562 - asmlinkage unsigned long 2562 + asmlinkage long 2563 2563 sys_signal(int sig, __sighandler_t handler) 2564 2564 { 2565 2565 struct k_sigaction new_sa, old_sa;
+1 -1
kernel/timer.c
··· 1129 1129 * For backwards compatibility? This can be done in libc so Alpha 1130 1130 * and all newer ports shouldn't need it. 1131 1131 */ 1132 - asmlinkage unsigned long sys_alarm(unsigned int seconds) 1132 + asmlinkage long sys_alarm(unsigned int seconds) 1133 1133 { 1134 1134 return alarm_setitimer(seconds); 1135 1135 }
+1 -1
mm/filemap.c
··· 1374 1374 return 0; 1375 1375 } 1376 1376 1377 - asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count) 1377 + asmlinkage long sys_readahead(int fd, loff_t offset, size_t count) 1378 1378 { 1379 1379 ssize_t ret; 1380 1380 struct file *file;
+1 -1
mm/mmap.c
··· 245 245 return next; 246 246 } 247 247 248 - asmlinkage unsigned long sys_brk(unsigned long brk) 248 + asmlinkage long sys_brk(unsigned long brk) 249 249 { 250 250 unsigned long rlim, retval; 251 251 unsigned long newbrk, oldbrk;
+1 -1
mm/mremap.c
··· 420 420 return ret; 421 421 } 422 422 423 - asmlinkage unsigned long sys_mremap(unsigned long addr, 423 + asmlinkage long sys_mremap(unsigned long addr, 424 424 unsigned long old_len, unsigned long new_len, 425 425 unsigned long flags, unsigned long new_addr) 426 426 {
+1 -1
mm/nommu.c
··· 416 416 * to a regular file. in this case, the unmapping will need 417 417 * to invoke file system routines that need the global lock. 418 418 */ 419 - asmlinkage unsigned long sys_brk(unsigned long brk) 419 + asmlinkage long sys_brk(unsigned long brk) 420 420 { 421 421 struct mm_struct *mm = current->mm; 422 422