linux/drivers/infiniband/hw/mthca
Kees Cook acafe7e302 treewide: Use struct_size() for kmalloc()-family
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 = kmalloc(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 = kmalloc(struct_size(instance, entry, count), GFP_KERNEL);

This patch makes the changes for kmalloc()-family (and kvmalloc()-family)
uses. It was done via automatic conversion with manual review for the
"CHECKME" non-standard cases noted below, using the following Coccinelle
script:

// pkey_cache = kmalloc(sizeof *pkey_cache + tprops->pkey_tbl_len *
//                      sizeof *pkey_cache->table, GFP_KERNEL);
@@
identifier alloc =~ "kmalloc|kzalloc|kvmalloc|kvzalloc";
expression GFP;
identifier VAR, ELEMENT;
expression COUNT;
@@

- alloc(sizeof(*VAR) + COUNT * sizeof(*VAR->ELEMENT), GFP)
+ alloc(struct_size(VAR, ELEMENT, COUNT), GFP)

// mr = kzalloc(sizeof(*mr) + m * sizeof(mr->map[0]), GFP_KERNEL);
@@
identifier alloc =~ "kmalloc|kzalloc|kvmalloc|kvzalloc";
expression GFP;
identifier VAR, ELEMENT;
expression COUNT;
@@

- alloc(sizeof(*VAR) + COUNT * sizeof(VAR->ELEMENT[0]), GFP)
+ alloc(struct_size(VAR, ELEMENT, COUNT), GFP)

// Same pattern, but can't trivially locate the trailing element name,
// or variable name.
@@
identifier alloc =~ "kmalloc|kzalloc|kvmalloc|kvzalloc";
expression GFP;
expression SOMETHING, COUNT, ELEMENT;
@@

- alloc(sizeof(SOMETHING) + COUNT * sizeof(ELEMENT), GFP)
+ alloc(CHECKME_struct_size(&SOMETHING, ELEMENT, COUNT), GFP)

Signed-off-by: Kees Cook <keescook@chromium.org>
2018-06-06 11:15:43 -07:00
..
Kconfig
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
mthca_allocator.c
mthca_av.c IB/mthca: Replace PCI pool old API 2017-08-22 13:59:46 -04:00
mthca_catas.c treewide: setup_timer() -> timer_setup() (2 field) 2017-11-21 15:57:09 -08:00
mthca_cmd.c RDMA/mthca: Make explicit conversion to 64bit value 2017-08-24 16:27:10 -04:00
mthca_cmd.h IB/core cleanup: Add const on args - device->process_mad 2015-06-02 09:33:13 -04:00
mthca_config_reg.h
mthca_cq.c IB: remove in-kernel support for memory windows 2015-12-23 14:29:04 -05:00
mthca_dev.h IB/mthca: Replace PCI pool old API 2017-08-22 13:59:46 -04:00
mthca_doorbell.h
mthca_eq.c
mthca_mad.c Add OPA extended LID support 2017-08-18 14:47:37 -04:00
mthca_main.c IB/mthca: Fix indentation 2017-10-14 20:47:06 -04:00
mthca_mcg.c
mthca_memfree.c treewide: Use struct_size() for kmalloc()-family 2018-06-06 11:15:43 -07:00
mthca_memfree.h
mthca_mr.c
mthca_pd.c
mthca_profile.c IB/mthca: use swap() in mthca_make_profile() 2015-06-11 01:10:59 -04:00
mthca_profile.h
mthca_provider.c IB/uverbs: Extend uverbs_ioctl header with driver_id 2018-03-19 14:45:17 -06:00
mthca_provider.h
mthca_qp.c IB/core: Define 'ib' and 'roce' rdma_ah_attr types 2017-05-01 14:32:43 -04:00
mthca_reset.c IB/mthca: Remove debug prints after allocation failure 2016-12-03 13:12:52 -05:00
mthca_srq.c
mthca_uar.c
mthca_wqe.h