From fd569c747ead69a5a6930d4cd6493e6d899a79df Mon Sep 17 00:00:00 2001 From: Peter Mamonov Date: Mon, 15 Jan 2018 14:32:31 +0300 Subject: lib: parse_area_spec: don't modify *start value if parse failed Signed-off-by: Peter Mamonov Signed-off-by: Sascha Hauer --- lib/misc.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'lib/misc.c') diff --git a/lib/misc.c b/lib/misc.c index 62ddd66779..7a1ac257f3 100644 --- a/lib/misc.c +++ b/lib/misc.c @@ -79,38 +79,42 @@ EXPORT_SYMBOL(strtoul_suffix); int parse_area_spec(const char *str, loff_t *start, loff_t *size) { char *endp; - loff_t end; + loff_t end, _start; if (!isdigit(*str)) return -1; - *start = strtoull_suffix(str, &endp, 0); + _start = strtoull_suffix(str, &endp, 0); str = endp; if (!*str) { /* beginning given, but no size, assume maximum size */ *size = ~0; - return 0; + goto success; } if (*str == '-') { /* beginning and end given */ end = strtoull_suffix(str + 1, NULL, 0); - if (end < *start) { + if (end < _start) { printf("end < start\n"); return -1; } - *size = end - *start + 1; - return 0; + *size = end - _start + 1; + goto success; } if (*str == '+') { /* beginning and size given */ *size = strtoull_suffix(str + 1, NULL, 0); - return 0; + goto success; } return -1; + +success: + *start = _start; + return 0; } EXPORT_SYMBOL(parse_area_spec); -- cgit v1.2.3