lkml.org 
[lkml]   [2009]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 33/94] [PATCH 02/44] [CVE-2009-0029] Convert all system calls to return a long
    2.6.28-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Heiko Carstens <heiko.carstens@de.ibm.com>

    commit 2ed7c03ec17779afb4fcfa3b8c61df61bd4879ba upstream.

    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>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
    fs/read_write.c | 18 +++++-----
    fs/xattr.c | 12 +++----
    include/linux/syscalls.h | 79 +++++++++++++++++++++++------------------------
    ipc/mqueue.c | 2 -
    kernel/exit.c | 4 +-
    kernel/signal.c | 2 -
    kernel/timer.c | 2 -
    mm/filemap.c | 2 -
    mm/mmap.c | 2 -
    mm/mremap.c | 2 -
    mm/nommu.c | 2 -
    11 files changed, 64 insertions(+), 63 deletions(-)

    --- a/fs/read_write.c
    +++ b/fs/read_write.c
    @@ -134,7 +134,7 @@ loff_t vfs_llseek(struct file *file, lof
    }
    EXPORT_SYMBOL(vfs_llseek);

    -asmlinkage off_t sys_lseek(unsigned int fd, off_t offset, unsigned int origin)
    +asmlinkage long sys_lseek(unsigned int fd, off_t offset, unsigned int origin)
    {
    off_t retval;
    struct file * file;
    @@ -356,7 +356,7 @@ static inline void file_pos_write(struct
    file->f_pos = pos;
    }

    -asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count)
    +asmlinkage long sys_read(unsigned int fd, char __user * buf, size_t count)
    {
    struct file *file;
    ssize_t ret = -EBADF;
    @@ -373,7 +373,7 @@ asmlinkage ssize_t sys_read(unsigned int
    return ret;
    }

    -asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t count)
    +asmlinkage long sys_write(unsigned int fd, const char __user * buf, size_t count)
    {
    struct file *file;
    ssize_t ret = -EBADF;
    @@ -390,7 +390,7 @@ asmlinkage ssize_t sys_write(unsigned in
    return ret;
    }

    -asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf,
    +asmlinkage long sys_pread64(unsigned int fd, char __user *buf,
    size_t count, loff_t pos)
    {
    struct file *file;
    @@ -411,7 +411,7 @@ asmlinkage ssize_t sys_pread64(unsigned
    return ret;
    }

    -asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf,
    +asmlinkage long sys_pwrite64(unsigned int fd, const char __user *buf,
    size_t count, loff_t pos)
    {
    struct file *file;
    @@ -659,7 +659,7 @@ ssize_t vfs_writev(struct file *file, co

    EXPORT_SYMBOL(vfs_writev);

    -asmlinkage ssize_t
    +asmlinkage long
    sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen)
    {
    struct file *file;
    @@ -680,7 +680,7 @@ sys_readv(unsigned long fd, const struct
    return ret;
    }

    -asmlinkage ssize_t
    +asmlinkage long
    sys_writev(unsigned long fd, const struct iovec __user *vec, unsigned long vlen)
    {
    struct file *file;
    @@ -799,7 +799,7 @@ out:
    return retval;
    }

    -asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t __user *offset, size_t count)
    +asmlinkage long sys_sendfile(int out_fd, int in_fd, off_t __user *offset, size_t count)
    {
    loff_t pos;
    off_t off;
    @@ -818,7 +818,7 @@ asmlinkage ssize_t sys_sendfile(int out_
    return do_sendfile(out_fd, in_fd, NULL, count, 0);
    }

    -asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, loff_t __user *offset, size_t count)
    +asmlinkage long sys_sendfile64(int out_fd, int in_fd, loff_t __user *offset, size_t count)
    {
    loff_t pos;
    ssize_t ret;
    --- a/fs/xattr.c
    +++ b/fs/xattr.c
    @@ -349,7 +349,7 @@ getxattr(struct dentry *d, const char __
    return error;
    }

    -asmlinkage ssize_t
    +asmlinkage long
    sys_getxattr(const char __user *pathname, const char __user *name,
    void __user *value, size_t size)
    {
    @@ -364,7 +364,7 @@ sys_getxattr(const char __user *pathname
    return error;
    }

    -asmlinkage ssize_t
    +asmlinkage long
    sys_lgetxattr(const char __user *pathname, const char __user *name, void __user *value,
    size_t size)
    {
    @@ -379,7 +379,7 @@ sys_lgetxattr(const char __user *pathnam
    return error;
    }

    -asmlinkage ssize_t
    +asmlinkage long
    sys_fgetxattr(int fd, const char __user *name, void __user *value, size_t size)
    {
    struct file *f;
    @@ -424,7 +424,7 @@ listxattr(struct dentry *d, char __user
    return error;
    }

    -asmlinkage ssize_t
    +asmlinkage long
    sys_listxattr(const char __user *pathname, char __user *list, size_t size)
    {
    struct path path;
    @@ -438,7 +438,7 @@ sys_listxattr(const char __user *pathnam
    return error;
    }

    -asmlinkage ssize_t
    +asmlinkage long
    sys_llistxattr(const char __user *pathname, char __user *list, size_t size)
    {
    struct path path;
    @@ -452,7 +452,7 @@ sys_llistxattr(const char __user *pathna
    return error;
    }

    -asmlinkage ssize_t
    +asmlinkage long
    sys_flistxattr(int fd, char __user *list, size_t size)
    {
    struct file *f;
    --- a/include/linux/syscalls.h
    +++ b/include/linux/syscalls.h
    @@ -77,7 +77,7 @@ asmlinkage long sys_times(struct tms __u

    asmlinkage long sys_gettid(void);
    asmlinkage long sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp);
    -asmlinkage unsigned long sys_alarm(unsigned int seconds);
    +asmlinkage long sys_alarm(unsigned int seconds);
    asmlinkage long sys_getpid(void);
    asmlinkage long sys_getppid(void);
    asmlinkage long sys_getuid(void);
    @@ -166,7 +166,7 @@ asmlinkage long sys_kexec_load(unsigned
    unsigned long flags);

    asmlinkage long sys_exit(int error_code);
    -asmlinkage void sys_exit_group(int error_code);
    +asmlinkage long sys_exit_group(int error_code);
    asmlinkage long sys_wait4(pid_t pid, int __user *stat_addr,
    int options, struct rusage __user *ru);
    asmlinkage long sys_waitid(int which, pid_t pid,
    @@ -196,7 +196,7 @@ asmlinkage long sys_tkill(int pid, int s
    asmlinkage long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user *uinfo);
    asmlinkage long sys_sgetmask(void);
    asmlinkage long sys_ssetmask(int newmask);
    -asmlinkage unsigned long sys_signal(int sig, __sighandler_t handler);
    +asmlinkage long sys_signal(int sig, __sighandler_t handler);
    asmlinkage long sys_pause(void);

    asmlinkage long sys_sync(void);
    @@ -246,29 +246,29 @@ asmlinkage long sys_lsetxattr(const char
    const void __user *value, size_t size, int flags);
    asmlinkage long sys_fsetxattr(int fd, const char __user *name,
    const void __user *value, size_t size, int flags);
    -asmlinkage ssize_t sys_getxattr(const char __user *path, const char __user *name,
    - void __user *value, size_t size);
    -asmlinkage ssize_t sys_lgetxattr(const char __user *path, const char __user *name,
    - void __user *value, size_t size);
    -asmlinkage ssize_t sys_fgetxattr(int fd, const char __user *name,
    - void __user *value, size_t size);
    -asmlinkage ssize_t sys_listxattr(const char __user *path, char __user *list,
    - size_t size);
    -asmlinkage ssize_t sys_llistxattr(const char __user *path, char __user *list,
    - size_t size);
    -asmlinkage ssize_t sys_flistxattr(int fd, char __user *list, size_t size);
    +asmlinkage long sys_getxattr(const char __user *path, const char __user *name,
    + void __user *value, size_t size);
    +asmlinkage long sys_lgetxattr(const char __user *path, const char __user *name,
    + void __user *value, size_t size);
    +asmlinkage long sys_fgetxattr(int fd, const char __user *name,
    + void __user *value, size_t size);
    +asmlinkage long sys_listxattr(const char __user *path, char __user *list,
    + size_t size);
    +asmlinkage long sys_llistxattr(const char __user *path, char __user *list,
    + size_t size);
    +asmlinkage long sys_flistxattr(int fd, char __user *list, size_t size);
    asmlinkage long sys_removexattr(const char __user *path,
    const char __user *name);
    asmlinkage long sys_lremovexattr(const char __user *path,
    const char __user *name);
    asmlinkage long sys_fremovexattr(int fd, const char __user *name);

    -asmlinkage unsigned long sys_brk(unsigned long brk);
    +asmlinkage long sys_brk(unsigned long brk);
    asmlinkage long sys_mprotect(unsigned long start, size_t len,
    unsigned long prot);
    -asmlinkage unsigned long sys_mremap(unsigned long addr,
    - unsigned long old_len, unsigned long new_len,
    - unsigned long flags, unsigned long new_addr);
    +asmlinkage long sys_mremap(unsigned long addr,
    + unsigned long old_len, unsigned long new_len,
    + unsigned long flags, unsigned long new_addr);
    asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,
    unsigned long prot, unsigned long pgoff,
    unsigned long flags);
    @@ -321,10 +321,10 @@ asmlinkage long sys_io_submit(aio_contex
    struct iocb __user * __user *);
    asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb,
    struct io_event __user *result);
    -asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd,
    - off_t __user *offset, size_t count);
    -asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd,
    - loff_t __user *offset, size_t count);
    +asmlinkage long sys_sendfile(int out_fd, int in_fd,
    + off_t __user *offset, size_t count);
    +asmlinkage long sys_sendfile64(int out_fd, int in_fd,
    + loff_t __user *offset, size_t count);
    asmlinkage long sys_readlink(const char __user *path,
    char __user *buf, int bufsiz);
    asmlinkage long sys_creat(const char __user *pathname, int mode);
    @@ -368,26 +368,25 @@ asmlinkage long sys_utime(char __user *f
    struct utimbuf __user *times);
    asmlinkage long sys_utimes(char __user *filename,
    struct timeval __user *utimes);
    -asmlinkage off_t sys_lseek(unsigned int fd, off_t offset,
    - unsigned int origin);
    +asmlinkage long sys_lseek(unsigned int fd, off_t offset,
    + unsigned int origin);
    asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high,
    unsigned long offset_low, loff_t __user *result,
    unsigned int origin);
    -asmlinkage ssize_t sys_read(unsigned int fd, char __user *buf,
    - size_t count);
    -asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count);
    -asmlinkage ssize_t sys_readv(unsigned long fd,
    - const struct iovec __user *vec,
    - unsigned long vlen);
    -asmlinkage ssize_t sys_write(unsigned int fd, const char __user *buf,
    - size_t count);
    -asmlinkage ssize_t sys_writev(unsigned long fd,
    - const struct iovec __user *vec,
    - unsigned long vlen);
    -asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf,
    - size_t count, loff_t pos);
    -asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf,
    - size_t count, loff_t pos);
    +asmlinkage long sys_read(unsigned int fd, char __user *buf, size_t count);
    +asmlinkage long sys_readahead(int fd, loff_t offset, size_t count);
    +asmlinkage long sys_readv(unsigned long fd,
    + const struct iovec __user *vec,
    + unsigned long vlen);
    +asmlinkage long sys_write(unsigned int fd, const char __user *buf,
    + size_t count);
    +asmlinkage long sys_writev(unsigned long fd,
    + const struct iovec __user *vec,
    + unsigned long vlen);
    +asmlinkage long sys_pread64(unsigned int fd, char __user *buf,
    + size_t count, loff_t pos);
    +asmlinkage long sys_pwrite64(unsigned int fd, const char __user *buf,
    + size_t count, loff_t pos);
    asmlinkage long sys_getcwd(char __user *buf, unsigned long size);
    asmlinkage long sys_mkdir(const char __user *pathname, int mode);
    asmlinkage long sys_chdir(const char __user *filename);
    @@ -476,7 +475,7 @@ asmlinkage long sys_shmctl(int shmid, in
    asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr);
    asmlinkage long sys_mq_unlink(const char __user *name);
    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);
    -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);
    +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);
    asmlinkage long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *notification);
    asmlinkage long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user *mqstat, struct mq_attr __user *omqstat);

    --- a/ipc/mqueue.c
    +++ b/ipc/mqueue.c
    @@ -904,7 +904,7 @@ out:
    return ret;
    }

    -asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr,
    +asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr,
    size_t msg_len, unsigned int __user *u_msg_prio,
    const struct timespec __user *u_abs_timeout)
    {
    --- a/kernel/exit.c
    +++ b/kernel/exit.c
    @@ -1184,9 +1184,11 @@ do_group_exit(int exit_code)
    * wait4()-ing process will get the correct exit code - even if this
    * thread is not the thread group leader.
    */
    -asmlinkage void sys_exit_group(int error_code)
    +asmlinkage long sys_exit_group(int error_code)
    {
    do_group_exit((error_code & 0xff) << 8);
    + /* NOTREACHED */
    + return 0;
    }

    static struct pid *task_pid_type(struct task_struct *task, enum pid_type type)
    --- a/kernel/signal.c
    +++ b/kernel/signal.c
    @@ -2538,7 +2538,7 @@ sys_ssetmask(int newmask)
    /*
    * For backwards compatibility. Functionality superseded by sigaction.
    */
    -asmlinkage unsigned long
    +asmlinkage long
    sys_signal(int sig, __sighandler_t handler)
    {
    struct k_sigaction new_sa, old_sa;
    --- a/kernel/timer.c
    +++ b/kernel/timer.c
    @@ -1144,7 +1144,7 @@ void do_timer(unsigned long ticks)
    * For backwards compatibility? This can be done in libc so Alpha
    * and all newer ports shouldn't need it.
    */
    -asmlinkage unsigned long sys_alarm(unsigned int seconds)
    +asmlinkage long sys_alarm(unsigned int seconds)
    {
    return alarm_setitimer(seconds);
    }
    --- a/mm/filemap.c
    +++ b/mm/filemap.c
    @@ -1366,7 +1366,7 @@ do_readahead(struct address_space *mappi
    return 0;
    }

    -asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count)
    +asmlinkage long sys_readahead(int fd, loff_t offset, size_t count)
    {
    ssize_t ret;
    struct file *file;
    --- a/mm/mmap.c
    +++ b/mm/mmap.c
    @@ -245,7 +245,7 @@ static struct vm_area_struct *remove_vma
    return next;
    }

    -asmlinkage unsigned long sys_brk(unsigned long brk)
    +asmlinkage long sys_brk(unsigned long brk)
    {
    unsigned long rlim, retval;
    unsigned long newbrk, oldbrk;
    --- a/mm/mremap.c
    +++ b/mm/mremap.c
    @@ -420,7 +420,7 @@ out_nc:
    return ret;
    }

    -asmlinkage unsigned long sys_mremap(unsigned long addr,
    +asmlinkage long sys_mremap(unsigned long addr,
    unsigned long old_len, unsigned long new_len,
    unsigned long flags, unsigned long new_addr)
    {
    --- a/mm/nommu.c
    +++ b/mm/nommu.c
    @@ -377,7 +377,7 @@ EXPORT_SYMBOL(vm_insert_page);
    * to a regular file. in this case, the unmapping will need
    * to invoke file system routines that need the global lock.
    */
    -asmlinkage unsigned long sys_brk(unsigned long brk)
    +asmlinkage long sys_brk(unsigned long brk)
    {
    struct mm_struct *mm = current->mm;



    \
     
     \ /
      Last update: 2009-01-15 21:25    [W:0.078 / U:1.408 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site