- U-boot's PXE flow supports prefixing your bootfile name with an
  IP address to fetch from a server other than the DHCP server,
  e.g. `hostIPaddr:bootfilename`:
  
https://github.com/u-boot/u-boot/commit/a93907c43f847f076dd0e34ee3b69b5e8e6d0d29
- However, this breaks bootfile paths which contain a colon, e.g.
  `f0:ad:4e:10:1b:87/7/pxelinux.cfg/default`
- This patch checks whether the `hostIPaddr` prefix is a valid
  IP address before overriding the serverIP otherwise the whole
  bootfile path is preserved

Signed-off-by: Lyle Franklin <lylejfrank...@gmail.com>
---
 net/net.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/net/net.c b/net/net.c
index 072a82d8f9..034a5d6e67 100644
--- a/net/net.c
+++ b/net/net.c
@@ -1538,14 +1538,19 @@ int is_serverip_in_cmd(void)
 int net_parse_bootfile(struct in_addr *ipaddr, char *filename, int max_len)
 {
        char *colon;
+       struct in_addr ip;
+       ip.s_addr = 0;
 
        if (net_boot_file_name[0] == '\0')
                return 0;
 
        colon = strchr(net_boot_file_name, ':');
        if (colon) {
-               if (ipaddr)
-                       *ipaddr = string_to_ip(net_boot_file_name);
+               ip = string_to_ip(net_boot_file_name);
+               if (ipaddr && ip.s_addr)
+                       *ipaddr = ip;
+       }
+       if (ip.s_addr) {
                strncpy(filename, colon + 1, max_len);
        } else {
                strncpy(filename, net_boot_file_name, max_len);
-- 
2.35.3

Reply via email to