Message ID | 20210628123801.3511-1-wangshilong1991@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | [v2] fs: forbid invalid project ID | expand |
On Mon, Jun 28, 2021 at 08:38:01AM -0400, Wang Shilong wrote: > fileattr_set_prepare() should check if project ID > is valid, otherwise dqget() will return NULL for > such project ID quota. > > Signed-off-by: Wang Shilong <wshilong@ddn.com> > --- > v1->v2: try to fix in the VFS > --- > fs/ioctl.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fs/ioctl.c b/fs/ioctl.c > index 1e2204fa9963..5db5b218637b 100644 > --- a/fs/ioctl.c > +++ b/fs/ioctl.c > @@ -845,6 +845,9 @@ static int fileattr_set_prepare(struct inode *inode, > if (fa->fsx_cowextsize == 0) > fa->fsx_xflags &= ~FS_XFLAG_COWEXTSIZE; > > + if (!projid_valid(KPROJIDT_INIT(fa->fsx_projid))) > + return -EINVAL; This needs to go further up in this function in the section where project IDs passed into this function are validated. Projids are only allowed to be changed when current_user_ns() == &init_user_ns, so this needs to be associated with that verification context. This check should also use make_kprojid(), please, not open code KPROJIDT_INIT. Cheers, Dave.
On Tue, Jun 29, 2021 at 6:34 AM Dave Chinner <david@fromorbit.com> wrote: > > On Mon, Jun 28, 2021 at 08:38:01AM -0400, Wang Shilong wrote: > > fileattr_set_prepare() should check if project ID > > is valid, otherwise dqget() will return NULL for > > such project ID quota. > > > > Signed-off-by: Wang Shilong <wshilong@ddn.com> > > --- > > v1->v2: try to fix in the VFS > > --- > > fs/ioctl.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/fs/ioctl.c b/fs/ioctl.c > > index 1e2204fa9963..5db5b218637b 100644 > > --- a/fs/ioctl.c > > +++ b/fs/ioctl.c > > @@ -845,6 +845,9 @@ static int fileattr_set_prepare(struct inode *inode, > > if (fa->fsx_cowextsize == 0) > > fa->fsx_xflags &= ~FS_XFLAG_COWEXTSIZE; > > > > + if (!projid_valid(KPROJIDT_INIT(fa->fsx_projid))) > > + return -EINVAL; > > This needs to go further up in this function in the section where > project IDs passed into this function are validated. Projids are > only allowed to be changed when current_user_ns() == &init_user_ns, > so this needs to be associated with that verification context. > > This check should also use make_kprojid(), please, not open code > KPROJIDT_INIT. You are right, let me send a V3 > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com
diff --git a/fs/ioctl.c b/fs/ioctl.c index 1e2204fa9963..5db5b218637b 100644 --- a/fs/ioctl.c +++ b/fs/ioctl.c @@ -845,6 +845,9 @@ static int fileattr_set_prepare(struct inode *inode, if (fa->fsx_cowextsize == 0) fa->fsx_xflags &= ~FS_XFLAG_COWEXTSIZE; + if (!projid_valid(KPROJIDT_INIT(fa->fsx_projid))) + return -EINVAL; + return 0; }
fileattr_set_prepare() should check if project ID is valid, otherwise dqget() will return NULL for such project ID quota. Signed-off-by: Wang Shilong <wshilong@ddn.com> --- v1->v2: try to fix in the VFS --- fs/ioctl.c | 3 +++ 1 file changed, 3 insertions(+)