lkml.org 
[lkml]   [2020]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH] soc: fsl: qe: Replace one-element array and use struct_size() helper
    On Mon, May 18, 2020 at 5:16 PM Gustavo A. R. Silva
    <gustavoars@kernel.org> wrote:
    >
    > The current codebase makes use of one-element arrays in the following
    > form:
    >
    > struct something {
    > int length;
    > u8 data[1];
    > };
    >
    > struct something *instance;
    >
    > instance = kmalloc(sizeof(*instance) + size, GFP_KERNEL);
    > instance->length = size;
    > memcpy(instance->data, source, size);
    >
    > but the preferred mechanism to declare variable-length types such as
    > these ones is a flexible array member[1][2], introduced in C99:
    >
    > struct foo {
    > int stuff;
    > struct boo array[];
    > };
    >
    > By making use of the mechanism above, we will get a compiler warning
    > in case the flexible array does not occur last in the structure, which
    > will help us prevent some kind of undefined behavior bugs from being
    > inadvertently introduced[3] to the codebase from now on. So, replace
    > the one-element array with a flexible-array member.
    >
    > Also, make use of the new struct_size() helper to properly calculate the
    > size of struct qe_firmware.
    >
    > This issue was found with the help of Coccinelle and, audited and fixed
    > _manually_.
    >
    > [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
    > [2] https://github.com/KSPP/linux/issues/21
    > [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")
    >
    > Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    > ---
    > drivers/soc/fsl/qe/qe.c | 4 ++--
    > include/soc/fsl/qe/qe.h | 2 +-
    > 2 files changed, 3 insertions(+), 3 deletions(-)

    Applied for next. Thanks.

    Regards,
    Leo

    \
     
     \ /
      Last update: 2020-05-22 23:25    [W:4.471 / U:0.268 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site