#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>
/* 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: {
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);
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);