RE: [PATCH v3 2/3] RDMA/mana_ib: Prefer struct_size over open coded arithmetic

From: Long Li
Date: Mon Apr 08 2024 - 15:42:31 EST


> Subject: [PATCH v3 2/3] RDMA/mana_ib: Prefer struct_size over open coded
> arithmetic
>
> This is an effort to get rid of all multiplications from allocation functions in order to
> prevent integer overflows [1][2].
>
> As the "req" variable is a pointer to "struct mana_cfg_rx_steer_req_v2"
> and this structure ends in a flexible array:
>
> struct mana_cfg_rx_steer_req_v2 {
> [...]
> mana_handle_t indir_tab[] __counted_by(num_indir_entries); };
>
> the preferred way in the kernel is to use the struct_size() helper to do the
> arithmetic instead of the calculation "size + size * count" in the kzalloc() function.
>
> Moreover, use the "offsetof" helper to get the indirect table offset instead of the
> "sizeof" operator and avoid the open-coded arithmetic in pointers using the new
> flex member. This new structure member also allow us to remove the
> "req_indir_tab" variable since it is no longer needed.
>
> This way, the code is more readable and safer.
>
> This code was detected with the help of Coccinelle, and audited and modified
> manually.
>
> Link:
> https://www.ker/
> nel.org%2Fdoc%2Fhtml%2Flatest%2Fprocess%2Fdeprecated.html%23open-
> coded-arithmetic-in-allocator-
> arguments&data=05%7C02%7Clongli%40microsoft.com%7Cfcf2a410393a429633
> ca08dc56506b01%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63848
> 0150654917952%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQI
> joiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=2zSek
> zsyXsS1s9xw%2FwaSEl3h4s6AeiykFG4KiJLzXOc%3D&reserved=0 [1]
> Link:
> https://github.co/
> m%2FKSPP%2Flinux%2Fissues%2F160&data=05%7C02%7Clongli%40microsoft.co
> m%7Cfcf2a410393a429633ca08dc56506b01%7C72f988bf86f141af91ab2d7cd01
> 1db47%7C1%7C0%7C638480150654924997%7CUnknown%7CTWFpbGZsb3d8ey
> JWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C
> 0%7C%7C%7C&sdata=4pzQWVWVcIaeS07VgXY1I6%2FS%2FEFejUD4qv1D2Ouwf
> pA%3D&reserved=0 [2]
> Signed-off-by: Erick Archer <erick.archer@xxxxxxxxxxx>

Reviewed-by: Long Li <longli@xxxxxxxxxxxxx>