Re: [PATCH] reiserfs: avoid a -Wmaybe-uninitialized warning

From: Jan Kara
Date: Thu Mar 23 2017 - 14:26:11 EST


On Thu 23-03-17 16:06:13, Arnd Bergmann wrote:
> The latest gcc-7.0.1 snapshot warns about an unintialized variable use:
>
> In file included from fs/reiserfs/lbalance.c:8:0:
> fs/reiserfs/lbalance.c: In function 'leaf_item_bottle.isra.3':
> fs/reiserfs/reiserfs.h:1279:13: error: '*((void *)&n_ih+8).v' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> v2->v = (v2->v & cpu_to_le64(15ULL << 60)) | cpu_to_le64(offset);
> ~~^~~
> fs/reiserfs/reiserfs.h:1279:13: error: '*((void *)&n_ih+8).v' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> v2->v = (v2->v & cpu_to_le64(15ULL << 60)) | cpu_to_le64(offset);
>
> This happens because the offset/type pair that is stored in
> ih.key.u.k_offset_v2 is actually uninitialized when we call
> set_le_ih_k_offset() and set_le_ih_k_type(). After we have called both,
> all data is correct, but the first of the two reads uninitialized data
> for the type field and writes it back before it gets overwritten.
>
> This works around the warning by initializing the k_offset_v2 through
> the slightly larger memcpy().
>
> Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>

Thanks. I've queued up slightly updated patch (attached).

Honza

> ---
> fs/reiserfs/lbalance.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/reiserfs/lbalance.c b/fs/reiserfs/lbalance.c
> index 249594a821e0..8eed8f5f6881 100644
> --- a/fs/reiserfs/lbalance.c
> +++ b/fs/reiserfs/lbalance.c
> @@ -475,7 +475,7 @@ static void leaf_item_bottle(struct buffer_info *dest_bi,
> * 'cpy_bytes'; create new item header;
> * n_ih = new item_header;
> */
> - memcpy(&n_ih, ih, SHORT_KEY_SIZE);
> + memcpy(&n_ih, ih, KEY_SIZE);
>
> /* Endian safe, both le */
> n_ih.ih_version = ih->ih_version;
> --
> 2.9.0
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR