NET: Fix system hanging if NET device is not installed
authorJim Lin <jilin@nvidia.com>
Fri, 17 May 2013 09:41:03 +0000 (17:41 +0800)
committerJae-young Hwang <j-zero.hwang@samsung.com>
Mon, 18 Jan 2016 12:46:07 +0000 (21:46 +0900)
If we try to boot from NET device, NetInitLoop in net.c will be invoked.
If NET device is not installed, eth_get_dev() function will return
eth_current value, which is NULL.
When NetInitLoop is called, "eth_get_dev->enetaddr" will access
restricted memory area and therefore cause hanging.
This issue is found on Tegra30 Cardhu platform after adding
CONFIG_CMD_NET and CONFIG_CMD_DHCP in config header file.

Change-Id: I8bf18901842043f33a06c96ab5201c406fe0f605
Signed-off-by: Jim Lin <jilin@nvidia.com>
Tested-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Jae-young Hwang <j-zero.hwang@samsung.com>
net/net.c

index e8ff0662b8858f313f769e26c134c1e93d5bd10e..ea8ac4772893b054c23cc12ae2d390280922b651 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -256,7 +256,8 @@ static void NetInitLoop(void)
 #endif
                env_changed_id = env_id;
        }
-       memcpy(NetOurEther, eth_get_dev()->enetaddr, 6);
+       if (eth_get_dev())
+               memcpy(NetOurEther, eth_get_dev()->enetaddr, 6);
 
        return;
 }