Re: [yocto-patches] [pseudo] [PATCH] Only copy xattrs on a rename if it's cross-filesystem

Mark Hatle <[email protected]>
Newsgroups org.yoctoproject.lists.yocto-patches
Message-ID <[email protected]>
We'll look into this soon.  Sorry, missed the original patch and the ping was in 
the middle of my absence.

--Mark

On 4/22/26 8:26 AM, Daniel Burgener via lists.yoctoproject.org wrote:
> On 4/8/2026 9:55 AM, Daniel Burgener via lists.yoctoproject.org wrote:
>> On 3/11/2026 1:59 PM, Daniel Burgener via lists.yoctoproject.org wrote:
>>> On same file-system renames, the path update in the db means that the
>>> xattrs are already present, and copying results in duplicates.  This was
>>> previously masked by the bug fixed in
>>> d1db9c219abf92f15303486a409292237f1fc790, since that prevented the
>>> xattr copying.  Now that that bug is fixed, we started observing this
>>> issue in 1.9.3.
>>>
>>> AI-Generated: Code fix by Claude Haiku 4.5.  Test code by me.
>>>
>>> Signed-off-by: Daniel Burgener <[email protected]>
>>> ---
>>>    pseudo_db.c        |  4 +++-
>>>    test/test-xattr.sh | 12 ++++++++++++
>>>    2 files changed, 15 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/pseudo_db.c b/pseudo_db.c
>>> index 9713e0c..6a33f20 100644
>>> --- a/pseudo_db.c
>>> +++ b/pseudo_db.c
>>> @@ -2196,7 +2196,9 @@ pdb_update_inode(pseudo_msg_t *msg) {
>>>        found_existing = !pdb_find_file_path(oldmsg);
>>>        if (found_existing) {
>>>            /* we have an existing file entry */
>>> -        pdb_copy_xattrs(oldmsg, msg);
>>> +        if (oldmsg->dev != msg->dev || oldmsg->ino != msg->ino) {
>>> +            pdb_copy_xattrs(oldmsg, msg);
>>> +        }
>>>        }
>>>        sqlite3_bind_int(update, 1, msg->dev);
>>>        sqlite3_bind_int64(update, 2, signed_ino(msg->ino));
>>> diff --git a/test/test-xattr.sh b/test/test-xattr.sh
>>> index 6ac6b3c..89fbd35 100755
>>> --- a/test/test-xattr.sh
>>> +++ b/test/test-xattr.sh
>>> @@ -65,6 +65,18 @@ then
>>>        exit 1
>>>    fi
>>> +mv f1 f2
>>> +attrs=`getfattr -d -m - f2 | grep -v '^#'`
>>> +expected=$'security.dummy="test_f2"\nuser.dummy="test_f1"'
>>> +if [ "$attrs" != "$expected" ]
>>> +then
>>> +    #echo "Fail, unpexected getfattr result '$attrs'"
>>> +    rm -f f1
>>> +    rm -f f2
>>> +    exit 1
>>> +fi
>>> +
>>>    #echo "Passed."
>>>    rm -f f1
>>> +rm -f f2
>>>    exit 0
>>
>> Gentle ping on this patch.  Any feedback?
>>
>> -Daniel
>>
> 
> Pinging again on this.  If I've done something wrong in submitting,
> please let me know so I can get this reviewed.
> 
> I'll also note that while I did use AI for the fix, this is an actual
> bug we're encountering in our environment, not something picked up by an
> LLM scanning the code base.  Specifically, we (in a pseudo environment)
> populate a directory structure, and then do:
> 
> setfiles -m -v -E -F ${FILE_CONTEXTS} -r ${FOO_SQUASHFS_ROOT}
> ${FOO_SQUASHFS_ROOT}
> mksquashfs "$FOO_SQUASHFS_ROOT" "$PATH_FOO" -noappend
> # mv some files into ${FOO_SQUASHFS_ROOT}
> setfiles -m -v -E -F ${FILE_CONTEXTS} -r ${FOO_SQUASHFS_ROOT}
> mksquashfs "$FOO_SQUASHFS_ROOT" "$PATH_BAR" -noappend
> 
> We observe the second mksquashfs fail due to duplicate selinux xattrs.
> My understanding is that the code touched in this patch seems to rename
> the original file, which preserves the xattrs in the pseudodb, and then
> copy the xattrs as well, resulting in duplicate xattrs.
> 
> -Daniel
> 
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#3760): https://lists.yoctoproject.org/g/yocto-patches/message/3760
> Mute This Topic: https://lists.yoctoproject.org/mt/118265101/3616948
> Group Owner: [email protected]
> Unsubscribe: https://lists.yoctoproject.org/g/yocto-patches/leave/13201099/3616948/947757854/xyzzy [[email protected]]
> -=-=-=-=-=-=-=-=-=-=-=-
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.