no success with 2.6.12 either, forget about building with the 4.0rc1 tag for now
[linux-2.6.git] / fs / ioctl.c
index 1b18d74..95ff6a5 100644 (file)
@@ -8,6 +8,7 @@
 #include <linux/syscalls.h>
 #include <linux/mm.h>
 #include <linux/smp_lock.h>
+#include <linux/capability.h>
 #include <linux/file.h>
 #include <linux/fs.h>
 #include <linux/security.h>
@@ -163,7 +164,7 @@ int vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd, unsigned lon
                        /* fixme: if stealth, return -ENOTTY */
                        error = -EPERM;
                        if (capable(CAP_CONTEXT))
-                               error = put_user(inode->i_xid, (int *) arg);
+                               error = put_user(inode->i_xid, (int __user *) arg);
                        break;
                }
                case FIOC_SETXID: {
@@ -181,7 +182,7 @@ int vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd, unsigned lon
                        if (!(inode->i_sb->s_flags & MS_TAGXID))
                                break;
                        error = -EFAULT;
-                       if (get_user(xid, (int *) arg))
+                       if (get_user(xid, (int __user *) arg))
                                break;
                        error = 0;
                        inode->i_xid = (xid & 0xFFFF);
@@ -197,6 +198,22 @@ int vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd, unsigned lon
                                error = vx_proc_ioctl(filp->f_dentry->d_inode, filp, cmd, arg);
                        break;
 #endif
+               /*
+                * These cmds needed for PLK - don't lose them!
+                */
+                case FIOC_SETIATTR:
+                case FIOC_GETIATTR:
+                        /*
+                         * Verify that this filp is a file object,
+                         * not (say) a socket.
+                         */
+                        error = -ENOTTY;
+                        if (S_ISREG(filp->f_dentry->d_inode->i_mode) ||
+                            S_ISDIR(filp->f_dentry->d_inode->i_mode))
+                                error = vc_iattr_ioctl(filp->f_dentry,
+                                                       cmd, arg);
+                        break;
+
                default:
                        if (S_ISREG(filp->f_dentry->d_inode->i_mode))
                                error = file_ioctl(filp, cmd, arg);