Search Linux Wireless

Re: [PATCH v2] wifi: ipw2x00: convert ipw_fw_error->elem to flexible array[]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jacob Keller <jacob.e.keller@xxxxxxxxx> wrote:

> The ipw_fw_error structure contains a payload[] flexible array as well as
> two pointers to this array area, ->elem, and ->log. The total size of the
> allocated structure is computed without use of the <linux/overflow.h>
> macros.
> 
> There's no reason to keep both a payload[] and an extra pointer to both the
> elem and log members. Convert the elem pointer member into the flexible
> array member, removing payload.
> 
> Fix the allocation of the ipw_fw_error structure to use size_add(),
> struct_size(), and array_size() to compute the allocation. This ensures
> that any overflow saturates at SIZE_MAX rather than overflowing and
> potentially allowing an undersized allocation.
> 
> Before the structure change, the layout of ipw_fw_error was:
> 
> struct ipw_fw_error {
>         long unsigned int          jiffies;              /*     0     8 */
>         u32                        status;               /*     8     4 */
>         u32                        config;               /*    12     4 */
>         u32                        elem_len;             /*    16     4 */
>         u32                        log_len;              /*    20     4 */
>         struct ipw_error_elem *    elem;                 /*    24     8 */
>         struct ipw_event *         log;                  /*    32     8 */
>         u8                         payload[];            /*    40     0 */
> 
>         /* size: 40, cachelines: 1, members: 8 */
>         /* last cacheline: 40 bytes */
> };
> 
> After this change, the layout is now:
> 
> struct ipw_fw_error {
>         long unsigned int          jiffies;              /*     0     8 */
>         u32                        status;               /*     8     4 */
>         u32                        config;               /*    12     4 */
>         u32                        elem_len;             /*    16     4 */
>         u32                        log_len;              /*    20     4 */
>         struct ipw_event *         log;                  /*    24     8 */
>         struct ipw_error_elem      elem[];               /*    32     0 */
> 
>         /* size: 32, cachelines: 1, members: 7 */
>         /* last cacheline: 32 bytes */
> };
> 
> This saves a total of 8 bytes for every ipw_fw_error allocation, and
> removes the risk of a potential overflow on the allocation.
> 
> Signed-off-by: Jacob Keller <jacob.e.keller@xxxxxxxxx>
> Cc: Stanislav Yakovlev <stas.yakovlev@xxxxxxxxx>

Patch applied to wireless-next.git, thanks.

a23c82e006db wifi: ipw2x00: convert ipw_fw_error->elem to flexible array[]

-- 
https://patchwork.kernel.org/project/linux-wireless/patch/20230307230148.3735684-1-jacob.e.keller@xxxxxxxxx/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux