On Mon, Jun 28, 2021 at 6:42 AM Dave Chinner <david@xxxxxxxxxxxxx> wrote: > > On Fri, Jun 25, 2021 at 08:40:33AM -0400, Wang Shilong wrote: > > From: Wang Shilong <wshilong@xxxxxxx> > > > > U32_MAX is reserved for special purpose, > > qid_has_mapping() will return false if projid is > > 4294967295, dqget() will return NULL for it. > > > > So U32_MAX is unsupported Project ID, fix to forbid > > it. > > Actually, it's INVALID_PROJID, not U32_MAX, and we already have a > check function for that: > > static inline bool projid_valid(kprojid_t projid) > { > return !projid_eq(projid, INVALID_PROJID); > } > I was not aware of this, thanks for pointing it out. > > Signed-off-by: Wang Shilong <wshilong@xxxxxxx> > > --- > > fs/ext4/ioctl.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c > > index 31627f7dc5cd..f3a8d962c291 100644 > > --- a/fs/ext4/ioctl.c > > +++ b/fs/ext4/ioctl.c > > @@ -744,6 +744,9 @@ int ext4_fileattr_set(struct user_namespace *mnt_userns, > > u32 flags = fa->flags; > > int err = -EOPNOTSUPP; > > > > + if (fa->fsx_projid >= U32_MAX) > > + return -EINVAL; > > + > > This should actually be calling qid_valid() or projid_valid(), > and it should be in generic code because multiple filesystems > support project quotas. i.e this should be checked in > fileattr_set_prepare(), not in ext4 specific code. I tried to fix ext4/f2fs, i am not sure about XFS, it looks to me XFS implemented quota mostly by itself. Anyway, let me fix this in generic code. > > Cheers, > > Dave. > -- > Dave Chinner > david@xxxxxxxxxxxxx