• Jerome Marchand's avatar
    dm table: don't copy from a NULL pointer in realloc_argv() · 929f7f16
    Jerome Marchand authored
    [ Upstream commit a0651926 ]
    
    For the first call to realloc_argv() in dm_split_args(), old_argv is
    NULL and size is zero. Then memcpy is called, with the NULL old_argv
    as the source argument and a zero size argument. AFAIK, this is
    undefined behavior and generates the following warning when compiled
    with UBSAN on ppc64le:
    
    In file included from ./arch/powerpc/include/asm/paca.h:19,
                     from ./arch/powerpc/include/asm/current.h:16,
                     from ./include/linux/sched.h:12,
                     from ./include/linux/kthread.h:6,
                     from drivers/md/dm-core.h:12,
                     from drivers/md/dm-table.c:8:
    In function 'memcpy',
        inlined from 'realloc_argv' at drivers/md/dm-table.c:565:3,
        inlined from 'dm_split_args' at drivers/md/dm-table.c:588:9:
    ./include/linux/string.h:345:9: error: argument 2 null where non-null expected [-Werror=nonnull]
      return __builtin_memcpy(p, q, size);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/md/dm-table.c: In function 'dm_split_args':
    ./include/linux/string.h:345:9: note: in a call to built-in function '__builtin_memcpy'
    Signed-off-by: default avatarJerome Marchand <jmarchan@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    929f7f16
dm-table.c 50.3 KB