diff mbox

[U-Boot,v2,1/2] lib: net_utils: make string_to_ip stricter

Message ID 20170104003626.4211-1-judge.packham@gmail.com
State Accepted
Commit d921ed9a2a553afe0c13638ed339ee42d4572935
Delegated to: Tom Rini
Headers show

Commit Message

Chris Packham Jan. 4, 2017, 12:36 a.m. UTC
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>
---
This was part of my long running IPv6 patchset (which I promise I'll get
back to someday). But I feel this stands on it's own merits.

Changes in v2:
- split into 2 patches

 lib/net_utils.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Wolfgang Denk Jan. 4, 2017, 10:04 a.m. UTC | #1
Dear Chris,

In message <20170104003626.4211-1-judge.packham@gmail.com> you wrote:
> 
> 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.

Does code that calls string_to_ip() check for such an error
condition?

Best regards,

Wolfgang Denk
Chris Packham Jan. 5, 2017, 7:58 a.m. UTC | #2
Hi Wolfgang,

On Wed, Jan 4, 2017 at 11:04 PM, Wolfgang Denk <wd@denx.de> wrote:
> Dear Chris,
>
> In message <20170104003626.4211-1-judge.packham@gmail.com> you wrote:
>>
>> 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.
>
> Does code that calls string_to_ip() check for such an error
> condition?
>

It does by virtue of the fact that it will consider the global
variables for the various ip addresses unset and complain.
Tom Rini Jan. 15, 2017, 6:30 p.m. UTC | #3
On Wed, Jan 04, 2017 at 01:36:25PM +1300, Chris Packham wrote:

> 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>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/lib/net_utils.c b/lib/net_utils.c
index cfae84275241..8f81e7801033 100644
--- a/lib/net_utils.c
+++ b/lib/net_utils.c
@@ -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) {