[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <871qbj8mg4.fsf@waldekranz.com>
Date: Mon, 18 Dec 2023 18:11:55 +0100
From: Tobias Waldekranz <tobias@...dekranz.com>
To: Andrew Lunn <andrew@...n.ch>
Cc: davem@...emloft.net, kuba@...nel.org, linux@...linux.org.uk,
kabel@...nel.org, hkallweit1@...il.com, robh+dt@...nel.org,
krzysztof.kozlowski+dt@...aro.org, conor+dt@...nel.org,
netdev@...r.kernel.org, devicetree@...r.kernel.org
Subject: Re: [PATCH net-next 1/4] net: phy: marvell10g: Support firmware
loading on 88X3310
On fre, dec 15, 2023 at 15:30, Andrew Lunn <andrew@...n.ch> wrote:
> On Thu, Dec 14, 2023 at 09:14:39PM +0100, Tobias Waldekranz wrote:
>> When probing, if a device is waiting for firmware to be loaded into
>> its RAM, ask userspace for the binary and load it over XMDIO.
>
> Does a device without firmware have valid ID registers? Is the driver
> going to probe via bus enumeration, or is it necessary to use a
> compatible with ID values?
>
>> + for (sect = fw->data; (sect + sizeof(hdr)) < (fw->data + fw->size);) {
>
> This validates that the firmware is big enough to hold the header...
>
>> + memcpy(&hdr, sect, sizeof(hdr));
>> + hdr.data.size = cpu_to_le32(hdr.data.size);
>> + hdr.data.addr = cpu_to_le32(hdr.data.addr);
>> + hdr.data.csum = cpu_to_le16(hdr.data.csum);
>> + hdr.next_hdr = cpu_to_le32(hdr.next_hdr);
>
> I'm surprised sparse is not complaining about this. You have the same
> source and destination, and sparse probably wants the destination to
> be marked as little endian.
>
>> + hdr.csum = cpu_to_le16(hdr.csum);
>> +
>> + for (i = 0, csum = 0; i < offsetof(struct mv3310_fw_hdr, csum); i++)
>> + csum += sect[i];
>> +
>> + if ((u16)~csum != hdr.csum) {
>> + dev_err(&phydev->mdio.dev, "Corrupt section header\n");
>> + err = -EINVAL;
>> + break;
>> + }
>> +
>> + err = mv3310_load_fw_sect(phydev, &hdr, sect + sizeof(hdr));
>
> What i don't see is any validation that the firmware left at sect +
> sizeof(hdr) big enough to contain hdr.data.size bytes.
>
Thanks Andrew and Russel, for the review!
You both make valid points, I'll try to be less clever about this whole
section in v2.
Powered by blists - more mailing lists