Re: [PATCH v3] common: strip attr 2.6.0 --restore safety warnings
Zorro Lang <[email protected]> Wed, 22 Jul 2026 05:26:49 +0800
| Newsgroups | org.kernel.vger.fstests |
|---|---|
| Message-ID | <al_jUSscUbp9HGVv@zlang-mailbox> |
On Tue, Jul 21, 2026 at 12:20:59PM +0200, Avinesh Kumar wrote: > From: Avinesh Kumar <[email protected]> > > attr 2.6.0 (CVE-2026-54371 hardening) makes "setfattr --restore" print a > warning to stderr when options -P and -h are not given, claiming it may > traverse or dereference symlinks in the dump's pathnames [0]. This warning > leaks into test output and breaks generic/062 and xfs/083 (via > _scratch_populate). > > Add a _setfattr_restore helper that takes the restore source as its first > argument, filters out just the expected warning line, and preserves any > other (unexpected) stderr. Convert the callers in common/populate, > common/overlay and generic/062 to use it. > > [0] https://cgit.git.savannah.nongnu.org/cgit/attr.git/commit/?id=3fb06b9ba314d37035d0877e6de313de754f1ac8 > > Suggested-by: Darrick J. Wong <[email protected]> > Signed-off-by: Avinesh Kumar <[email protected]> > --- This patch looks good to me, but I've just merged your patch: [PATCH v2] generic/062: filter setfattr --restore symlink-safety warning as a preliminary fix for g/062. So could you please rebase this patch onto the latest for-next branch, then send again? Thanks a lot! > common/overlay | 2 +- > common/populate | 4 ++-- > common/rc | 15 +++++++++++++++ > tests/generic/062 | 2 +- > 4 files changed, 19 insertions(+), 4 deletions(-) > > diff --git a/common/overlay b/common/overlay > index d32f3219..8e89d6e4 100644 > --- a/common/overlay > +++ b/common/overlay > @@ -494,7 +494,7 @@ _overlay_trusted_to_user() > local dir=$1 > > for file in `find $dir`; do > - _getfattr --absolute-names -d -m '^trusted.overlay.(redirect|metacopy)$' $file | sed 's/^trusted/user/' | $SETFATTR_PROG --restore=- > + _getfattr --absolute-names -d -m '^trusted.overlay.(redirect|metacopy)$' $file | sed 's/^trusted/user/' | _setfattr_restore - > for xattr in `_getfattr --absolute-names -d -m '^trusted.overlay.' $file | tail -n +2 | cut -d= -f1`; do > $SETFATTR_PROG -x $xattr $file; > done > diff --git a/common/populate b/common/populate > index 1c0dd03e..f3672c1a 100644 > --- a/common/populate > +++ b/common/populate > @@ -151,7 +151,7 @@ __populate_create_attr() { > echo "# file: ${name}"; > seq --format "user.%08g=\"abcdefgh\"" 0 "${nr}" > echo > - ) | setfattr --restore - > + ) | _setfattr_restore - > > test -z "${missing}" && return > seq 1 2 "${nr}" | while read d; do > @@ -200,7 +200,7 @@ __populate_xfs_create_btree_attr() { > seq --format "user.%08g=\"abcdefgh\"" "${nr}" "$((nr + incr + 1))" > echo "user.v$(printf "%.08d" "$nr")=\"${bigval}\"" > echo > - ) | setfattr --restore - > + ) | _setfattr_restore - > done > > # ... and in the second loop we delete all the remote attrs to > diff --git a/common/rc b/common/rc > index 79189e7e..38b77bef 100644 > --- a/common/rc > +++ b/common/rc > @@ -132,6 +132,21 @@ _test_fsxattr_xflag() > grep -q "fsxattr.xflags.*\[.*$2.*\]" <($XFS_IO_PROG -c "stat -v" "$1") > } > > +# Restore xattrs from a getfattr-style dump given as $1 (a dump file, or "-" > +# for stdin); any extra setfattr options follow. attr 2.6.0 (CVE-2026-54371) > +# makes --restore warn unless both -P and -h are given, so filter out just > +# those warning lines, keep other unexpected stderr. > +_setfattr_restore() > +{ > + local restore_from="$1" > + shift > + > + $SETFATTR_PROG "$@" --restore="$restore_from" 2> $tmp.setfattr > + local ret=$? > + sed -e '/--restore=.*unsafe.*without/d' "$tmp.setfattr" 1>&2 > + return $ret > +} > + > # This test requires extsize support on the filesystem > _require_scratch_extsize() > { > diff --git a/tests/generic/062 b/tests/generic/062 > index 89659040..845d62f2 100755 > --- a/tests/generic/062 > +++ b/tests/generic/062 > @@ -186,7 +186,7 @@ _create_test_bed > _extend_test_bed > > echo "*** restore everything" > -setfattr -h --restore=$tmp.backup1 > +_setfattr_restore "$tmp.backup1" -h 2>&1 | _filter_scratch > _backup $tmp.backup2 > > echo "AFTER RESTORE" >>$seqres.full > -- > 2.55.0 >