On 07-01-19, 11:33, Gustavo A. R. Silva wrote:
> One of the more common cases of allocation size calculations is finding the
> size of a structure that has a zero-sized array at the end, along with memory
> for some number of elements for that array. For example:
> 
> struct foo {
>     int stuff;
>     void *entry[];
> };
> 
> instance = kzalloc(sizeof(struct foo) + sizeof(void *) * count, GFP_KERNEL);
> 
> Instead of leaving these open-coded and prone to type mistakes, we can now
> use the new struct_size() helper:
> 
> instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);
> 
> This code was detected with the help of Coccinelle.
> 
> Signed-off-by: Gustavo A. R. Silva <gust...@embeddedor.com>
> ---
>  drivers/cpufreq/e_powersaver.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/cpufreq/e_powersaver.c b/drivers/cpufreq/e_powersaver.c
> index 60bea302abbe..2d3ef208dd70 100644
> --- a/drivers/cpufreq/e_powersaver.c
> +++ b/drivers/cpufreq/e_powersaver.c
> @@ -323,9 +323,8 @@ static int eps_cpu_init(struct cpufreq_policy *policy)
>               states = 2;
>  
>       /* Allocate private data and frequency table for current cpu */
> -     centaur = kzalloc(sizeof(*centaur)
> -                 + (states + 1) * sizeof(struct cpufreq_frequency_table),
> -                 GFP_KERNEL);
> +     centaur = kzalloc(struct_size(centaur, freq_table, states + 1),
> +                       GFP_KERNEL);
>       if (!centaur)
>               return -ENOMEM;
>       eps_cpu[0] = centaur;

Acked-by: Viresh Kumar <viresh.ku...@linaro.org>

-- 
viresh

Reply via email to