Thread (7 messages) 7 messages, 3 authors, 2021-03-19

Re: [PATCH v2] btrfs-progs: common: make sure that qgroup id is in range

From: Sidong Yang <hidden>
Date: 2021-03-19 16:45:29

On Thu, Mar 18, 2021 at 09:34:14PM +0100, David Sterba wrote:
On Thu, Mar 18, 2021 at 02:22:20AM +0000, Sidong Yang wrote:
quoted
On Wed, Mar 17, 2021 at 07:36:47PM +0100, David Sterba wrote:
quoted
On Tue, Mar 16, 2021 at 01:27:46PM +0000, Sidong Yang wrote:
quoted
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).
Should the level be also validate? The function parse_qgroupid does not
do full validation, so eg 0//0 would be parsed as a path and not as a
typo, level larger than 64K will be silently clamped.
I agree. 0//0 would be parsed as path but it failed in
btrfs_util_is_subvolume() and goes to err. I understand that upper 16
bits of qgroupid is for level. so, The valid llevel range is [0~2^16-1].
But I can't get it that level larger than 64K will be clampled. 
The way the level gets stored into the final qgroup id is level << 48.
For example invalid values 70000/281474976710779 would be stored
as subvol id 123 and level 4465, where the u64 is 0x117100000000007b
quoted
one more question about that, I see that the ioctl calls just store the
qgroupid without any opeartion with level. is the level meaningless in
kernel?
The quota groups are hierarchical and the level denotes the level, where
0/subvolid is the lowest always attached to a subvolume and the higher
levels are artificial and may contain any qgroups and do the whole
accounting on the subtree. The original design doc .pdf can be found in
https://git.kernel.org/pub/scm/linux/kernel/git/arne/qgroups-doc.git/tree/
Thanks for detailed description.
I'll write the new patch for checking level also.

Thanks,
Sidong
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help