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? 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;