提交 e8e5752d 编写于 作者: K Krzysztof Halasa 提交者: David S. Miller

net: kernel BUG at drivers/net/phy/mdio_bus.c:165!

kernel BUG at drivers/net/phy/mdio_bus.c:165!
Unable to handle kernel NULL pointer dereference at virtual address 00000000

How?

mdiobus_alloc() sets bus->state = MDIOBUS_ALLOCATED.

mdiobus_register() sets bus->state = MDIOBUS_REGISTERED but then can
   fail (mdiobus_scan()) returning an error to the caller.

The caller aborts correctly with mdiobus_free() which does:
        if (bus->state == MDIOBUS_ALLOCATED) {
                kfree(bus);
                return;
        }

        BUG_ON(bus->state != MDIOBUS_UNREGISTERED);
Signed-off-by: NKrzysztof Halasa <khc@pm.waw.pl>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 9a3de255
......@@ -105,8 +105,6 @@ int mdiobus_register(struct mii_bus *bus)
return -EINVAL;
}
bus->state = MDIOBUS_REGISTERED;
mutex_init(&bus->mdio_lock);
if (bus->reset)
......@@ -123,6 +121,9 @@ int mdiobus_register(struct mii_bus *bus)
}
}
if (!err)
bus->state = MDIOBUS_REGISTERED;
pr_info("%s: probed\n", bus->name);
return err;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册