[PATCH v2 1/2] net: eth-uclass: Fix eth_halt
qianfanguijin at 163.com
qianfanguijin at 163.com
Sat Apr 2 04:58:35 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, touch it will trigger data abort.
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 | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/net/eth-uclass.c b/net/eth-uclass.c
index 0da0e85be0..2b88b6c145 100644
--- a/net/eth-uclass.c
+++ b/net/eth-uclass.c
@@ -339,8 +339,15 @@ void eth_halt(void)
return;
eth_get_ops(current)->stop(current);
- priv->state = ETH_STATE_PASSIVE;
- priv->running = false;
+
+ /* ethernet device maybe removed when @stop handler, that will cause
+ * @priv is freed. get private data again to avoid it
+ */
+ priv = dev_get_uclass_priv(current);
+ if (priv) {
+ priv->state = ETH_STATE_PASSIVE;
+ priv->running = false;
+ }
}
int eth_is_active(struct udevice *dev)
--
2.17.1
More information about the U-Boot
mailing list