It turns out that my analysis of the error handling here was wrong.
When there's an error, we don't want to free the children, since it will be stack garbage. While we did fail to dereference it by setting devs to 0, we didn't fail to call free. We never failed to fail, it was the easiest thing to do.
This commit is contained in:
parent
78a117e6fa
commit
4e44ebfd93
@ -194,15 +194,15 @@ mlphy_service(xsc, mii, cmd)
|
||||
* See if there's another PHY on this bus with us.
|
||||
* If so, we may need it for 10Mbps modes.
|
||||
*/
|
||||
devs = 0;
|
||||
device_get_children(msc->ml_mii.mii_dev, &devlist, &devs);
|
||||
for (i = 0; i < devs; i++) {
|
||||
if (strcmp(device_get_name(devlist[i]), "mlphy")) {
|
||||
other = device_get_softc(devlist[i]);
|
||||
break;
|
||||
if (device_get_children(msc->ml_mii.mii_dev, &devlist, &devs) == 0) {
|
||||
for (i = 0; i < devs; i++) {
|
||||
if (strcmp(device_get_name(devlist[i]), "mlphy")) {
|
||||
other = device_get_softc(devlist[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
free(devlist, M_TEMP);
|
||||
}
|
||||
free(devlist, M_TEMP);
|
||||
|
||||
switch (cmd) {
|
||||
case MII_POLLSTAT:
|
||||
|
@ -162,9 +162,8 @@ tlphy_attach(device_t dev)
|
||||
sc->sc_mii.mii_pdata = mii;
|
||||
|
||||
capmask = 0xFFFFFFFF;
|
||||
if (mii->mii_instance) {
|
||||
devs = 0;
|
||||
device_get_children(sc->sc_mii.mii_dev, &devlist, &devs);
|
||||
if (mii->mii_instance &&
|
||||
device_get_children(sc->sc_mii.mii_dev, &devlist, &devs) == 0) {
|
||||
for (i = 0; i < devs; i++) {
|
||||
if (strcmp(device_get_name(devlist[i]), "tlphy")) {
|
||||
other = device_get_softc(devlist[i]);
|
||||
|
Loading…
Reference in New Issue
Block a user