Re: + reiserfs-avoid-uninitialized-variable-use.patch added to -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri 27-05-16 13:31:50, Andrew Morton wrote:
> From: Arnd Bergmann <arnd@xxxxxxxx>
> Subject: reiserfs: avoid uninitialized variable use
> 
> I got this warning on an ARM64 allmodconfig build with gcc-5.3:
> 
> fs/reiserfs/ibalance.c: In function 'balance_internal':
> fs/reiserfs/ibalance.c:1158:3: error: 'new_insert_key' may be used uninitialized in this function [-Werror=maybe-uninitialized]
>    memcpy(new_insert_key_addr, &new_insert_key, KEY_SIZE);
> 
> The warning is correct, in fact both new_insert_key and new_insert_ptr are
> only updated inside of an if() block, but used at the end of the function.
> 
> Looking at how the balance_internal() function gets called, it is clear
> that this is harmless because the caller never uses the updated arrays,
> they are initialized from balance_leaf_new_nodes() and then passed into
> balance_internal().
> 
> This has not changed at all since the start of the git history, but
> apparently the warning has only recently appeared.
> 
> This modifies the function to only update the two argument variables when
> the new_insert_key and new_insert_ptr have been updated, to get rid of the
> warning.
> 
> Link: http://lkml.kernel.org/r/1464380569-3493380-1-git-send-email-arnd@xxxxxxxx
> Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
> Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx>
> Cc: Jan Kara <jack@xxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> ---
> 
>  fs/reiserfs/ibalance.c |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff -puN fs/reiserfs/ibalance.c~reiserfs-avoid-uninitialized-variable-use fs/reiserfs/ibalance.c
> --- a/fs/reiserfs/ibalance.c~reiserfs-avoid-uninitialized-variable-use
> +++ a/fs/reiserfs/ibalance.c
> @@ -1138,6 +1138,9 @@ int balance_internal(struct tree_balance
>  		       S_new);
>  
>  		/* S_new is released in unfix_nodes */
> +
> +		memcpy(new_insert_key_addr, &new_insert_key, KEY_SIZE);
> +		insert_ptr[0] = new_insert_ptr;
>  	}
>  
>  	n = B_NR_ITEMS(tbSh);	/*number of items in S[h] */
> @@ -1153,8 +1156,5 @@ int balance_internal(struct tree_balance
>  				       insert_ptr);
>  	}
>  
> -	memcpy(new_insert_key_addr, &new_insert_key, KEY_SIZE);
> -	insert_ptr[0] = new_insert_ptr;
> -
>  	return order;
>  }

Looking at the patch now, I think it is buggy. The insert_ptr is used as an
argument to internal_insert_childs() and this patch ends up overwriting the
original value before the last call to that function... Not that I would
really understand what the code is trying to do (CCed Jeff who may have
better idea), this is based purely on syntactical analysis ;).

								Honza
-- 
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR
--
To unsubscribe from this list: send the line "unsubscribe reiserfs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux File System Development]     [Linux BTRFS]     [Linux NFS]     [Linux Filesystems]     [Ext4 Filesystem]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Resources]

  Powered by Linux