From: Anshul Garg <[email protected]>

1. While converting string representation to integer
break the loop if overflow is detected.
2. Clean kstrtoll function

Signed-off-by: Anshul Garg <[email protected]>
---
 lib/kstrtox.c |   28 +++++++++++++---------------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/lib/kstrtox.c b/lib/kstrtox.c
index ec8da78..8cbe5ca 100644
--- a/lib/kstrtox.c
+++ b/lib/kstrtox.c
@@ -70,8 +70,10 @@ unsigned int _parse_integer(const char *s, unsigned int 
base, unsigned long long
                 * it in the max base we support (16)
                 */
                if (unlikely(res & (~0ull << 60))) {
-                       if (res > div_u64(ULLONG_MAX - val, base))
+                       if (res > div_u64(ULLONG_MAX - val, base)) {
                                overflow = 1;
+                               break;
+                       }
                }
                res = res * base + val;
                rv++;
@@ -146,23 +148,19 @@ EXPORT_SYMBOL(kstrtoull);
 int kstrtoll(const char *s, unsigned int base, long long *res)
 {
        unsigned long long tmp;
-       int rv;
+       int rv, sign = 1;
 
        if (s[0] == '-') {
-               rv = _kstrtoull(s + 1, base, &tmp);
-               if (rv < 0)
-                       return rv;
-               if ((long long)(-tmp) >= 0)
-                       return -ERANGE;
-               *res = -tmp;
-       } else {
-               rv = kstrtoull(s, base, &tmp);
-               if (rv < 0)
-                       return rv;
-               if ((long long)tmp < 0)
-                       return -ERANGE;
-               *res = tmp;
+               sign = -1;
+               s++;
        }
+
+       rv = kstrtoull(s, base, &tmp);
+       if (rv < 0)
+               return rv;
+       if ((long long)tmp < 0)
+               return -ERANGE;
+       *res = sign * tmp;
        return 0;
 }
 EXPORT_SYMBOL(kstrtoll);
-- 
1.7.9.5


---
This email has been checked for viruses by Avast antivirus software.
http://www.avast.com

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to