Thread (7 messages) flat view 7 messages, 4 authors, 2021-09-19

RE: [PATCH] net: mana: Prefer struct_size over open coded arithmetic

From: Haiyang Zhang <haiyangz@microsoft.com>
Date: 2021-09-11 13:36:13
Also in: dri-devel, linux-hardening, linux-media, lkml, netdev

quoted hunk ↗ jump to hunk
-----Original Message-----
From: Len Baker <redacted>
Sent: Saturday, September 11, 2021 6:28 AM
To: KY Srinivasan <kys@microsoft.com>; Haiyang Zhang
[off-list ref]; Stephen Hemminger [off-list ref];
Wei Liu [off-list ref]; Dexuan Cui [off-list ref]; David S.
Miller [off-list ref]; Jakub Kicinski [off-list ref]; Sumit
Semwal [off-list ref]; Christian König
[off-list ref]; Kees Cook [off-list ref]
Cc: Len Baker <redacted>; Colin Ian King
[off-list ref]; linux-hardening@vger.kernel.org; linux-
hyperv@vger.kernel.org; netdev@vger.kernel.org; linux-
kernel@vger.kernel.org; linux-media@vger.kernel.org; dri-
devel@lists.freedesktop.org; linaro-mm-sig@lists.linaro.org
Subject: [PATCH] net: mana: Prefer struct_size over open coded
arithmetic

[Some people who received this message don't often get email from
len.baker@gmx.com. Learn why this is important at
http://aka.ms/LearnAboutSenderIdentification.]

As noted in the "Deprecated Interfaces, Language Features, Attributes,
and Conventions" documentation [1], size calculations (especially
multiplication) should not be performed in memory allocator (or similar)
function arguments due to the risk of them overflowing. This could lead
to values wrapping around and a smaller allocation being made than the
caller was expecting. Using those allocations could lead to linear
overflows of heap memory and other misbehaviors.

So, use the struct_size() helper to do the arithmetic instead of the
argument "size + count * size" in the kzalloc() function.

[1]
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ke
rnel.org%2Fdoc%2Fhtml%2Fv5.14%2Fprocess%2Fdeprecated.html%23open-coded-
arithmetic-in-allocator-
arguments&amp;data=04%7C01%7Chaiyangz%40microsoft.com%7C1bf83c1204a34dae
a6d308d9750eef16%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C6376695297
12931146%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJ
BTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=PbYpBtyYfVfwwlxWSQx%2FiARc9
mhb0J7bfD46%2F9q5oTw%3D&amp;reserved=0

Signed-off-by: Len Baker <redacted>
---
 drivers/net/ethernet/microsoft/mana/hw_channel.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/microsoft/mana/hw_channel.c
b/drivers/net/ethernet/microsoft/mana/hw_channel.c
index 1a923fd99990..0efdc6c3c32a 100644
--- a/drivers/net/ethernet/microsoft/mana/hw_channel.c
+++ b/drivers/net/ethernet/microsoft/mana/hw_channel.c
@@ -398,9 +398,7 @@ static int mana_hwc_alloc_dma_buf(struct
hw_channel_context *hwc, u16 q_depth,
        int err;
        u16 i;

-       dma_buf = kzalloc(sizeof(*dma_buf) +
-                         q_depth * sizeof(struct hwc_work_request),
-                         GFP_KERNEL);
+       dma_buf = kzalloc(struct_size(dma_buf, reqs, q_depth),
GFP_KERNEL);
Thanks!

Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help