204 lines
7.4 KiB
JSON
204 lines
7.4 KiB
JSON
{
|
|
"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
|
|
}
|