Message ID | 20190108160233.GA20222@embeddedor (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Mike Snitzer |
Headers | show |
Series | dm-switch: use struct_size() in kzalloc() | expand |
Hi all, Friendly ping: Who can take this? Thanks -- Gustavo On 1/8/19 10:02 AM, 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 <gustavo@embeddedor.com> > --- > drivers/md/dm-switch.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/md/dm-switch.c b/drivers/md/dm-switch.c > index fae35caf3672..8a0f057b8122 100644 > --- a/drivers/md/dm-switch.c > +++ b/drivers/md/dm-switch.c > @@ -61,8 +61,7 @@ static struct switch_ctx *alloc_switch_ctx(struct dm_target *ti, unsigned nr_pat > { > struct switch_ctx *sctx; > > - sctx = kzalloc(sizeof(struct switch_ctx) + nr_paths * sizeof(struct switch_path), > - GFP_KERNEL); > + sctx = kzalloc(struct_size(sctx, path_list, nr_paths), GFP_KERNEL); > if (!sctx) > return NULL; > > -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel
On Thu, Feb 21 2019 at 10:27am -0500, Gustavo A. R. Silva <gustavo@embeddedor.com> wrote: > Hi all, > > Friendly ping: > > Who can take this? I've picked it up for 5.1: https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git/commit/?h=dm-5.1&id=042f96ad4c5a369307df2a840fd943a4b080c3d1 Thanks, Mike -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel
On 2/21/19 9:40 AM, Mike Snitzer wrote: > On Thu, Feb 21 2019 at 10:27am -0500, > Gustavo A. R. Silva <gustavo@embeddedor.com> wrote: > >> Hi all, >> >> Friendly ping: >> >> Who can take this? > > I've picked it up for 5.1: > https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git/commit/?h=dm-5.1&id=042f96ad4c5a369307df2a840fd943a4b080c3d1 > Great. :) Thank you, Mike. -- Gustavo -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel
diff --git a/drivers/md/dm-switch.c b/drivers/md/dm-switch.c index fae35caf3672..8a0f057b8122 100644 --- a/drivers/md/dm-switch.c +++ b/drivers/md/dm-switch.c @@ -61,8 +61,7 @@ static struct switch_ctx *alloc_switch_ctx(struct dm_target *ti, unsigned nr_pat { struct switch_ctx *sctx; - sctx = kzalloc(sizeof(struct switch_ctx) + nr_paths * sizeof(struct switch_path), - GFP_KERNEL); + sctx = kzalloc(struct_size(sctx, path_list, nr_paths), GFP_KERNEL); if (!sctx) return NULL;
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 <gustavo@embeddedor.com> --- drivers/md/dm-switch.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)