lib: net_utils: make string_to_ip stricter
authorChris Packham <judge.packham@gmail.com>
Wed, 4 Jan 2017 00:36:25 +0000 (13:36 +1300)
committerTom Rini <trini@konsulko.com>
Sat, 14 Jan 2017 21:47:11 +0000 (16:47 -0500)
Previously values greater than 255 were implicitly truncated. Add some
stricter checking to reject addresses with components >255.

With the input "1234192.168.1.1" the old behaviour would truncate the
address to 192.168.1.1. New behaviour rejects the string outright and
returns 0.0.0.0, which for the purposes of IP addresses can be
considered an error.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
lib/net_utils.c

index cfae842752414ebb7a24d3ed5229245a114e02da..8f81e78010333bb96987febcb874dc74ac7e32c8 100644 (file)
@@ -24,6 +24,10 @@ struct in_addr string_to_ip(const char *s)
 
        for (addr.s_addr = 0, i = 0; i < 4; ++i) {
                ulong val = s ? simple_strtoul(s, &e, 10) : 0;
+               if (val > 255) {
+                       addr.s_addr = 0;
+                       return addr;
+               }
                addr.s_addr <<= 8;
                addr.s_addr |= (val & 0xFF);
                if (s) {