{ "schema": 1, "gate": "G06", "candidate": "P15-052", "required_base": "ca7bb4fe6b33e4a1bdf423801134b0ed6bda86dd", "title": "exact on-disk and ABI errno taxonomy", "source_sha256": { "repo-pre-15/src/data.c": "cb22072bd4c092aa6a5376add8c8d9d6f94297f6292900ecc2eef9b01c69e92a", "repo-pre-15/src/erofs_fs.h": "0a49ac30ecbcea020c3909beb972ac4287ca704ebc49a9dccfcd6827884589e1", "repo-pre-15/src/inode.c": "ba6f77ddffa35cc1dd69ebb933fb16f8fa654f94552fd1d3f0255eb790673e6c", "repo-pre-15/src/internal.h": "c08ce3dbcafca5c341193c1670516e9bd5815c5f14ce2d637dbf6cfe5a74e972", "repo-pre-15/src/super.c": "8bb36e9aba15eab2ed10ebec65dccb52dc9ddb485a1a39df37f86f97502c674f", "repo-pre-15/src/xattr.c": "3498af0b547331b9a22babe96ea718ca2ba56ee669001bfdc2dbaab0a9dc42a9", "src-linux/data.c": "8625cdc01e5405f856178ae8fd559696ae85f607f19caf229b867a3b7479318a", "src-linux/internal.h": "4aa671896ff7c0ad32a9108c818ef62d16841c116706fdad391c40a530c81405", "src-linux/super.c": "8bda458cca758d8aa9c5a5b05361b2131b896f73fd194f6ad9a8e011e3481bf9", "src-linux/xattr.c": "c8394e5f6301225cbe7587f223485a368348eac7596c1ab0bbf965c99655ed4a" }, "function_errno_counts": { "repo-pre-15/src/data.c:erofs_map_blocks_chunk": { "EOVERFLOW": 6 }, "repo-pre-15/src/xattr.c:erofs_xattr_backing_size": { "EOVERFLOW": 1 }, "repo-pre-15/src/xattr.c:erofs_xattr_read_backing": { "EOVERFLOW": 1 }, "repo-pre-15/src/xattr.c:erofs_xattr_read_metadata": { "EOVERFLOW": 2 }, "repo-pre-15/src/xattr.c:erofs_xattr_shared_entry_offset": { "EOVERFLOW": 2 } }, "targets": [ { "id": "data.chunk.inode_plus_isize", "path": "repo-pre-15/src/data.c", "function": "erofs_map_blocks_chunk", "field": "inode_off", "needle": "vi->inode_off > UINT64_MAX - vi->inode_isize", "prototype_mutation": "inode_off=UINT64_MAX-31" }, { "id": "data.chunk.isize_plus_xattr", "path": "repo-pre-15/src/data.c", "function": "erofs_map_blocks_chunk", "field": "xattr_isize", "needle": "vi->inode_off + vi->inode_isize > UINT64_MAX - vi->xattr_isize", "prototype_mutation": "xattr_isize=128 with inode_off near UINT64_MAX" }, { "id": "data.chunk.align", "path": "repo-pre-15/src/data.c", "function": "erofs_map_blocks_chunk", "field": "inode_off", "needle": "idx_base > UINT64_MAX - (entry_size - 1)", "prototype_mutation": "inode_off=UINT64_MAX-3" }, { "id": "data.chunk.index_multiply", "path": "repo-pre-15/src/data.c", "function": "erofs_map_blocks_chunk", "field": "chunk_idx", "needle": "chunk_idx > (UINT64_MAX - idx_base) / entry_size", "prototype_mutation": "chunk_idx=(UINT64_MAX-4096)/8+1" }, { "id": "data.chunk.image_size_shift", "path": "repo-pre-15/src/data.c", "function": "erofs_map_blocks_chunk", "field": "blocks", "needle": "sbi->blocks > (UINT64_MAX >> sbi->blkszbits)", "prototype_mutation": "blocks=(UINT64_MAX>>12)+1" }, { "id": "data.chunk.physical_shift", "path": "repo-pre-15/src/data.c", "function": "erofs_map_blocks_chunk", "field": "blkaddr", "needle": "blkaddr > (UINT64_MAX >> sbi->blkszbits)", "prototype_mutation": "blkaddr=(UINT64_MAX>>12)+1" }, { "id": "data.chunk.physical_plus_offset", "path": "repo-pre-15/src/data.c", "function": "erofs_map_blocks_chunk", "field": "chunk_off", "needle": "chunk_off > UINT64_MAX - map->m_pa", "prototype_mutation": "chunk_off=4096 with blkaddr=UINT64_MAX>>12" }, { "id": "xattr.backing_size.shift", "path": "repo-pre-15/src/xattr.c", "function": "erofs_xattr_backing_size", "field": "blocks", "needle": "sbi->blocks > (UINT64_MAX >> sbi->blkszbits)", "prototype_mutation": "blocks=(UINT64_MAX>>12)+1" }, { "id": "xattr.metadata.align", "path": "repo-pre-15/src/xattr.c", "function": "erofs_xattr_read_metadata", "field": "offp", "needle": "*offp > UINT64_MAX - (sizeof(struct erofs_xattr_entry) - 1)", "prototype_mutation": "offp=UINT64_MAX-2" }, { "id": "xattr.metadata.header_add", "path": "repo-pre-15/src/xattr.c", "function": "erofs_xattr_read_metadata", "field": "aligned_off", "needle": "off > UINT64_MAX - sizeof(raw_len)", "prototype_mutation": "aligned_off=UINT64_MAX-1" }, { "id": "xattr.shared.base_shift", "path": "repo-pre-15/src/xattr.c", "function": "erofs_xattr_shared_entry_offset", "field": "xattr_blkaddr", "needle": "sbi->xattr_blkaddr > (UINT64_MAX >> sbi->blkszbits)", "prototype_mutation": "xattr_blkaddr=(UINT64_MAX>>12)+1" }, { "id": "xattr.shared.base_plus_relative", "path": "repo-pre-15/src/xattr.c", "function": "erofs_xattr_shared_entry_offset", "field": "shared_id", "needle": "relative > UINT64_MAX - base", "prototype_mutation": "shared_id=1024 with base near UINT64_MAX" } ], "preservation_controls": [ { "id": "abi.off_gt_int64", "freebsd": "+EOVERFLOW", "linux": "-EOVERFLOW semantic", "result": "blocked first by backing-size range for every mounted primary provider" }, { "id": "corruption.range_past_eof", "freebsd": "+EINTEGRITY", "linux": "-EFSCORRUPTED semantic", "result": "preserve" }, { "id": "eof.zero_length", "freebsd": "0", "linux": "0", "result": "preserve" }, { "id": "io.provider_error", "freebsd": "+EIO", "linux": "negative PTR_ERR", "result": "preserve exact provider error" }, { "id": "io.provider_short_media", "freebsd": "+ENXIO", "linux": "negative provider error", "result": "preserve exact media-size error" }, { "id": "short_read.logical_backing", "freebsd": "+EINTEGRITY before I/O", "linux": "-EFSCORRUPTED semantic", "result": "preserve" }, { "id": "unsupported.exact_xattr_header", "freebsd": "+EOPNOTSUPP", "linux": "-EOPNOTSUPP", "result": "preserve" }, { "id": "allocation.xattr_prefixes", "freebsd": "+ENOMEM", "linux": "-ENOMEM", "result": "out of B20 scope" } ], "prototype_identity": { "path": "/work/pre15-gate-prep-20260814T125129Z/G06", "errno_model.py": "dca427acf5c919f78d46ab8dbb198778fbe2af0869043d93b4eddf9f03814a4e", "corpus/errno-vectors.json": "dde22db91f7fa2613631b4acb75a5d60e255a1c1564be6800db377922a6a7d4e", "input.json": "0835defd288cb6a73337c116c4148daee94b78c435732032b5de40d1b1559715", "oracle.md": "62e6703e8051b832108b4ea39ece232f06aea5dcfb221d7e8c17faf7ae527208", "replay-base.sh": "2162fb645693ce740563a2406ea28ab86dc116a33163e026fc4d491c2df3e8a5" }, "decision": { "go": "every target is independently reachable from one validated on-disk field mutation, reaches its named source branch, and has one unique source class", "stop": "any target is unreachable after current decode/mount bounds, any prototype mutation injects a local rather than an on-disk input, or any source class is ambiguous", "atomicity": "P15-052 has no partial source implementation" }, "timeouts": { "host_seconds": 240, "qemu_seconds": 1200 }, "qemu_required_after_host_stop": false, "full_feature_suite_required": false }