On Tue, Mar 16, 2021 at 01:44:33PM +0800, Qu Wenruo wrote: > > > On 2021/3/15 下午11:56, Sidong Yang wrote: > > When user assign qgroup with qgroup id that is too big to exceeds > > range and invade level value, and it works without any error. but > > this action would be make undefined error. this code make sure that > > qgroup id doesn't exceed range(0 ~ 2^48-1). > > > > Signed-off-by: Sidong Yang <realwa...@gmail.com> > > Shouldn't the check also happen inside the ioctl?
Yes, I checked the ioctl code in kernel. but there is only the code that check if it is zero like !sa->qgroupid. and it just assign to key.offset. Also it should be checked in ioctl? > > Thanks, > Qu > > --- > > common/utils.c | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/common/utils.c b/common/utils.c > > index 57e41432..a2f72550 100644 > > --- a/common/utils.c > > +++ b/common/utils.c > > @@ -727,6 +727,8 @@ u64 parse_qgroupid(const char *p) > > id = strtoull(p, &ptr_parse_end, 10); > > if (ptr_parse_end != ptr_src_end) > > goto path; > > + if (id >> BTRFS_QGROUP_LEVEL_SHIFT) > > + goto err; > > return id; > > } > > level = strtoull(p, &ptr_parse_end, 10); > > @@ -734,6 +736,9 @@ u64 parse_qgroupid(const char *p) > > goto path; > > > > id = strtoull(s + 1, &ptr_parse_end, 10); > > + if (id >> BTRFS_QGROUP_LEVEL_SHIFT) > > + goto err; > > + > > if (ptr_parse_end != ptr_src_end) > > goto path; > > > >