[PATCH v2 1/2] net: eth-uclass: Fix eth_halt
qianfanguijin at 163.com
qianfanguijin at 163.com
Mon Mar 28 11:57:44 CEST 2022
From: qianfan Zhao <qianfanguijin at 163.com>
eth_device_priv maybe unaccessable after @stop handler due to eth device
is removed in @stop. Setting private data before @stop handler.
This also fix data abort bug when run dhcp or tftp command via usbnet.
Signed-off-by: qianfan Zhao <qianfanguijin at 163.com>
---
net/eth-uclass.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/net/eth-uclass.c b/net/eth-uclass.c
index 58c308f332..c6eb1bc8f8 100644
--- a/net/eth-uclass.c
+++ b/net/eth-uclass.c
@@ -338,9 +338,14 @@ void eth_halt(void)
if (!priv || !priv->running)
return;
- eth_get_ops(current)->stop(current);
- priv->state = ETH_STATE_PASSIVE;
+ /* Make sure setting private data before @stop handler, it may remove
+ * ethernet device and will cause @priv unaccessable.
+ * eg:
+ * usb_eth_stop -> usb_gadget_release -> device_remove
+ */
priv->running = false;
+
+ eth_get_ops(current)->stop(current);
}
int eth_is_active(struct udevice *dev)
--
2.17.1
More information about the U-Boot
mailing list