From: Foster Snowhill <forst@pen.gy>
To: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>
Cc: Georgi Valkov <gvalkov@gmail.com>,
Simon Horman <horms@kernel.org>, Oliver Neukum <oneukum@suse.com>,
netdev@vger.kernel.org, linux-usb@vger.kernel.org
Subject: [PATCH net v5 5/7] usbnet: ipheth: break up NCM header size computation
Date: Sun, 26 Jan 2025 00:54:07 +0100 [thread overview]
Message-ID: <20250125235409.3106594-6-forst@pen.gy> (raw)
In-Reply-To: <20250125235409.3106594-1-forst@pen.gy>
Originally, the total NCM header size was computed as the sum of two
vaguely labelled constants. While accurate, it wasn't particularly clear
where they were coming from.
Use sizes of existing NCM structs where available. Define the total
NDP16 size based on the maximum amount of DPEs that can fit into the
iOS-specific fixed-size header.
This change does not fix any particular issue. Rather, it introduces
intermediate constants that will simplify subsequent commits.
It should also make it clearer for the reader where the constant values
come from.
Cc: stable@vger.kernel.org # 6.5.x
Signed-off-by: Foster Snowhill <forst@pen.gy>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
---
v5:
No code changes. Moved patch closer in series to subsequent patch
"usbnet: ipheth: fix DPE OoB read", as that is when one of the
introduced preprocessor constants is first used. Added Cc to stable
and Reviewed-by Jakub tags.
v4: https://lore.kernel.org/netdev/20250105010121.12546-2-forst@pen.gy/
No code changes. Remove "Fixes" from the commit message, and clarify
the purpose/scope of the commit.
v3: https://lore.kernel.org/netdev/20241123235432.821220-1-forst@pen.gy/
* NDP16 header size is computed from max DPE count constant,
not the other way around.
* Split out from a monolithic patch in v2.
v2: https://lore.kernel.org/netdev/20240912211817.1707844-1-forst@pen.gy/
No code changes. Update commit message to further clarify that
`ipheth` is not and does not aim to be a complete or spec-compliant
CDC NCM implementation.
v1: https://lore.kernel.org/netdev/20240907230108.978355-1-forst@pen.gy/
---
drivers/net/usb/ipheth.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
index 069979e2bb6e..03249208612e 100644
--- a/drivers/net/usb/ipheth.c
+++ b/drivers/net/usb/ipheth.c
@@ -61,7 +61,18 @@
#define IPHETH_USBINTF_PROTO 1
#define IPHETH_IP_ALIGN 2 /* padding at front of URB */
-#define IPHETH_NCM_HEADER_SIZE (12 + 96) /* NCMH + NCM0 */
+/* On iOS devices, NCM headers in RX have a fixed size regardless of DPE count:
+ * - NTH16 (NCMH): 12 bytes, as per CDC NCM 1.0 spec
+ * - NDP16 (NCM0): 96 bytes, of which
+ * - NDP16 fixed header: 8 bytes
+ * - maximum of 22 DPEs (21 datagrams + trailer), 4 bytes each
+ */
+#define IPHETH_NDP16_MAX_DPE 22
+#define IPHETH_NDP16_HEADER_SIZE (sizeof(struct usb_cdc_ncm_ndp16) + \
+ IPHETH_NDP16_MAX_DPE * \
+ sizeof(struct usb_cdc_ncm_dpe16))
+#define IPHETH_NCM_HEADER_SIZE (sizeof(struct usb_cdc_ncm_nth16) + \
+ IPHETH_NDP16_HEADER_SIZE)
#define IPHETH_TX_BUF_SIZE ETH_FRAME_LEN
#define IPHETH_RX_BUF_SIZE_LEGACY (IPHETH_IP_ALIGN + ETH_FRAME_LEN)
#define IPHETH_RX_BUF_SIZE_NCM 65536
--
2.45.1
next prev parent reply other threads:[~2025-01-25 23:55 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-25 23:54 [PATCH net v5 0/7] usbnet: ipheth: prevent OoB reads of NDP16 Foster Snowhill
2025-01-25 23:54 ` [PATCH net v5 1/7] usbnet: ipheth: fix possible overflow in DPE length check Foster Snowhill
2025-01-25 23:54 ` [PATCH net v5 2/7] usbnet: ipheth: check that DPE points past NCM header Foster Snowhill
2025-01-25 23:54 ` [PATCH net v5 3/7] usbnet: ipheth: use static NDP16 location in URB Foster Snowhill
2025-01-25 23:54 ` [PATCH net v5 4/7] usbnet: ipheth: refactor NCM datagram loop Foster Snowhill
2025-01-25 23:54 ` Foster Snowhill [this message]
2025-01-25 23:54 ` [PATCH net v5 6/7] usbnet: ipheth: fix DPE OoB read Foster Snowhill
2025-01-25 23:54 ` [PATCH net v5 7/7] usbnet: ipheth: document scope of NCM implementation Foster Snowhill
2025-01-26 11:19 ` [PATCH net v5 0/7] usbnet: ipheth: prevent OoB reads of NDP16 Bjørn Mork
2025-01-26 13:44 ` Foster Snowhill
2025-01-28 11:20 ` patchwork-bot+netdevbpf
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=20250125235409.3106594-6-forst@pen.gy \
--to=forst@pen.gy \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gvalkov@gmail.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=oneukum@suse.com \
--cc=pabeni@redhat.com \
/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