In the Linux kernel, the following vulnerability has been resolved:
net: mscc: ocelot: fix incorrect IFH SRCPORT field in ocelotifhsetbasic()
Packets injected by the CPU should have a SRCPORT field equal to the CPU port module index in the Analyzer block (ocelot->numphys_ports).
The blamed commit copied the ocelotifhsetbasic() call incorrectly from ocelotxmitcommon() in net/dsa/tagocelot.c. Instead of calling with "x", it calls with BIT_ULL(x), but the field is not a port mask, but rather a single port index.
[ side note: this is the technical debt of code duplication :( ]
The error used to be silent and doesn't appear to have other user-visible manifestations, but with new changes in the packing library, it now fails loudly as follows:
------------[ cut here ]------------ Cannot store 0x40 inside bits 46-43 - will truncate sja1105 spi2.0: xmit timed out WARNING: CPU: 1 PID: 102 at lib/packing.c:98 _pack+0x90/0x198 sja1105 spi2.0: timed out polling for tstamp CPU: 1 UID: 0 PID: 102 Comm: felixxmit Tainted: G W N 6.13.0-rc1-00372-gf706b85d972d-dirty #2605 Call trace: _pack+0x90/0x198 (P) _pack+0x90/0x198 (L) packing+0x78/0x98 ocelotifhsetbasic+0x260/0x368 ocelotportinjectframe+0xa8/0x250 felixportdeferredxmit+0x14c/0x258 kthreadworker_fn+0x134/0x350 kthread+0x114/0x138
The code path pertains to the ocelot switchdev driver and to the felix secondary DSA tag protocol, ocelot-8021q. Here seen with ocelot-8021q.
The messenger (packing) is not really to blame, so fix the original commit instead.