From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: cem@kernel.org, r772577952@gmail.com, stable@vger.kernel.org,
linux-xfs@vger.kernel.org
Subject: Re: [PATCH 1/4] xfs: check the return value of xchk_xfile_*_descr calls
Date: Wed, 21 Jan 2026 10:22:08 -0800 [thread overview]
Message-ID: <20260121182208.GH5945@frogsfrogsfrogs> (raw)
In-Reply-To: <20260121070323.GA11640@lst.de>
On Wed, Jan 21, 2026 at 08:03:23AM +0100, Christoph Hellwig wrote:
> On Tue, Jan 20, 2026 at 10:40:23PM -0800, Darrick J. Wong wrote:
> > From: Darrick J. Wong <djwong@kernel.org>
> >
> > The xchk_xfile_*_descr macros call kasprintf, which can fail to allocate
> > memory if the formatted string is larger than 16 bytes (or whatever the
> > nofail guarantees are nowadays). Some of them could easily exceed that,
> > so let's just add return value checking across the board. Note that
> > this patch touches a number of commits, most of which were merged
> > between 6.6 and 6.14.
>
> Hmm. I think this goes back to a discussion we had before, and I fear I
> forgot your answer:
>
> xchk_xfile_*_descr is used to pass the name to xfarray_create or
> xfblob_create. I still think it would make this a lot more robust if
> those took a format string and varags, and then we'd have wrappers for
> the common types. Even if that still ends up doing kasprintf underneath,
> that would be isolated to the low-level functions that only need to
> implement error handling and freeing once.
Alternately we just drop all the helpers and kasprintf crap in favor of
feeding the raw string ("iunlinked next pointers") all the way through
to shmem_kernel_file_setup. That reduces ease of observability but now
there's one less way to fail. Most people probably aren't going to
ls -la /proc/$xfs_scrub_pid/fd/ and anyone looking at ftrace can figure
out the group/inode/whatever from the other tracepoints.
--D
> >
> > Cc: r772577952@gmail.com
> > Cc: <stable@vger.kernel.org> # v6.12
> > Fixes: ab97f4b1c03075 ("xfs: repair AGI unlinked inode bucket lists")
> > Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> > ---
> > fs/xfs/scrub/agheader_repair.c | 6 ++++++
> > fs/xfs/scrub/alloc_repair.c | 5 +++++
> > fs/xfs/scrub/attr_repair.c | 20 ++++++++++++++++++++
> > fs/xfs/scrub/bmap_repair.c | 5 +++++
> > fs/xfs/scrub/dir.c | 10 ++++++++++
> > fs/xfs/scrub/dir_repair.c | 8 ++++++++
> > fs/xfs/scrub/dirtree.c | 10 ++++++++++
> > fs/xfs/scrub/ialloc_repair.c | 5 +++++
> > fs/xfs/scrub/nlinks.c | 5 +++++
> > fs/xfs/scrub/parent.c | 8 ++++++++
> > fs/xfs/scrub/parent_repair.c | 20 ++++++++++++++++++++
> > fs/xfs/scrub/quotacheck.c | 15 +++++++++++++++
> > fs/xfs/scrub/refcount_repair.c | 8 ++++++++
> > fs/xfs/scrub/rmap_repair.c | 3 +++
> > fs/xfs/scrub/rtbitmap_repair.c | 3 +++
> > fs/xfs/scrub/rtrefcount_repair.c | 8 ++++++++
> > fs/xfs/scrub/rtrmap_repair.c | 3 +++
> > fs/xfs/scrub/rtsummary.c | 3 +++
> > 18 files changed, 145 insertions(+)
> >
> >
> > diff --git a/fs/xfs/scrub/agheader_repair.c b/fs/xfs/scrub/agheader_repair.c
> > index cd6f0223879f49..8d7762cf5daffd 100644
> > --- a/fs/xfs/scrub/agheader_repair.c
> > +++ b/fs/xfs/scrub/agheader_repair.c
> > @@ -1743,6 +1743,9 @@ xrep_agi(
> > sc->buf_cleanup = xrep_agi_buf_cleanup;
> >
> > descr = xchk_xfile_ag_descr(sc, "iunlinked next pointers");
> > + if (!descr)
> > + return -ENOMEM;
> > +
> > error = xfarray_create(descr, 0, sizeof(xfs_agino_t),
> > &ragi->iunlink_next);
> > kfree(descr);
> > @@ -1750,6 +1753,9 @@ xrep_agi(
> > return error;
> >
> > descr = xchk_xfile_ag_descr(sc, "iunlinked prev pointers");
> > + if (!descr)
> > + return -ENOMEM;
> > +
> > error = xfarray_create(descr, 0, sizeof(xfs_agino_t),
> > &ragi->iunlink_prev);
> > kfree(descr);
> > diff --git a/fs/xfs/scrub/alloc_repair.c b/fs/xfs/scrub/alloc_repair.c
> > index bed6a09aa79112..2e1d62efba72a7 100644
> > --- a/fs/xfs/scrub/alloc_repair.c
> > +++ b/fs/xfs/scrub/alloc_repair.c
> > @@ -877,6 +877,11 @@ xrep_allocbt(
> >
> > /* Set up enough storage to handle maximally fragmented free space. */
> > descr = xchk_xfile_ag_descr(sc, "free space records");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_ra;
> > + }
> > +
> > error = xfarray_create(descr, mp->m_sb.sb_agblocks / 2,
> > sizeof(struct xfs_alloc_rec_incore),
> > &ra->free_records);
> > diff --git a/fs/xfs/scrub/attr_repair.c b/fs/xfs/scrub/attr_repair.c
> > index c7eb94069cafcd..73684ce9b81bc5 100644
> > --- a/fs/xfs/scrub/attr_repair.c
> > +++ b/fs/xfs/scrub/attr_repair.c
> > @@ -1556,6 +1556,11 @@ xrep_xattr_setup_scan(
> >
> > /* Set up some staging for salvaged attribute keys and values */
> > descr = xchk_xfile_ino_descr(sc, "xattr keys");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_rx;
> > + }
> > +
> > error = xfarray_create(descr, 0, sizeof(struct xrep_xattr_key),
> > &rx->xattr_records);
> > kfree(descr);
> > @@ -1563,6 +1568,11 @@ xrep_xattr_setup_scan(
> > goto out_rx;
> >
> > descr = xchk_xfile_ino_descr(sc, "xattr names");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_keys;
> > + }
> > +
> > error = xfblob_create(descr, &rx->xattr_blobs);
> > kfree(descr);
> > if (error)
> > @@ -1573,6 +1583,11 @@ xrep_xattr_setup_scan(
> >
> > descr = xchk_xfile_ino_descr(sc,
> > "xattr retained parent pointer entries");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_values;
> > + }
> > +
> > error = xfarray_create(descr, 0,
> > sizeof(struct xrep_xattr_pptr),
> > &rx->pptr_recs);
> > @@ -1582,6 +1597,11 @@ xrep_xattr_setup_scan(
> >
> > descr = xchk_xfile_ino_descr(sc,
> > "xattr retained parent pointer names");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_pprecs;
> > + }
> > +
> > error = xfblob_create(descr, &rx->pptr_names);
> > kfree(descr);
> > if (error)
> > diff --git a/fs/xfs/scrub/bmap_repair.c b/fs/xfs/scrub/bmap_repair.c
> > index 1084213b8e9b88..74df05142dcf4c 100644
> > --- a/fs/xfs/scrub/bmap_repair.c
> > +++ b/fs/xfs/scrub/bmap_repair.c
> > @@ -947,6 +947,11 @@ xrep_bmap(
> > max_bmbt_recs = xfs_iext_max_nextents(large_extcount, whichfork);
> > descr = xchk_xfile_ino_descr(sc, "%s fork mapping records",
> > whichfork == XFS_DATA_FORK ? "data" : "attr");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_rb;
> > + }
> > +
> > error = xfarray_create(descr, max_bmbt_recs,
> > sizeof(struct xfs_bmbt_rec), &rb->bmap_records);
> > kfree(descr);
> > diff --git a/fs/xfs/scrub/dir.c b/fs/xfs/scrub/dir.c
> > index c877bde71e6280..58346d54042b07 100644
> > --- a/fs/xfs/scrub/dir.c
> > +++ b/fs/xfs/scrub/dir.c
> > @@ -1109,6 +1109,11 @@ xchk_directory(
> > * due to locking contention.
> > */
> > descr = xchk_xfile_ino_descr(sc, "slow directory entries");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_sd;
> > + }
> > +
> > error = xfarray_create(descr, 0, sizeof(struct xchk_dirent),
> > &sd->dir_entries);
> > kfree(descr);
> > @@ -1116,6 +1121,11 @@ xchk_directory(
> > goto out_sd;
> >
> > descr = xchk_xfile_ino_descr(sc, "slow directory entry names");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_entries;
> > + }
> > +
> > error = xfblob_create(descr, &sd->dir_names);
> > kfree(descr);
> > if (error)
> > diff --git a/fs/xfs/scrub/dir_repair.c b/fs/xfs/scrub/dir_repair.c
> > index 8d3b550990b58a..50e0af4bdaa63a 100644
> > --- a/fs/xfs/scrub/dir_repair.c
> > +++ b/fs/xfs/scrub/dir_repair.c
> > @@ -1789,6 +1789,9 @@ xrep_dir_setup_scan(
> >
> > /* Set up some staging memory for salvaging dirents. */
> > descr = xchk_xfile_ino_descr(sc, "directory entries");
> > + if (!descr)
> > + return -ENOMEM;
> > +
> > error = xfarray_create(descr, 0, sizeof(struct xrep_dirent),
> > &rd->dir_entries);
> > kfree(descr);
> > @@ -1796,6 +1799,11 @@ xrep_dir_setup_scan(
> > return error;
> >
> > descr = xchk_xfile_ino_descr(sc, "directory entry names");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_xfarray;
> > + }
> > +
> > error = xfblob_create(descr, &rd->dir_names);
> > kfree(descr);
> > if (error)
> > diff --git a/fs/xfs/scrub/dirtree.c b/fs/xfs/scrub/dirtree.c
> > index 3a9cdf8738b6db..7f8ad41e3ec20e 100644
> > --- a/fs/xfs/scrub/dirtree.c
> > +++ b/fs/xfs/scrub/dirtree.c
> > @@ -117,6 +117,11 @@ xchk_setup_dirtree(
> > mutex_init(&dl->lock);
> >
> > descr = xchk_xfile_ino_descr(sc, "dirtree path steps");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_dl;
> > + }
> > +
> > error = xfarray_create(descr, 0, sizeof(struct xchk_dirpath_step),
> > &dl->path_steps);
> > kfree(descr);
> > @@ -124,6 +129,11 @@ xchk_setup_dirtree(
> > goto out_dl;
> >
> > descr = xchk_xfile_ino_descr(sc, "dirtree path names");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_steps;
> > + }
> > +
> > error = xfblob_create(descr, &dl->path_names);
> > kfree(descr);
> > if (error)
> > diff --git a/fs/xfs/scrub/ialloc_repair.c b/fs/xfs/scrub/ialloc_repair.c
> > index 14e48d3f1912bf..3055380cf29271 100644
> > --- a/fs/xfs/scrub/ialloc_repair.c
> > +++ b/fs/xfs/scrub/ialloc_repair.c
> > @@ -817,6 +817,11 @@ xrep_iallocbt(
> > xfs_agino_range(mp, pag_agno(sc->sa.pag), &first_agino, &last_agino);
> > last_agino /= XFS_INODES_PER_CHUNK;
> > descr = xchk_xfile_ag_descr(sc, "inode index records");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_ri;
> > + }
> > +
> > error = xfarray_create(descr, last_agino,
> > sizeof(struct xfs_inobt_rec_incore),
> > &ri->inode_records);
> > diff --git a/fs/xfs/scrub/nlinks.c b/fs/xfs/scrub/nlinks.c
> > index 091c79e432e592..c71b065ccb4c45 100644
> > --- a/fs/xfs/scrub/nlinks.c
> > +++ b/fs/xfs/scrub/nlinks.c
> > @@ -1008,6 +1008,11 @@ xchk_nlinks_setup_scan(
> > xfs_agino_range(mp, last_agno, &first_agino, &last_agino);
> > max_inos = XFS_AGINO_TO_INO(mp, last_agno, last_agino) + 1;
> > descr = xchk_xfile_descr(sc, "file link counts");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_teardown;
> > + }
> > +
> > error = xfarray_create(descr, min(XFS_MAXINUMBER + 1, max_inos),
> > sizeof(struct xchk_nlink), &xnc->nlinks);
> > kfree(descr);
> > diff --git a/fs/xfs/scrub/parent.c b/fs/xfs/scrub/parent.c
> > index 11d5de10fd567b..11c70e5d3e03de 100644
> > --- a/fs/xfs/scrub/parent.c
> > +++ b/fs/xfs/scrub/parent.c
> > @@ -769,6 +769,9 @@ xchk_parent_pptr(
> > * due to locking contention.
> > */
> > descr = xchk_xfile_ino_descr(sc, "slow parent pointer entries");
> > + if (!descr)
> > + return -ENOMEM;
> > +
> > error = xfarray_create(descr, 0, sizeof(struct xchk_pptr),
> > &pp->pptr_entries);
> > kfree(descr);
> > @@ -776,6 +779,11 @@ xchk_parent_pptr(
> > goto out_pp;
> >
> > descr = xchk_xfile_ino_descr(sc, "slow parent pointer names");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_entries;
> > + }
> > +
> > error = xfblob_create(descr, &pp->pptr_names);
> > kfree(descr);
> > if (error)
> > diff --git a/fs/xfs/scrub/parent_repair.c b/fs/xfs/scrub/parent_repair.c
> > index 2949feda627175..8683317f2342df 100644
> > --- a/fs/xfs/scrub/parent_repair.c
> > +++ b/fs/xfs/scrub/parent_repair.c
> > @@ -1526,6 +1526,11 @@ xrep_parent_setup_scan(
> >
> > /* Set up some staging memory for logging parent pointer updates. */
> > descr = xchk_xfile_ino_descr(sc, "parent pointer entries");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_xattr_value;
> > + }
> > +
> > error = xfarray_create(descr, 0, sizeof(struct xrep_pptr),
> > &rp->pptr_recs);
> > kfree(descr);
> > @@ -1533,6 +1538,11 @@ xrep_parent_setup_scan(
> > goto out_xattr_value;
> >
> > descr = xchk_xfile_ino_descr(sc, "parent pointer names");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_recs;
> > + }
> > +
> > error = xfblob_create(descr, &rp->pptr_names);
> > kfree(descr);
> > if (error)
> > @@ -1541,6 +1551,11 @@ xrep_parent_setup_scan(
> > /* Set up some storage for copying attrs before the mapping exchange */
> > descr = xchk_xfile_ino_descr(sc,
> > "parent pointer retained xattr entries");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_names;
> > + }
> > +
> > error = xfarray_create(descr, 0, sizeof(struct xrep_parent_xattr),
> > &rp->xattr_records);
> > kfree(descr);
> > @@ -1549,6 +1564,11 @@ xrep_parent_setup_scan(
> >
> > descr = xchk_xfile_ino_descr(sc,
> > "parent pointer retained xattr values");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_attr_keys;
> > + }
> > +
> > error = xfblob_create(descr, &rp->xattr_blobs);
> > kfree(descr);
> > if (error)
> > diff --git a/fs/xfs/scrub/quotacheck.c b/fs/xfs/scrub/quotacheck.c
> > index d412a8359784ee..7d0ad19ddf577d 100644
> > --- a/fs/xfs/scrub/quotacheck.c
> > +++ b/fs/xfs/scrub/quotacheck.c
> > @@ -757,6 +757,11 @@ xqcheck_setup_scan(
> > error = -ENOMEM;
> > if (xfs_this_quota_on(sc->mp, XFS_DQTYPE_USER)) {
> > descr = xchk_xfile_descr(sc, "user dquot records");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_teardown;
> > + }
> > +
> > error = xfarray_create(descr, max_dquots,
> > sizeof(struct xqcheck_dquot), &xqc->ucounts);
> > kfree(descr);
> > @@ -766,6 +771,11 @@ xqcheck_setup_scan(
> >
> > if (xfs_this_quota_on(sc->mp, XFS_DQTYPE_GROUP)) {
> > descr = xchk_xfile_descr(sc, "group dquot records");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_teardown;
> > + }
> > +
> > error = xfarray_create(descr, max_dquots,
> > sizeof(struct xqcheck_dquot), &xqc->gcounts);
> > kfree(descr);
> > @@ -775,6 +785,11 @@ xqcheck_setup_scan(
> >
> > if (xfs_this_quota_on(sc->mp, XFS_DQTYPE_PROJ)) {
> > descr = xchk_xfile_descr(sc, "project dquot records");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_teardown;
> > + }
> > +
> > error = xfarray_create(descr, max_dquots,
> > sizeof(struct xqcheck_dquot), &xqc->pcounts);
> > kfree(descr);
> > diff --git a/fs/xfs/scrub/refcount_repair.c b/fs/xfs/scrub/refcount_repair.c
> > index 9c8cb5332da042..d53c9a5bb7809c 100644
> > --- a/fs/xfs/scrub/refcount_repair.c
> > +++ b/fs/xfs/scrub/refcount_repair.c
> > @@ -127,6 +127,9 @@ xrep_setup_ag_refcountbt(
> > int error;
> >
> > descr = xchk_xfile_ag_descr(sc, "rmap record bag");
> > + if (!descr)
> > + return -ENOMEM;
> > +
> > error = xrep_setup_xfbtree(sc, descr);
> > kfree(descr);
> > return error;
> > @@ -718,6 +721,11 @@ xrep_refcountbt(
> >
> > /* Set up enough storage to handle one refcount record per block. */
> > descr = xchk_xfile_ag_descr(sc, "reference count records");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_rr;
> > + }
> > +
> > error = xfarray_create(descr, mp->m_sb.sb_agblocks,
> > sizeof(struct xfs_refcount_irec),
> > &rr->refcount_records);
> > diff --git a/fs/xfs/scrub/rmap_repair.c b/fs/xfs/scrub/rmap_repair.c
> > index 17d4a38d735cb8..c619ba469e36de 100644
> > --- a/fs/xfs/scrub/rmap_repair.c
> > +++ b/fs/xfs/scrub/rmap_repair.c
> > @@ -170,6 +170,9 @@ xrep_setup_ag_rmapbt(
> > xchk_fsgates_enable(sc, XCHK_FSGATES_RMAP);
> >
> > descr = xchk_xfile_ag_descr(sc, "reverse mapping records");
> > + if (!descr)
> > + return -ENOMEM;
> > +
> > error = xrep_setup_xfbtree(sc, descr);
> > kfree(descr);
> > if (error)
> > diff --git a/fs/xfs/scrub/rtbitmap_repair.c b/fs/xfs/scrub/rtbitmap_repair.c
> > index 203a1a97c5026e..070347df717c46 100644
> > --- a/fs/xfs/scrub/rtbitmap_repair.c
> > +++ b/fs/xfs/scrub/rtbitmap_repair.c
> > @@ -53,6 +53,9 @@ xrep_setup_rtbitmap(
> >
> > /* Create an xfile to hold our reconstructed bitmap. */
> > descr = xchk_xfile_rtgroup_descr(sc, "bitmap file");
> > + if (!descr)
> > + return -ENOMEM;
> > +
> > error = xfile_create(descr, blocks * mp->m_sb.sb_blocksize, &sc->xfile);
> > kfree(descr);
> > if (error)
> > diff --git a/fs/xfs/scrub/rtrefcount_repair.c b/fs/xfs/scrub/rtrefcount_repair.c
> > index 983362447826de..029e3e332f605e 100644
> > --- a/fs/xfs/scrub/rtrefcount_repair.c
> > +++ b/fs/xfs/scrub/rtrefcount_repair.c
> > @@ -132,6 +132,9 @@ xrep_setup_rtrefcountbt(
> > int error;
> >
> > descr = xchk_xfile_ag_descr(sc, "rmap record bag");
> > + if (!descr)
> > + return -ENOMEM;
> > +
> > error = xrep_setup_xfbtree(sc, descr);
> > kfree(descr);
> > return error;
> > @@ -723,6 +726,11 @@ xrep_rtrefcountbt(
> >
> > /* Set up enough storage to handle one refcount record per rt extent. */
> > descr = xchk_xfile_ag_descr(sc, "reference count records");
> > + if (!descr) {
> > + error = -ENOMEM;
> > + goto out_rr;
> > + }
> > +
> > error = xfarray_create(descr, mp->m_sb.sb_rextents,
> > sizeof(struct xfs_refcount_irec),
> > &rr->refcount_records);
> > diff --git a/fs/xfs/scrub/rtrmap_repair.c b/fs/xfs/scrub/rtrmap_repair.c
> > index 7561941a337a1f..c74d640068d1c8 100644
> > --- a/fs/xfs/scrub/rtrmap_repair.c
> > +++ b/fs/xfs/scrub/rtrmap_repair.c
> > @@ -109,6 +109,9 @@ xrep_setup_rtrmapbt(
> > xchk_fsgates_enable(sc, XCHK_FSGATES_RMAP);
> >
> > descr = xchk_xfile_rtgroup_descr(sc, "reverse mapping records");
> > + if (!descr)
> > + return -ENOMEM;
> > +
> > error = xrep_setup_xfbtree(sc, descr);
> > kfree(descr);
> > if (error)
> > diff --git a/fs/xfs/scrub/rtsummary.c b/fs/xfs/scrub/rtsummary.c
> > index 4ac679c1bd29cd..bf2b96e51d070c 100644
> > --- a/fs/xfs/scrub/rtsummary.c
> > +++ b/fs/xfs/scrub/rtsummary.c
> > @@ -71,6 +71,9 @@ xchk_setup_rtsummary(
> > * us to avoid pinning kernel memory for this purpose.
> > */
> > descr = xchk_xfile_descr(sc, "realtime summary file");
> > + if (!descr)
> > + return -ENOMEM;
> > +
> > error = xfile_create(descr, XFS_FSB_TO_B(mp, mp->m_rsumblocks),
> > &sc->xfile);
> > kfree(descr);
> ---end quoted text---
>
next prev parent reply other threads:[~2026-01-21 18:22 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-21 6:40 [PATCHSET] xfs: syzbot fixes for online fsck Darrick J. Wong
2026-01-21 6:40 ` [PATCH 1/4] xfs: check the return value of xchk_xfile_*_descr calls Darrick J. Wong
2026-01-21 7:03 ` Christoph Hellwig
2026-01-21 18:22 ` Darrick J. Wong [this message]
2026-01-22 5:57 ` Christoph Hellwig
2026-01-22 18:57 ` Darrick J. Wong
2026-01-23 5:33 ` Christoph Hellwig
2026-01-23 7:00 ` Darrick J. Wong
2026-01-21 6:40 ` [PATCH 2/4] xfs: only call xf{array,blob}_destroy if we have a valid pointer Darrick J. Wong
2026-02-05 19:40 ` Chris Mason
2026-02-06 4:46 ` Darrick J. Wong
2026-01-21 6:40 ` [PATCH 3/4] xfs: check return value of xchk_scrub_create_subord Darrick J. Wong
2026-01-21 7:03 ` Christoph Hellwig
2026-01-21 6:41 ` [PATCH 4/4] xfs: fix UAF in xchk_btree_check_block_owner Darrick J. Wong
2026-01-21 7:04 ` Christoph Hellwig
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=20260121182208.GH5945@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=cem@kernel.org \
--cc=hch@lst.de \
--cc=linux-xfs@vger.kernel.org \
--cc=r772577952@gmail.com \
--cc=stable@vger.kernel.org \
/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