Search Linux Wireless

Re: [PATCH] wifi: p54: Annotate struct p54_cal_database with __counted_by

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

 



On Mon, Oct 09, 2023 at 10:55:32AM -0400, Jason Andryuk wrote:
> This is the function that creates struct p54_cal_database:
> 
> static struct p54_cal_database *p54_convert_db(struct pda_custom_wrapper *src,
>                                                size_t total_len)
> {
>         struct p54_cal_database *dst;
>         size_t payload_len, entries, entry_size, offset;
> 
>         payload_len = le16_to_cpu(src->len);
>         entries = le16_to_cpu(src->entries);
>         entry_size = le16_to_cpu(src->entry_size);
>         offset = le16_to_cpu(src->offset);
>         if (((entries * entry_size + offset) != payload_len) ||
>              (payload_len + sizeof(*src) != total_len))
>                 return NULL;
> 
>         dst = kmalloc(sizeof(*dst) + payload_len, GFP_KERNEL);
>         if (!dst)
>                 return NULL;
> 
>         dst->entries = entries;
>         dst->entry_size = entry_size;
>         dst->offset = offset;
>         dst->len = payload_len;
> 
>         memcpy(dst->data, src->data, payload_len);
>         return dst;
> }
> 
> You can see that kmalloc is performed with `sizeof(*dst) +
> payload_len`, and payload_len is assigned to ->len.
> 
> I don't read Coccinelle, but, if this patch was auto-generated, I
> wonder if the script has an error.

It seems that my Coccinelle script got confused by this:

p54_convert_output_limits():

        priv->output_limit = kmalloc(data[1] *
                sizeof(struct pda_channel_output_limit) +
                sizeof(*priv->output_limit), GFP_KERNEL);

	...

        priv->output_limit->entry_size =
                sizeof(struct pda_channel_output_limit);
        priv->output_limit->len = priv->output_limit->entry_size *
                                  priv->output_limit->entries +
                                  priv->output_limit->offset;

It thought "sizeof(struct pda_channel_output_limit)" was the element
count, since it wasn't able to identify the array member here.

Regardless, I've sent a v2 now. :)

-- 
Kees Cook



[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