From: Dave Chinner <david@fromorbit.com>
To: MottiKumar Babu <mottikumarbabu@gmail.com>
Cc: cem@kernel.org, djwong@kernel.org, chandanbabu@kernel.org,
dchinner@redhat.com, zhangjiachen.jaycee@bytedance.com,
linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kernel-mentees@lists.linux.dev, anupnewsmail@gmail.com,
skhan@linuxfoundation.org
Subject: Re: [PATCH] Fix out-of-bounds access in xfs_bmapi_allocate by validating whichfork
Date: Mon, 28 Oct 2024 09:53:34 +1100 [thread overview]
Message-ID: <Zx7EbudZfwLQDuVS@dread.disaster.area> (raw)
In-Reply-To: <20241027193541.14212-1-mottikumarbabu@gmail.com>
On Mon, Oct 28, 2024 at 01:05:27AM +0530, MottiKumar Babu wrote:
> This issue was reported by Coverity Scan.
>
> Report:
> CID 1633175 Out-of-bounds access - Access of memory not owned by this buffer may cause crashes or incorrect computations.
> In xfs_bmapi_allocate: Out-of-bounds access to a buffer (CWE-119)
We really need more details than thisi about the issue. I have no
idea what issue this describes, nor the code which it refers to.
Where is the out of bounds memory access occurring, how does it
trigger and where does the code end up crashing as a result?
A link to the coverity report woudl certainly help....
> Signed-off-by: MottiKumar Babu <mottikumarbabu@gmail.com>
> ---
> fs/xfs/libxfs/xfs_bmap.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index 36dd08d13293..6ff378d2d3d9 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -4169,6 +4169,10 @@ xfs_bmapi_allocate(
> * is not on the busy list.
> */
> bma->datatype = XFS_ALLOC_NOBUSY;
> + // Ensure whichfork is valid (0 or 1) before further checks
> + if (whichfork < 0 || whichfork > 1) {
> + return -EINVAL; // Invalid fork
> + }
> if (whichfork == XFS_DATA_FORK || whichfork == XFS_COW_FORK) {
> bma->datatype |= XFS_ALLOC_USERDATA;
> if (bma->offset == 0)
That's not going to work. If you look at how whichfork is
initialised early on in the xfs_bmapi_allocate() function, you'll
see it calls this function:
static inline int xfs_bmapi_whichfork(uint32_t bmapi_flags)
{
if (bmapi_flags & XFS_BMAPI_COWFORK)
return XFS_COW_FORK;
else if (bmapi_flags & XFS_BMAPI_ATTRFORK)
return XFS_ATTR_FORK;
return XFS_DATA_FORK;
}
A value of 2 (XFS_COW_FORK) is definitely a valid value for
whichfork to have. Indeed, the line of code after the fix checks if
whichfork == XFS_COW_FORK, indicating that such a value is expected
and should be handled correctly.
However, this patch will result in rejecting any request to allocate
blocks in the XFS_COW_FORK. This will fail any COW operation we try
to perform with -EINVAL. i.e. overwrites after a reflink copy will
fail.
This sort of regression would be picked up very quickly by fstests.
Hence it is important that any change - even simple changes - are
regression tested before they are proposed for review and merge....
-Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2024-10-27 22:53 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-27 19:35 [PATCH] Fix out-of-bounds access in xfs_bmapi_allocate by validating whichfork MottiKumar Babu
2024-10-27 20:32 ` [PATCH] Follow-up on Submitted Patch: Fix out-of-bounds access in xfs_bmapi_allocate MottiKumar Babu
2024-10-27 22:53 ` Dave Chinner [this message]
2024-10-28 8:46 ` [PATCH] Fix out-of-bounds access in xfs_bmapi_allocate by validating whichfork Christoph Hellwig
2024-11-01 3:36 ` kernel test robot
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=Zx7EbudZfwLQDuVS@dread.disaster.area \
--to=david@fromorbit.com \
--cc=anupnewsmail@gmail.com \
--cc=cem@kernel.org \
--cc=chandanbabu@kernel.org \
--cc=dchinner@redhat.com \
--cc=djwong@kernel.org \
--cc=linux-kernel-mentees@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=mottikumarbabu@gmail.com \
--cc=skhan@linuxfoundation.org \
--cc=zhangjiachen.jaycee@bytedance.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox