On Wed, Aug 28, 2019 at 01:30:24PM -0500, Gustavo A. R. Silva wrote:
> Hi all,
> 
> Friendly ping:
> 
> Who can take this, please?
> 
> Thanks
> --
> Gustavo
> 
> On 6/10/19 4:06 PM, 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 nd_region {
> >     ...
> >         struct nd_mapping mapping[0];
> > };
> > 
> > instance = kzalloc(sizeof(struct nd_region) + sizeof(struct nd_mapping) *
> >                           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, mapping, count), GFP_KERNEL);
> > 
> > This code was detected with the help of Coccinelle.
> > 
> > Signed-off-by: Gustavo A. R. Silva <gust...@embeddedor.com>

FWIW,

Reviewed-by: Kees Cook <keesc...@chromium.org>

-Kees

> > ---
> >  drivers/nvdimm/region_devs.c | 7 +++----
> >  1 file changed, 3 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
> > index b4ef7d9ff22e..88becc87e234 100644
> > --- a/drivers/nvdimm/region_devs.c
> > +++ b/drivers/nvdimm/region_devs.c
> > @@ -1027,10 +1027,9 @@ static struct nd_region *nd_region_create(struct 
> > nvdimm_bus *nvdimm_bus,
> >             }
> >             region_buf = ndbr;
> >     } else {
> > -           nd_region = kzalloc(sizeof(struct nd_region)
> > -                           + sizeof(struct nd_mapping)
> > -                           * ndr_desc->num_mappings,
> > -                           GFP_KERNEL);
> > +           nd_region = kzalloc(struct_size(nd_region, mapping,
> > +                                           ndr_desc->num_mappings),
> > +                               GFP_KERNEL);
> >             region_buf = nd_region;
> >     }
> >  
> > 

-- 
Kees Cook


Reply via email to