All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Sweet Tea Dorminy <sweettea-kernel@dorminy.me>,
	Chris Mason <clm@fb.com>, Josef Bacik <josef@toxicpanda.com>,
	David Sterba <dsterba@suse.com>,
	linux-btrfs@vger.kernel.org
Subject: Re: [PATCH] btrfs: fix compilation error on sparc/parisc
Date: Wed, 8 Mar 2023 09:12:50 -0800	[thread overview]
Message-ID: <6a21d9ae-a6ee-e5de-10f9-8a40b9a8f3f2@roeck-us.net> (raw)
In-Reply-To: <dc091588d770923c3afe779e1eb512724662db71.1678290988.git.sweettea-kernel@dorminy.me>

On 3/8/23 07:58, Sweet Tea Dorminy wrote:
> Commit 1ec49744ba83 ("btrfs: turn on -Wmaybe-uninitialized") exposed
> that on sparc and parisc, gcc is unaware that fscrypt_setup_filename()
> only returns negative error values or 0. This ultimately results in a
> maybe-uninitialized warning in btrfs_lookup_dentry().
> 
> Change to only return negative error values or 0 from
> fscrypt_setup_filename() at the relevant callsite, and assert that no
> positive error codes are returned (which would have wider implications
> involving other users).
> 
> Reported-by: Guenter Roeck <linux@roeck-us.net>
> Link: https://lore.kernel.org/all/481b19b5-83a0-4793-b4fd-194ad7b978c3@roeck-us.net/
> Signed-off-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me>
> ---
>   fs/btrfs/inode.c | 7 ++++++-
>   1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index 45102785c723..50178609f241 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -5409,8 +5409,13 @@ static int btrfs_inode_by_name(struct btrfs_inode *dir, struct dentry *dentry,
>   		return -ENOMEM;
>   
>   	ret = fscrypt_setup_filename(&dir->vfs_inode, &dentry->d_name, 1, &fname);
> -	if (ret)
> +	if (ret < 0)
>   		goto out;
> +	/*
> +	 * fscrypt_setup_filename() should never return a positive value, but
> +	 * gcc on sparc/parisc thinks it can, so assert that doesn't happen.
> +	 */

Here is some food for thought:

1) Make sure that "location" is never initialized in btrfs_inode_by_name(),
    and that the functions returns a value >= 0.

2) compile. gcc never reports an error or warning (tested with 10.3, 11.3,
    and 12.2).

On x86, gcc doesn't report a problem even if I replace btrfs_inode_by_name()
with a simple "return 0;".

I looks like there is something else going on which prevents gcc on
architectures other than parisc and sparc from reporting uninitialized
stack variables (or at least uninitialized structure elements),
and I am not entirely sure if this should be blamed on the architecture.

More specifically and importantly, it may not be a good idea to expect
gcc to report potentially uninitialized variables on architectures
other than parisc and sparc.

Guenter

> +	ASSERT(ret == 0);
>   
>   	/* This needs to handle no-key deletions later on */
>   


  reply	other threads:[~2023-03-08 17:12 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-08 15:58 [PATCH] btrfs: fix compilation error on sparc/parisc Sweet Tea Dorminy
2023-03-08 17:12 ` Guenter Roeck [this message]
2023-03-09 17:43 ` David Sterba

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6a21d9ae-a6ee-e5de-10f9-8a40b9a8f3f2@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=clm@fb.com \
    --cc=dsterba@suse.com \
    --cc=josef@toxicpanda.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=sweettea-kernel@dorminy.me \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.