Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Kernel v2.6.25-rc7 /fs/compat.c

Filename:/fs/compat.c
Lines Added:31
Lines Deleted:65
Also changed in: (Previous) 2.6.25-rc6  2.6.25-rc5  2.6.25-rc4  2.6.25-rc3  2.6.25-rc2  2.6.25-rc1-git4 
(Following) 2.6.25-rc8  2.6.25-rc9  2.6.25  2.6.25-git16  2.6.25-git17  2.6.25-git18 

Location
[  2.6.25-rc7
  [  fs
     o  compat.c

Patch

diff --git a/fs/compat.c b/fs/compat.c
index 15078ce..2ce4456 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -241,10 +241,10 @@ asmlinkage long compat_sys_statfs(const char __user *path, struct compat_statfs
    error = user_path_walk(path, &nd);
    if (!error) {
       struct kstatfs tmp;
-      error = vfs_statfs(nd.dentry, &tmp);
+      error = vfs_statfs(nd.path.dentry, &tmp);
       if (!error)
          error = put_compat_statfs(buf, &tmp);
-      path_release(&nd);
+      path_put(&nd.path);
    }
    return error;
 }
@@ -309,10 +309,10 @@ asmlinkage long compat_sys_statfs64(const char __user *path, compat_size_t sz, s
    error = user_path_walk(path, &nd);
    if (!error) {
       struct kstatfs tmp;
-      error = vfs_statfs(nd.dentry, &tmp);
+      error = vfs_statfs(nd.path.dentry, &tmp);
       if (!error)
          error = put_compat_statfs64(buf, &tmp);
-      path_release(&nd);
+      path_put(&nd.path);
    }
    return error;
 }
@@ -702,9 +702,6 @@ static int do_nfs4_super_data_conv(void *raw_data)
       real->flags = raw->flags;
       real->version = raw->version;
    }
-   else {
-      return -EINVAL;
-   }
 
    return 0;
 }
@@ -1104,10 +1101,6 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
    if (ret < 0)
       goto out;
 
-   ret = security_file_permission(file, type == READ ? MAY_READ:MAY_WRITE);
-   if (ret)
-      goto out;
-
    fnv = NULL;
    if (type == READ) {
       fn = file->f_op->read;
@@ -2087,51 +2080,6 @@ long asmlinkage compat_sys_nfsservctl(int cmd, void *notused, void *notused2)
 
 #ifdef CONFIG_EPOLL
 
-#ifdef CONFIG_HAS_COMPAT_EPOLL_EVENT
-asmlinkage long compat_sys_epoll_ctl(int epfd, int op, int fd,
-         struct compat_epoll_event __user *event)
-{
-   long err = 0;
-   struct compat_epoll_event user;
-   struct epoll_event __user *kernel = NULL;
-
-   if (event) {
-      if (copy_from_user(&user, event, sizeof(user)))
-         return -EFAULT;
-      kernel = compat_alloc_user_space(sizeof(struct epoll_event));
-      err |= __put_user(user.events, &kernel->events);
-      err |= __put_user(user.data, &kernel->data);
-   }
-
-   return err ? err : sys_epoll_ctl(epfd, op, fd, kernel);
-}
-
-
-asmlinkage long compat_sys_epoll_wait(int epfd,
-         struct compat_epoll_event __user *events,
-         int maxevents, int timeout)
-{
-   long i, ret, err = 0;
-   struct epoll_event __user *kbuf;
-   struct epoll_event ev;
-
-   if ((maxevents <= 0) ||
-         (maxevents > (INT_MAX / sizeof(struct epoll_event))))
-      return -EINVAL;
-   kbuf = compat_alloc_user_space(sizeof(struct epoll_event) * maxevents);
-   ret = sys_epoll_wait(epfd, kbuf, maxevents, timeout);
-   for (i = 0; i < ret; i++) {
-      err |= __get_user(ev.events, &kbuf[i].events);
-      err |= __get_user(ev.data, &kbuf[i].data);
-      err |= __put_user(ev.events, &events->events);
-      err |= __put_user_unaligned(ev.data, &events->data);
-      events++;
-   }
-
-   return err ? -EFAULT: ret;
-}
-#endif   /* CONFIG_HAS_COMPAT_EPOLL_EVENT */
-
 #ifdef TIF_RESTORE_SIGMASK
 asmlinkage long compat_sys_epoll_pwait(int epfd,
          struct compat_epoll_event __user *events,
@@ -2157,11 +2105,7 @@ asmlinkage long compat_sys_epoll_pwait(int epfd,
       sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved);
    }
 
-#ifdef CONFIG_HAS_COMPAT_EPOLL_EVENT
-   err = compat_sys_epoll_wait(epfd, events, maxevents, timeout);
-#else
    err = sys_epoll_wait(epfd, events, maxevents, timeout);
-#endif
 
    /*
     * If we changed the signal mask, we need to restore the original one.
@@ -2210,19 +2154,41 @@ asmlinkage long compat_sys_signalfd(int ufd,
 
 #ifdef CONFIG_TIMERFD
 
-asmlinkage long compat_sys_timerfd(int ufd, int clockid, int flags,
-               const struct compat_itimerspec __user *utmr)
+asmlinkage long compat_sys_timerfd_settime(int ufd, int flags,
+               const struct compat_itimerspec __user *utmr,
+               struct compat_itimerspec __user *otmr)
 {
+   int error;
    struct itimerspec t;
    struct itimerspec __user *ut;
 
    if (get_compat_itimerspec(&t, utmr))
       return -EFAULT;
-   ut = compat_alloc_user_space(sizeof(*ut));
-   if (copy_to_user(ut, &t, sizeof(t)))
+   ut = compat_alloc_user_space(2 * sizeof(struct itimerspec));
+   if (copy_to_user(&ut[0], &t, sizeof(t)))
       return -EFAULT;
+   error = sys_timerfd_settime(ufd, flags, &ut[0], &ut[1]);
+   if (!error && otmr)
+      error = (copy_from_user(&t, &ut[1], sizeof(struct itimerspec)) ||
+          put_compat_itimerspec(otmr, &t)) ? -EFAULT: 0;
+
+   return error;
+}
 
-   return sys_timerfd(ufd, clockid, flags, ut);
+asmlinkage long compat_sys_timerfd_gettime(int ufd,
+               struct compat_itimerspec __user *otmr)
+{
+   int error;
+   struct itimerspec t;
+   struct itimerspec __user *ut;
+
+   ut = compat_alloc_user_space(sizeof(struct itimerspec));
+   error = sys_timerfd_gettime(ufd, ut);
+   if (!error)
+      error = (copy_from_user(&t, ut, sizeof(struct itimerspec)) ||
+          put_compat_itimerspec(otmr, &t)) ? -EFAULT: 0;
+
+   return error;
 }
 
 #endif /* CONFIG_TIMERFD */


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.