Thanks for the patch; it definitely helps identify the problem. I don't think it is a completely correct change, however.
The problem is that it's doing the translation in write_xattrs_to_buffer(), but it is not making the translation in the opposite direction in read_xattrs_to_buffer(). This means if some other program using this library function --- for example, fuse2fs, reads in an existing xattr block with an ACL, it will read it the on- disk format, _not_ translate it to a standard acl format, and then write_xattrs_to_buffer() will take as input an acl encoded in the on- disk format, and then try to convert it from lgetxattr format to on-disk format again, and Much Hilarity will result. I also wonder if write_xattrs_to_buffer() is the right place to make this conversion, or rather ext2fs_{read,write}_ext_attr3(). Then what is stored in the handle structure is the on-disk encoding, and we would do the translation at the higher layer function rather than the low- level read/write functions. -- You received this bug notification because you are a member of Ubuntu Touch seeded packages, which is subscribed to e2fsprogs in Ubuntu. https://bugs.launchpad.net/bugs/1645232 Title: e2fsprogs - could not preserve ACL permissions : The getxattr() returns with (EINVAL) Status in e2fsprogs package in Ubuntu: Confirmed Bug description: The original installed e2fsprogs did not support mke2fs -d /directory " option . So , git cloned from e2fsprogs packages from repository and installed it and followed below steps to reproduce this : 1. set the ACL rules as below to one of the binary : $ setfacl -m u:vipatil:r-- rootfs/usr/bin/helloworld $ getfacl rootfs/usr/bin/helloworld # file: rootfs/usr/bin/helloworld # owner: shkumar # group: hardev user::rwx user:vipatil:r-- group::--- mask::r-- other::--- 2. $ dd if=/dev/zero of=test.ext4 bs=1M count=60 3. $ mke2fs -t ext4 test.ext4 -d rootfs/ mke2fs 1.43.3 (04-Sep-2016) Discarding device blocks: done Creating filesystem with 61440 1k blocks and 15360 inodes Filesystem UUID: 495713b3-5f1f-427a-8359-a736dfb2ece9 Superblock backups stored on blocks: 8193, 24577, 40961, 57345 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Copying files into the device: done Writing superblocks and filesystem accounting information: done 4. sudo mount -o loop,acl,user_xattr,rw,sync test.ext4 mountpoint 5.@/mountpoint$ getfacl usr/bin/helloworld getfacl: usr/bin/helloworld: Invalid argument To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/e2fsprogs/+bug/1645232/+subscriptions -- Mailing list: https://launchpad.net/~touch-packages Post to : touch-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~touch-packages More help : https://help.launchpad.net/ListHelp