GFS2: Fix permissions checking for setflags ioctl()
We should be checking for the ownership of the file for which flags are being set, rather than just for write access. Reported-by: Dan Rosenberg <dan.j.rosenberg@gmail.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
Родитель
f72f2d2e2f
Коммит
7df0e0397b
|
@ -218,6 +218,11 @@ static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask)
|
|||
if (error)
|
||||
goto out_drop_write;
|
||||
|
||||
error = -EACCES;
|
||||
if (!is_owner_or_cap(inode))
|
||||
goto out;
|
||||
|
||||
error = 0;
|
||||
flags = ip->i_diskflags;
|
||||
new_flags = (flags & ~mask) | (reqflags & mask);
|
||||
if ((new_flags ^ flags) == 0)
|
||||
|
@ -275,8 +280,10 @@ static int gfs2_set_flags(struct file *filp, u32 __user *ptr)
|
|||
{
|
||||
struct inode *inode = filp->f_path.dentry->d_inode;
|
||||
u32 fsflags, gfsflags;
|
||||
|
||||
if (get_user(fsflags, ptr))
|
||||
return -EFAULT;
|
||||
|
||||
gfsflags = fsflags_cvt(fsflags_to_gfs2, fsflags);
|
||||
if (!S_ISDIR(inode->i_mode)) {
|
||||
if (gfsflags & GFS2_DIF_INHERIT_JDATA)
|
||||
|
|
Загрузка…
Ссылка в новой задаче