Hello.

In device_probe function in drivers/core/device.c we see a call of probe 
function:

        if (drv->probe) {
                ret = drv->probe(dev);
                if (ret)
                        goto fail;
        }

If it returns an error, then the execution path goes to fail label and called 
device_free function:

fail:
        dev_bic_flags(dev, DM_FLAG_ACTIVATED);

        device_free(dev);

        return ret;

But the freed memory remains in use by mdio, because in enetc_probe function, 
enetc_start_pcs function is called, which registers mdio:

        struct enetc_priv *priv = dev_get_priv(dev);

                if (!miiphy_get_dev_by_name(priv->imdio.name))
                        mdio_register(&priv->imdio);


From: Ramon Fried <rfried....@gmail.com>
Sent: 03 September 2022 00:38
To: Siarhei Yasinski <siarhei.yasin...@sintecs.eu>
Cc: U-Boot Mailing List <u-boot@lists.denx.de>
Subject: Re: [PATCH v2] net: enetc: Fix use after free issue in fsl_enetc.c 
 
[EXTERNAL EMAIL] DO NOT CLICK links or attachments unless you recognise the 
sender and know the content is safe

On Fri, Sep 2, 2022 at 9:35 AM Siarhei Yasinski
<siarhei.yasin...@sintecs.eu> wrote:
>
> If ethernet connected to SFP, like this:
>
> &enetc_port0 {
>         phy-connection-type = "sgmii";
>         sfp = <&sfp0>;
>         managed = "in-band-status";
>         status = "okay";
> };
>
> Then enetc_config_phy returns -ENODEV and memory containing mdio interface is 
> freeing.
What do you mean freeing, can you describe the flow ?

Reply via email to