Wang Shilong
2013-Feb-21 12:26 UTC
[PATCH] Btrfs-progs: fix parse_limit function to return errors when parsing unit
From: Wang Shilong <wangsl-fnst@cn.fujitsu.com> Steps to reproduce: btrfs qgroup limit m <mnt>/subv Here, unit(k/K/g/G/m/M/t/T) all will trigger the problem. For the above command, the original code will parse the limit value as 0 and return successfully.It is wrong,fix it. Signed-off-by: Wang Shilong <wangsl-fnst@cn.fujitsu.com> --- cmds-qgroup.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/cmds-qgroup.c b/cmds-qgroup.c index 1525c11..c75ef9b 100644 --- a/cmds-qgroup.c +++ b/cmds-qgroup.c @@ -214,6 +214,8 @@ static int parse_limit(const char *p, unsigned long long *s) { char *endptr; unsigned long long size; + int len = strlen(p); + int unit = 0; if (strcasecmp(p, "none") == 0) { *s = 0; @@ -232,6 +234,7 @@ static int parse_limit(const char *p, unsigned long long *s) size *= 1024; case ''K'': case ''k'': + unit = 1; size *= 1024; ++endptr; break; @@ -241,7 +244,11 @@ static int parse_limit(const char *p, unsigned long long *s) return 0; } - if (*endptr) + /* + * (len==1 && unit) means + * limit passed is like k,K,m,M,g,G,t,T. + */ + if (*endptr || (len == 1 && unit)) return 0; *s = size; -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
David Sterba
2013-Feb-27 15:52 UTC
Re: [PATCH] Btrfs-progs: fix parse_limit function to return errors when parsing unit
On Thu, Feb 21, 2013 at 08:26:15PM +0800, Wang Shilong wrote:> From: Wang Shilong <wangsl-fnst@cn.fujitsu.com> > > Steps to reproduce: > btrfs qgroup limit m <mnt>/subv > > Here, unit(k/K/g/G/m/M/t/T) all will trigger the problem. > For the above command, the original code will parse the limit value as 0 > and return successfully.It is wrong,fix it.I don''t think we should allow to accept bare units for specifing numbers, so in that case fail with ''unrecognized limit''. david -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Eric Sandeen
2013-Feb-27 15:58 UTC
Re: [PATCH] Btrfs-progs: fix parse_limit function to return errors when parsing unit
On 2/27/13 9:52 AM, David Sterba wrote:> On Thu, Feb 21, 2013 at 08:26:15PM +0800, Wang Shilong wrote: >> From: Wang Shilong <wangsl-fnst@cn.fujitsu.com> >> >> Steps to reproduce: >> btrfs qgroup limit m <mnt>/subv >> >> Here, unit(k/K/g/G/m/M/t/T) all will trigger the problem. >> For the above command, the original code will parse the limit value as 0 >> and return successfully.It is wrong,fix it. > > I don''t think we should allow to accept bare units for specifing > numbers, so in that case fail with ''unrecognized limit''.I agree with that. Maybe since David didn''t quite want to take my patch 01/17, and Zach thought we needed better code for it all, and Goffredo didn''t like the exit() from parse_size, and now this problem, we need a single, concerted effort to fix up size parsing. Who knew it was so hard? :) -Eric> david > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >-- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Shilong Wang
2013-Feb-28 14:18 UTC
Re: [PATCH] Btrfs-progs: fix parse_limit function to return errors when parsing unit
Hello, Eric, David 2013/2/27 Eric Sandeen <sandeen@redhat.com>:> On 2/27/13 9:52 AM, David Sterba wrote: >> On Thu, Feb 21, 2013 at 08:26:15PM +0800, Wang Shilong wrote: >>> From: Wang Shilong <wangsl-fnst@cn.fujitsu.com> >>> >>> Steps to reproduce: >>> btrfs qgroup limit m <mnt>/subv >>> >>> Here, unit(k/K/g/G/m/M/t/T) all will trigger the problem. >>> For the above command, the original code will parse the limit value as 0 >>> and return successfully.It is wrong,fix it. >> >> I don''t think we should allow to accept bare units for specifing >> numbers, so in that case fail with ''unrecognized limit''. > > I agree with that. > > Maybe since David didn''t quite want to take my patch 01/17, and Zach > thought we needed better code for it all, and Goffredo didn''t like > the exit() from parse_size, and now this problem, we need a single, > concerted effort to fix up size parsing.I Agre exit() should not be used in parse_size... But i don''t agree with Zach about better code for it... Maybe like this: int parse_size(const char *s, u64 * size).. Many places that use the function parse_size/parse_limit, they have to be corrected after change.... Thanks, Wang> > Who knew it was so hard? :) > > -Eric > >> david >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> >-- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html