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); } > 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. Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx