test code v1
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
# repo22 xattr/ACL root-cause manual test report
|
||||
|
||||
Date: 2026-08-08 18:12 UTC; final integration rerun on 2026-08-08
|
||||
Baseline: `29a215dd4519579f6313b3df67d524a6b4bdf3ca` plus the scoped xattr/ACL fixes
|
||||
Guest: FreeBSD 15.0-RELEASE-p8 amd64
|
||||
Host tools: erofs-utils 1.8.6 plus deterministic transformed fixtures
|
||||
|
||||
## Build and module
|
||||
|
||||
- `git diff --check`: PASS.
|
||||
- `./build.sh`: PASS; final `build/erofs.ko` SHA-256 is
|
||||
`50a19ea96c7414f73d92049671e66a9eacc9ff5abe27950a46d16c8e6c763baf`.
|
||||
- `nm -u build/erofs.ko | grep -w bcmp`: no match, PASS.
|
||||
- `kldload /tmp/repo22-integration-20260808/erofs.ko`: PASS.
|
||||
- Repeated `mdconfig -a -t vnode -f IMAGE`, `mount -t erofs`, `umount`, and
|
||||
`mdconfig -d`: PASS for every fixture below.
|
||||
- `kldunload erofs`: PASS; final module, EROFS mount, and md-device counts were
|
||||
all zero.
|
||||
- New dmesg errors, traps, or panics: none.
|
||||
|
||||
## Existing xattr and ACL regression
|
||||
|
||||
- Inline user, trusted, and security xattrs: PASS.
|
||||
- Shared user xattrs and shared POSIX access ACL: PASS.
|
||||
- Packed long-prefix table and xattr-name-filter: PASS.
|
||||
- Access/default ACL decode and inherited child ACL: PASS.
|
||||
- Owner, owning-group, named-user, and other access matrix: PASS.
|
||||
- Read-only ACL/xattr mutation rejection: PASS.
|
||||
- TC117 malformed name length and value size: PASS. Xattr operations returned
|
||||
`EINTEGRITY`; directory metadata and file contents remained readable.
|
||||
- An invalid long-prefix reference without a declared prefix table is now
|
||||
skipped like Linux. Other valid xattrs and file data remain readable.
|
||||
|
||||
## New regression cases
|
||||
|
||||
- TC134 metabox shared nonzero base: PASS with
|
||||
`metabox-shared-nonzero-base.erofs`. The image has
|
||||
`SHARED_EA_IN_METABOX`, `xattr_blkaddr=1`, and a plain metabox carrier.
|
||||
`getextattr -qq user metaboxshared /mnt/repo22-integration/hello.txt`
|
||||
returned exactly `nonzero-base`.
|
||||
- TC135 metabox long-prefix backing: PASS with
|
||||
`metabox-prefix-shared.erofs`.
|
||||
`getextattr -qq user repo22.application.component.setting` on
|
||||
`/mnt/repo22-integration/long/file2.txt` returned `long-prefix-value`.
|
||||
Primary-image long-prefix fallback also passed with
|
||||
`long-prefix-primary-fallback.erofs` and the same expected value.
|
||||
- TC136 truncated metabox extension: PASS; mount returned `EINTEGRITY`.
|
||||
Out-of-range ishare prefix ID: PASS; mount returned `EINTEGRITY`.
|
||||
- TC137 shared xattr outside declared image: PASS; normal data and an in-bounds
|
||||
xattr remained readable, while the redirected entry returned `EINTEGRITY`.
|
||||
Prefix record outside declared image: PASS; mount failed. The valid primary
|
||||
fallback control mounted and returned the expected value.
|
||||
- TC138 unordered unique UID qualifiers: PASS and preserved order 3002, 2002.
|
||||
Header-only ACL: PASS and fell back to mode. Duplicate UID qualifier: PASS
|
||||
negative test and returned `EINTEGRITY`.
|
||||
- TC139 FIFO access ACL, list/get system xattr: PASS. `setfacl`, `setextattr`,
|
||||
and `rmextattr` all returned read-only filesystem errors.
|
||||
- TC140 compressed metabox: PASS with `metabox-large-shared.erofs`. On-disk
|
||||
qualification found `METABOX`, metabox inode datalayout 1
|
||||
(`EROFS_INODE_COMPRESSED_FULL`), and no fragment pcluster. A cold file read,
|
||||
the metabox long-prefix lookup, and a 231-byte xattr value all matched the
|
||||
source fixture.
|
||||
|
||||
## Final metabox and metadata-boundary smoke
|
||||
|
||||
The final combined module was exercised with these exact guest operations:
|
||||
|
||||
```sh
|
||||
kldload /tmp/repo22-integration-20260808/erofs.ko
|
||||
mdconfig -a -t vnode -f /tmp/repo22-integration-20260808/IMAGE.erofs
|
||||
mount -t erofs /dev/md0 /mnt/repo22-integration
|
||||
getextattr -qq user NAME /mnt/repo22-integration/PATH
|
||||
umount /mnt/repo22-integration
|
||||
mdconfig -d -u 0
|
||||
kldunload erofs
|
||||
```
|
||||
|
||||
- Compressed metabox and metabox long-prefix:
|
||||
`metabox-large-shared.erofs` returned `long-prefix-value` for
|
||||
`repo22.application.component.setting`; its regular file content also
|
||||
matched `long prefix fixture 1`.
|
||||
- Primary shared fallback while `METABOX` is enabled:
|
||||
`metabox-large-shared.erofs` has `SHARED_EA_IN_METABOX` clear and
|
||||
`xattr_blkaddr=1`; `shared_key` returned `repo22-shared-value` from the
|
||||
primary shared-xattr area.
|
||||
- `SHARED_EA_IN_METABOX` nonzero base:
|
||||
`metabox-shared-nonzero-base.erofs` returned `nonzero-base` from the shared
|
||||
entry addressed relative to metabox block 1.
|
||||
- Cross-metadata shared xattr: `shared-cross-metadata.erofs` returned
|
||||
`repo22-shared-value` for `shared_key` on `shared/file3.txt`.
|
||||
- Cross-metadata inline xattr: `xattr-cross-metadata.erofs` returned the exact
|
||||
expected `alpha`, `gamma`, and `delta` values on `file000`, `file090`, and
|
||||
`file179`. The metabox-specific inline boundary fixture also returned
|
||||
`valid-inline-boundary` for `crossboundary`.
|
||||
|
||||
The fragment-backed compressed metabox negative layout was **not generated and
|
||||
was not executed**. The passing TC140 fixture is compressed but non-fragment.
|
||||
The code still rejects a compressed metabox inode whose fragment flag is set;
|
||||
that rejection remains layout-reviewed rather than fixture-verified.
|
||||
|
||||
## Fixture qualification
|
||||
|
||||
The old `namespace-shared.erofs` contains an xattr entry with name index `0x80`
|
||||
but advertises no `XATTR_PREFIXES` feature and contains no prefix table. It is
|
||||
not a valid long-prefix fixture. The driver now follows Linux behavior by
|
||||
skipping that unresolved entry while preserving all valid xattrs and file data.
|
||||
|
||||
## Separate namei write set
|
||||
|
||||
The previously observed cold nested lookup issue was fixed by the separate
|
||||
`src/namei.c` and `src/dir.c` write set and passed TC141 in the same final
|
||||
integration build. Those source files are intentionally excluded from the
|
||||
xattr/ACL commit.
|
||||
Reference in New Issue
Block a user