From: sashiko-bot@kernel.org
To: "Ciprian Regus via B4 Relay"
<devnull+ciprian.regus.analog.com@kernel.org>
Cc: conor+dt@kernel.org, devicetree@vger.kernel.org, robh@kernel.org
Subject: Re: [PATCH net-next v3 02/13] net: ethernet: oa_tc6: Handle the OA TC6 SPI protected mode
Date: Fri, 05 Jun 2026 16:33:10 +0000 [thread overview]
Message-ID: <20260605163311.890081F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260604-adin1140-driver-v3-2-5debdb3173c4@analog.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] The `size` parameter in `oa_tc6_check_ctrl_write_reply()` is typed as `u8`, causing integer truncation for SPI transfer sizes of 256 bytes or more. This leads to an underflow in the `memcmp` length calculation, resulting in a massive out-of-bounds memory read and kernel panic.
--
commit afec089ed8ebeec6d0ad251fec33bc20cdb36a86
Author: Ciprian Regus <ciprian.regus@analog.com>
net: ethernet: oa_tc6: Handle the OA TC6 SPI protected mode
This commit implements the OA TC6 standard defined protected mode for
control transactions. It handles 1's complement values of the data field
in SPI transfer frames for integrity checking.
> diff --git a/drivers/net/ethernet/oa_tc6.c b/drivers/net/ethernet/oa_tc6.c
> index 91a906a7918a2..baba5aad84dfa 100644
> --- a/drivers/net/ethernet/oa_tc6.c
> +++ b/drivers/net/ethernet/oa_tc6.c
[ ... ]
> @@ -283,10 +320,10 @@ static int oa_tc6_perform_ctrl(struct oa_tc6 *tc6, u32 address, u32 value[],
> u16 size;
> int ret;
>
> - /* Prepare control command and copy to SPI control buffer */
> - oa_tc6_prepare_ctrl_spi_buf(tc6, address, value, length, reg_op);
> + size = oa_tc6_calculate_ctrl_buf_size(length, tc6->prot_ctrl);
>
> - size = oa_tc6_calculate_ctrl_buf_size(length);
> + /* Prepare control command and copy to SPI control buffer */
> + oa_tc6_prepare_ctrl_spi_buf(tc6, address, value, length, reg_op, size);
>
> /* Perform SPI transfer */
> ret = oa_tc6_spi_transfer(tc6, OA_TC6_CTRL_HEADER, size);
[ ... ]
> @@ -301,7 +338,7 @@ static int oa_tc6_perform_ctrl(struct oa_tc6 *tc6, u32 address, u32 value[],
> return oa_tc6_check_ctrl_write_reply(tc6, size);
[Severity: High]
This is a pre-existing issue, but does passing the u16 size to
oa_tc6_check_ctrl_write_reply() lead to an integer truncation here?
Looking at the function signature, oa_tc6_check_ctrl_write_reply() takes
size as a u8:
static int oa_tc6_check_ctrl_write_reply(struct oa_tc6 *tc6, u8 size)
Since oa_tc6_calculate_ctrl_buf_size() computes a size up to 1032 bytes in
protected mode, any value of 256 or more will be truncated when implicitly
cast to a u8.
If a write sequence results in a buffer size that truncates to a value
less than OA_TC6_CTRL_IGNORED_SIZE (4 bytes), could the subtraction in
the integrity check underflow?
static int oa_tc6_check_ctrl_write_reply(struct oa_tc6 *tc6, u8 size)
{
...
if (memcmp(tx_buf, rx_buf, size - OA_TC6_CTRL_IGNORED_SIZE))
return -EPROTO;
}
For example, if the calculated size is exactly 256 bytes (which can
happen when writing 31 registers in protected mode), the truncated
size becomes 0.
The subtraction 0 - 4 results in -4, which becomes SIZE_MAX - 3 when
passed as the size_t parameter to memcmp(), resulting in an
out-of-bounds read and likely a kernel panic.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260604-adin1140-driver-v3-0-5debdb3173c4@analog.com?part=2
next prev parent reply other threads:[~2026-06-05 16:33 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-04 16:32 [PATCH net-next v3 00/13] net: Add ADIN1140 support Ciprian Regus via B4 Relay
2026-06-04 16:32 ` [PATCH net-next v3 01/13] dt-bindings: net: Add ADIN1140 Ciprian Regus via B4 Relay
2026-06-04 16:39 ` Conor Dooley
2026-06-04 16:32 ` [PATCH net-next v3 02/13] net: ethernet: oa_tc6: Handle the OA TC6 SPI protected mode Ciprian Regus via B4 Relay
2026-06-05 16:33 ` sashiko-bot [this message]
2026-06-04 16:32 ` [PATCH net-next v3 03/13] net: ethernet: oa_tc6: add OA_TC6_BROKEN_PHY quirk flag Ciprian Regus via B4 Relay
2026-06-05 16:33 ` sashiko-bot
2026-06-04 16:32 ` [PATCH net-next v3 04/13] net: ethernet: oa_tc6: Export the C45 access functions Ciprian Regus via B4 Relay
2026-06-05 16:33 ` sashiko-bot
2026-06-04 16:32 ` [PATCH net-next v3 05/13] net: ethernet: oa_tc6: Export standard defined registers Ciprian Regus via B4 Relay
2026-06-04 22:13 ` Andrew Lunn
2026-06-05 16:33 ` sashiko-bot
2026-06-04 16:32 ` [PATCH net-next v3 06/13] net: ethernet: oa_tc6: Add the OA_TC6_ prefix to standard registers Ciprian Regus via B4 Relay
2026-06-04 22:14 ` Andrew Lunn
2026-06-04 16:32 ` [PATCH net-next v3 07/13] net: ethernet: oa_tc6: Add read_mms/write_mms register access functions Ciprian Regus via B4 Relay
2026-06-04 22:19 ` Andrew Lunn
2026-06-04 22:21 ` Andrew Lunn
2026-06-04 16:32 ` [PATCH net-next v3 08/13] net: ethernet: oa_tc6: Use the read_mms/write_mms functions for C45 Ciprian Regus via B4 Relay
2026-06-04 22:23 ` Andrew Lunn
2026-06-04 16:32 ` [PATCH net-next v3 09/13] net: ethernet: oa_tc6: Add new register address defines Ciprian Regus via B4 Relay
2026-06-04 22:31 ` Andrew Lunn
2026-06-04 16:32 ` [PATCH net-next v3 10/13] net: phy: add generic helpers for direct C45 MMD access Ciprian Regus via B4 Relay
2026-06-04 16:32 ` [PATCH net-next v3 11/13] net: phy: microchip-t1s: use generic C45 MMD access helpers Ciprian Regus via B4 Relay
2026-06-04 16:32 ` [PATCH net-next v3 12/13] net: phy: Add support for the ADIN1140 PHY Ciprian Regus via B4 Relay
2026-06-04 16:32 ` [PATCH net-next v3 13/13] net: ethernet: adi: Add a driver for the ADIN1140 MACPHY Ciprian Regus via B4 Relay
2026-06-04 22:36 ` Andrew Lunn
2026-06-05 16:33 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260605163311.890081F00893@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=devnull+ciprian.regus.analog.com@kernel.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox