This commit is contained in:
2026-08-18 09:20:44 +02:00
commit b826cd721a
522 changed files with 93730 additions and 0 deletions
+416
View File
@@ -0,0 +1,416 @@
{
"schema": 1,
"gate": "G02",
"candidate": "P15-005",
"required_base": "edf098905a34de764185e72fc7e92d7b8f4e7285",
"title": "metadata buffer ownership and frozen map tuple oracle",
"required_categories": [
"plain",
"inline",
"hole",
"chunk",
"multidevice",
"compressed",
"fragment",
"partial-reference",
"post-EOF",
"bounds",
"overflow"
],
"tuple_fields": [
"m_la",
"m_pa",
"m_llen",
"m_plen",
"m_deviceid",
"m_flags",
"errno",
"acquire_count",
"release_count"
],
"errno": {
"EIO": 5,
"EINVAL": 22,
"EOPNOTSUPP": 45,
"EOVERFLOW": 84,
"EINTEGRITY": 97
},
"source_paths": [
"repo-pre-15/src/internal.h",
"repo-pre-15/src/data.c",
"repo-pre-15/src/decompressor.c",
"repo-pre-15/src/inode.c",
"repo-pre-15/src/super.c",
"repo-pre-15/src/xattr.c",
"repo-pre-15/src/zdata.c",
"repo-pre-15/src/zmap.c",
"repo-pre-15/src/erofs_fs.h",
"src-linux/internal.h",
"src-linux/data.c",
"src-linux/decompressor.c",
"src-linux/inode.c",
"src-linux/super.c",
"src-linux/xattr.c",
"src-linux/zdata.c",
"src-linux/zmap.c"
],
"linux_sha256": {
"src-linux/internal.h": "4aa671896ff7c0ad32a9108c818ef62d16841c116706fdad391c40a530c81405",
"src-linux/data.c": "8625cdc01e5405f856178ae8fd559696ae85f607f19caf229b867a3b7479318a",
"src-linux/decompressor.c": "caf1c501d00a5a2c9cda5fc0b59d2823eaedf0161a130ca69cd5e7c455128709",
"src-linux/inode.c": "a15562e0782e155a0744a7ba9d2f557519a583b64853ed75180cef2b4dfae1b3",
"src-linux/super.c": "8bda458cca758d8aa9c5a5b05361b2131b896f73fd194f6ad9a8e011e3481bf9",
"src-linux/xattr.c": "c8394e5f6301225cbe7587f223485a368348eac7596c1ab0bbf965c99655ed4a",
"src-linux/zdata.c": "358869da60dcdafd13bc1ff0cd28e864c13b46a49d9f556d9b37139f7e0f4e79",
"src-linux/zmap.c": "4fb34c024bfaec9d2294ba2f85069bb2f727b378ebf4848814e081f91ea022cc"
},
"linux_semantic_anchors": {
"src-linux/internal.h": [
"struct erofs_buf {",
"#define __EROFS_BUF_INITIALIZER",
"void erofs_put_metabuf(struct erofs_buf *buf);"
],
"src-linux/data.c": [
"void erofs_put_metabuf(struct erofs_buf *buf)",
"folio_put(page_folio(buf->page));",
"buf->page = NULL;",
"struct erofs_buf buf = __EROFS_BUF_INITIALIZER;",
"erofs_put_metabuf(&buf);"
],
"src-linux/decompressor.c": [
"struct erofs_buf buf = __EROFS_BUF_INITIALIZER;",
"erofs_put_metabuf(&buf);"
],
"src-linux/inode.c": [
"struct erofs_buf buf = __EROFS_BUF_INITIALIZER;",
"erofs_put_metabuf(&buf);"
],
"src-linux/super.c": [
"struct erofs_buf buf = __EROFS_BUF_INITIALIZER;",
"erofs_put_metabuf(&buf);"
],
"src-linux/xattr.c": [
"struct erofs_buf buf = __EROFS_BUF_INITIALIZER;",
"erofs_put_metabuf(&buf);"
],
"src-linux/zdata.c": [
"struct erofs_buf buf = __EROFS_BUF_INITIALIZER;",
"erofs_put_metabuf(&buf);"
],
"src-linux/zmap.c": [
"erofs_put_metabuf(&map.buf);"
]
},
"baseline_function_sha256": {
"data.c:erofs_map_blocks_chunk": "b850ab686f61e6265ef0780c1363f570ceb6afab004b5d9c527d728f00a0fa0e",
"data.c:erofs_read_metadata": "1ea2f9bad3c60019c0f373c98444dcd1dd4bb178875a170313868a56cd314436",
"data.c:erofs_read_data": "9d962f6086f5fc4a66bbfd9b27d05aa71234bb8266a3c383ec693298966e5e63",
"data.c:erofs_read_uio": "05d3ad9e8b25b7e9b6d62f4fd836ab204bc57b90781fc140cc498d1ab8fe0a78",
"decompressor.c:z_erofs_read_cfg": "77ddaf24f5317e0b83b72d85f64aa624cbd15b71a9602d2217b11dd382e1f719",
"decompressor.c:z_erofs_parse_cfgs": "d800c9a52b9f9333f57da2f67e27d238320866b0f8816929b32f119c84a69eb4",
"inode.c:erofs_read_inode": "ed65faffe7a607e95bca50de7e28cf592a0500b7363935991de959269a200fe1",
"super.c:erofs_load_generation_seed": "98299634491a22b427820a28a7ec1d23268ab1fe02d1fc0515774da70900f071",
"super.c:erofs_superblock_csum_verify": "cd56c29a6cf795de359f6642509a4a152e5a1860ec32a997e91ebf81e7877096",
"super.c:erofs_scan_devices": "2743af3b9d9d7e53c0102bc197026adf58ef6bf7adbf5cdbe8716c9e25b2a547",
"super.c:erofs_read_superblock": "d605349d9604d89d4bb413c42abc71f13b8fafa43b1fda671fbd4613f2a3ed6f",
"xattr.c:erofs_xattr_read_backing": "df65cf9e391d2f17f79beeecda24fbf6c1be495dd3baf65121c226c4054ccf75",
"xattr.c:erofs_xattr_read_metadata": "ed726755b28f1c1a82a07a956b889bd633da45cdd6671c91c7bc4db9d4006096",
"xattr.c:erofs_xattr_load_body": "c8684629f78920cefb6a6d61ddad5ed42ba499d817798f81086282c827e54aa5",
"xattr.c:erofs_xattr_load_shared_entry": "e47145a775685cfaeb9341a7cc1cc742c73145e34f4b81d8fc5dac35d765e17f",
"xattr.c:erofs_inode_has_noacl": "8098be9fef8148498a2080e02db2876d9592f1af10ca551278902e3aa4c3428e",
"xattr.c:erofs_xattr_iter_shared": "1ec7756ef31dd6c51e04d92656440a9dbca5e9e9fe38c359eed744ad16b39b2c",
"xattr.c:erofs_getxattr": "9ee7d7effcfa3d23ab4d4ce1e3e7d638c048085368b2f3a2db3dfdadf911cd34",
"xattr.c:erofs_listxattr": "6f75c9f8c50c331daba1bb0c1b757390c3ff873ee7419b2dd2b35dfc3db84ea6",
"xattr.c:erofs_xattr_prefixes_init": "7aaade8116337ad1026da04777bf1d9f8aefaa246623d6c32080af153fb93abd",
"zdata.c:z_erofs_read_extent": "327e3a22b9c89c410d1ecef6934dcdaf194a4b6962737ea5f3e4f21d10694b13",
"zdata.c:z_erofs_do_read": "2096f98b6d19e1c5f80edb6de9fbfe15bb27f006e2510bcb068f920c23aa38ec",
"zmap.c:z_erofs_read_index": "cf8ca75c1d600f2f708e73e723a7abaee7c98f9813eb8f432e1f96dd1602d82b",
"zmap.c:z_erofs_load_full_lcluster": "751d456964fcdcf66f20d22c1f22adef209767aef1bab9d0857f36df7d2c37b2",
"zmap.c:z_erofs_load_compact_lcluster": "4c23a8a966262b5a365bc874718316daa616cc97dfe3e2711570f81e7e3b953c",
"zmap.c:z_erofs_read_extent": "454064ca59dfd0674af5520c4a965be659d2b7769403cd8d84bd9657e0145f27",
"zmap.c:z_erofs_map_blocks_ext": "31c9310f801395fe01d38515ee42ef49c1d07ceba0b86b612bb140ec180238b0",
"zmap.c:z_erofs_fill_inode": "125f0c3492c152415978226919e782d355a32fc49cf8f49456eb398a4c721032"
},
"direct_metadata_functions": [
"data.c:erofs_map_blocks_chunk",
"data.c:erofs_read_data",
"data.c:erofs_read_uio",
"decompressor.c:z_erofs_read_cfg",
"inode.c:erofs_read_inode",
"super.c:erofs_load_generation_seed",
"super.c:erofs_superblock_csum_verify",
"super.c:erofs_scan_devices",
"super.c:erofs_read_superblock",
"xattr.c:erofs_xattr_read_backing",
"zdata.c:z_erofs_read_extent",
"zmap.c:z_erofs_fill_inode",
"zmap.c:z_erofs_map_blocks_ext",
"zmap.c:z_erofs_read_extent",
"zmap.c:z_erofs_read_index"
],
"candidate_ownership_contract": {
"object_local_counts": {
"data.c:erofs_map_blocks_chunk": 1,
"data.c:erofs_read_metadata": 0,
"data.c:erofs_read_data": 1,
"data.c:erofs_read_uio": 1,
"decompressor.c:z_erofs_read_cfg": 1,
"decompressor.c:z_erofs_parse_cfgs": 1,
"inode.c:erofs_read_inode": 1,
"super.c:erofs_load_generation_seed": 1,
"super.c:erofs_superblock_csum_verify": 1,
"super.c:erofs_scan_devices": 1,
"super.c:erofs_read_superblock": 1,
"xattr.c:erofs_xattr_read_backing": 0,
"xattr.c:erofs_xattr_read_metadata": 1,
"xattr.c:erofs_xattr_load_body": 1,
"xattr.c:erofs_xattr_load_shared_entry": 1,
"xattr.c:erofs_inode_has_noacl": 1,
"xattr.c:erofs_xattr_iter_shared": 1,
"xattr.c:erofs_getxattr": 1,
"xattr.c:erofs_listxattr": 1,
"xattr.c:erofs_xattr_prefixes_init": 1,
"zdata.c:z_erofs_read_extent": 1,
"zdata.c:z_erofs_do_read": 0,
"zmap.c:z_erofs_read_index": 0,
"zmap.c:z_erofs_load_full_lcluster": 1,
"zmap.c:z_erofs_load_compact_lcluster": 1,
"zmap.c:z_erofs_read_extent": 1,
"zmap.c:z_erofs_map_blocks_ext": 1,
"zmap.c:z_erofs_fill_inode": 1
},
"put_counts": {
"data.c:erofs_map_blocks_chunk": 1,
"data.c:erofs_read_metadata": 0,
"data.c:erofs_read_data": 1,
"data.c:erofs_read_uio": 1,
"decompressor.c:z_erofs_read_cfg": 1,
"decompressor.c:z_erofs_parse_cfgs": 1,
"inode.c:erofs_read_inode": 18,
"super.c:erofs_load_generation_seed": 1,
"super.c:erofs_superblock_csum_verify": 1,
"super.c:erofs_scan_devices": 2,
"super.c:erofs_read_superblock": 1,
"xattr.c:erofs_xattr_read_backing": 0,
"xattr.c:erofs_xattr_read_metadata": 1,
"xattr.c:erofs_xattr_load_body": 1,
"xattr.c:erofs_xattr_load_shared_entry": 1,
"xattr.c:erofs_inode_has_noacl": 1,
"xattr.c:erofs_xattr_iter_shared": 1,
"xattr.c:erofs_getxattr": 1,
"xattr.c:erofs_listxattr": 1,
"xattr.c:erofs_xattr_prefixes_init": 2,
"zdata.c:z_erofs_read_extent": 1,
"zdata.c:z_erofs_do_read": 0,
"zmap.c:z_erofs_read_index": 0,
"zmap.c:z_erofs_load_full_lcluster": 2,
"zmap.c:z_erofs_load_compact_lcluster": 7,
"zmap.c:z_erofs_read_extent": 1,
"zmap.c:z_erofs_map_blocks_ext": 1,
"zmap.c:z_erofs_fill_inode": 6
},
"legacy_release_counts": {
"data.c:erofs_read_data": 1,
"data.c:erofs_read_uio": 1,
"zdata.c:z_erofs_read_extent": 1,
"zdata.c:z_erofs_do_read": 1
},
"raw_bread_counts": {
"data.c:erofs_read_metadata": 1,
"xattr.c:erofs_xattr_read_backing": 1
},
"acquire_apis": [
"erofs_read_metadata",
"z_erofs_read_cfg",
"erofs_xattr_read_backing",
"erofs_xattr_read_metadata",
"erofs_xattr_load_body",
"erofs_xattr_load_shared_entry",
"z_erofs_read_index"
],
"transfer_functions": [
"data.c:erofs_read_metadata",
"decompressor.c:z_erofs_read_cfg",
"xattr.c:erofs_xattr_read_backing",
"xattr.c:erofs_xattr_read_metadata",
"zmap.c:z_erofs_read_index"
]
},
"tuple_cases": [
{
"id": "plain-block-edge",
"engine": "data",
"category": "plain",
"sbi": {"block_size": 4096, "blkszbits": 12, "blocks": 64, "device_id_mask": 65535},
"inode": {"nid": 1, "size": 12288, "datalayout": 0, "startblk": 32, "inode_off": 0, "inode_isize": 32, "xattr_isize": 0, "chunkbits": 12, "chunkformat": 0},
"request": 4095,
"reader": {"mode": "unused", "bytes_hex": ""},
"expected": {"m_la": 4095, "m_pa": 135167, "m_llen": 1, "m_plen": 1, "m_deviceid": 0, "m_flags": 1, "errno": 0, "acquire_count": 0, "release_count": 0}
},
{
"id": "inline-tail",
"engine": "data",
"category": "inline",
"sbi": {"block_size": 4096, "blkszbits": 12, "blocks": 64, "device_id_mask": 65535},
"inode": {"nid": 1, "size": 5000, "datalayout": 2, "startblk": 40, "inode_off": 8192, "inode_isize": 64, "xattr_isize": 32, "chunkbits": 12, "chunkformat": 0},
"request": 4500,
"reader": {"mode": "unused", "bytes_hex": ""},
"expected": {"m_la": 4500, "m_pa": 8692, "m_llen": 500, "m_plen": 500, "m_deviceid": 0, "m_flags": 3, "errno": 0, "acquire_count": 0, "release_count": 0}
},
{
"id": "plain-hole",
"engine": "data",
"category": "hole",
"sbi": {"block_size": 4096, "blkszbits": 12, "blocks": 64, "device_id_mask": 65535},
"inode": {"nid": 1, "size": 4096, "datalayout": 0, "startblk": 18446744073709551615, "inode_off": 0, "inode_isize": 32, "xattr_isize": 0, "chunkbits": 12, "chunkformat": 0},
"request": 512,
"reader": {"mode": "unused", "bytes_hex": ""},
"expected": {"m_la": 512, "m_pa": 0, "m_llen": 3584, "m_plen": 3584, "m_deviceid": 0, "m_flags": 0, "errno": 0, "acquire_count": 0, "release_count": 0}
},
{
"id": "chunk-index",
"engine": "data",
"category": "chunk",
"sbi": {"block_size": 4096, "blkszbits": 12, "blocks": 128, "device_id_mask": 65535},
"inode": {"nid": 1, "size": 20000, "datalayout": 4, "startblk": 0, "inode_off": 0, "inode_isize": 64, "xattr_isize": 0, "chunkbits": 13, "chunkformat": 32},
"request": 9000,
"reader": {"mode": "ok", "bytes_hex": "0000000000000000000000004d000000"},
"expected": {"m_la": 9000, "m_pa": 316200, "m_llen": 7384, "m_plen": 7384, "m_deviceid": 0, "m_flags": 1, "errno": 0, "acquire_count": 1, "release_count": 1}
},
{
"id": "chunk-48bit-device2",
"engine": "data",
"category": "multidevice",
"sbi": {"block_size": 4096, "blkszbits": 12, "blocks": 128, "device_id_mask": 65535},
"inode": {"nid": 1, "size": 24576, "datalayout": 4, "startblk": 0, "inode_off": 0, "inode_isize": 64, "xattr_isize": 0, "chunkbits": 13, "chunkformat": 96},
"request": 12345,
"reader": {"mode": "ok", "bytes_hex": "00000000000000000100020005000000"},
"expected": {"m_la": 12345, "m_pa": 17592186069049, "m_llen": 4039, "m_plen": 4039, "m_deviceid": 2, "m_flags": 1, "errno": 0, "acquire_count": 1, "release_count": 1}
},
{
"id": "chunk-index-out-of-provider",
"engine": "data",
"category": "bounds",
"sbi": {"block_size": 4096, "blkszbits": 12, "blocks": 2, "device_id_mask": 65535},
"inode": {"nid": 1, "size": 4096, "datalayout": 4, "startblk": 0, "inode_off": 8192, "inode_isize": 0, "xattr_isize": 0, "chunkbits": 12, "chunkformat": 32},
"request": 0,
"reader": {"mode": "unused", "bytes_hex": ""},
"expected": {"m_la": 0, "m_pa": 0, "m_llen": 0, "m_plen": 0, "m_deviceid": 0, "m_flags": 0, "errno": 97, "acquire_count": 0, "release_count": 0}
},
{
"id": "chunk-shift-overflow-after-acquire",
"engine": "data",
"category": "overflow",
"sbi": {"block_size": 131072, "blkszbits": 17, "blocks": 1, "device_id_mask": 65535},
"inode": {"nid": 1, "size": 4096, "datalayout": 4, "startblk": 0, "inode_off": 0, "inode_isize": 64, "xattr_isize": 0, "chunkbits": 12, "chunkformat": 96},
"request": 0,
"reader": {"mode": "ok", "bytes_hex": "0080000000000000"},
"expected": {"m_la": 0, "m_pa": 0, "m_llen": 4096, "m_plen": 4096, "m_deviceid": 0, "m_flags": 0, "errno": 84, "acquire_count": 1, "release_count": 1}
},
{
"id": "chunk-index-short-read",
"engine": "data",
"category": "bounds",
"supplemental": true,
"sbi": {"block_size": 4096, "blkszbits": 12, "blocks": 128, "device_id_mask": 65535},
"inode": {"nid": 1, "size": 4096, "datalayout": 4, "startblk": 0, "inode_off": 0, "inode_isize": 64, "xattr_isize": 0, "chunkbits": 12, "chunkformat": 32},
"request": 0,
"reader": {"mode": "short", "bytes_hex": "00000000"},
"expected": {"m_la": 0, "m_pa": 0, "m_llen": 0, "m_plen": 0, "m_deviceid": 0, "m_flags": 0, "errno": 5, "acquire_count": 0, "release_count": 0}
},
{
"id": "explicit-compressed",
"engine": "zmap",
"category": "compressed",
"sbi": {"block_size": 4096, "blkszbits": 12, "available_compr_algs": 1, "packed_size": 16384},
"inode": {"nid": 2, "size": 4096, "datalayout": 1, "inode_off": 0, "inode_isize": 0, "xattr_isize": 0, "z_advise": 5, "z_lclusterbits": 12, "z_extents": 1},
"request": 0,
"reader": {"mode": "ok", "base": 16, "records": [{"plen": 268437504, "pstart": 74565, "lstart": 0}]},
"expected": {"m_la": 0, "m_pa": 74565, "m_llen": 4096, "m_plen": 2048, "m_deviceid": 0, "m_flags": 1, "errno": 0, "acquire_count": 1, "release_count": 1}
},
{
"id": "explicit-partial-reference",
"engine": "zmap",
"category": "partial-reference",
"sbi": {"block_size": 4096, "blkszbits": 12, "available_compr_algs": 1, "packed_size": 16384},
"inode": {"nid": 2, "size": 4096, "datalayout": 1, "inode_off": 0, "inode_isize": 0, "xattr_isize": 0, "z_advise": 5, "z_lclusterbits": 12, "z_extents": 1},
"request": 0,
"reader": {"mode": "ok", "base": 16, "records": [{"plen": 402654208, "pstart": 262144, "lstart": 0}]},
"expected": {"m_la": 0, "m_pa": 262144, "m_llen": 4096, "m_plen": 1024, "m_deviceid": 0, "m_flags": 9, "errno": 0, "acquire_count": 1, "release_count": 1}
},
{
"id": "explicit-fragment-tail",
"engine": "zmap",
"category": "fragment",
"sbi": {"block_size": 4096, "blkszbits": 12, "available_compr_algs": 1, "packed_size": 16384},
"inode": {"nid": 2, "size": 6144, "datalayout": 1, "inode_off": 0, "inode_isize": 0, "xattr_isize": 0, "z_advise": 37, "z_lclusterbits": 12, "z_extents": 1},
"request": 4096,
"reader": {"mode": "ok", "base": 16, "records": [{"plen": 8192, "pstart": 0, "lstart": 4096}]},
"expected": {"m_la": 4096, "m_pa": 0, "m_llen": 2048, "m_plen": 8192, "m_deviceid": 0, "m_flags": 16, "errno": 0, "acquire_count": 1, "release_count": 1}
},
{
"id": "compressed-post-eof",
"engine": "zmap",
"category": "post-EOF",
"sbi": {"block_size": 4096, "blkszbits": 12, "available_compr_algs": 1, "packed_size": 16384},
"inode": {"nid": 2, "size": 4096, "datalayout": 1, "inode_off": 0, "inode_isize": 0, "xattr_isize": 0, "z_advise": 5, "z_lclusterbits": 12, "z_extents": 1},
"request": 4113,
"reader": {"mode": "unused", "base": 16, "records": []},
"expected": {"m_la": 4096, "m_pa": 0, "m_llen": 18, "m_plen": 0, "m_deviceid": 0, "m_flags": 0, "errno": 0, "acquire_count": 0, "release_count": 0}
},
{
"id": "compressed-index-short-read",
"engine": "zmap",
"category": "compressed",
"supplemental": true,
"sbi": {"block_size": 4096, "blkszbits": 12, "available_compr_algs": 1, "packed_size": 16384},
"inode": {"nid": 2, "size": 4096, "datalayout": 1, "inode_off": 0, "inode_isize": 0, "xattr_isize": 0, "z_advise": 5, "z_lclusterbits": 12, "z_extents": 1},
"request": 0,
"reader": {"mode": "short", "base": 16, "bytes_hex": "0000000000000000"},
"expected": {"m_la": 0, "m_pa": 0, "m_llen": 0, "m_plen": 0, "m_deviceid": 0, "m_flags": 0, "errno": 5, "acquire_count": 0, "release_count": 0}
},
{
"id": "compressed-sanity-error-after-acquire",
"engine": "zmap",
"category": "compressed",
"supplemental": true,
"sbi": {"block_size": 4096, "blkszbits": 12, "available_compr_algs": 1, "packed_size": 16384},
"inode": {"nid": 2, "size": 4096, "datalayout": 1, "inode_off": 0, "inode_isize": 0, "xattr_isize": 0, "z_advise": 5, "z_lclusterbits": 12, "z_extents": 1},
"request": 0,
"reader": {"mode": "ok", "base": 16, "records": [{"plen": 1879049216, "pstart": 74565, "lstart": 0}]},
"expected": {"m_la": 0, "m_pa": 74565, "m_llen": 0, "m_plen": 1024, "m_deviceid": 0, "m_flags": 1, "errno": 45, "acquire_count": 1, "release_count": 1}
}
],
"ownership_paths": [
{"id": "plain-inline-success", "consumer": "plain", "function": "data.c:erofs_read_data", "path": "metadata read succeeds; copied raw output is caller-owned", "acquire_count": 1, "release_count": 1},
{"id": "plain-inline-short-read", "consumer": "plain", "function": "data.c:erofs_read_data", "path": "metadata read fails before ownership transfer", "acquire_count": 0, "release_count": 0},
{"id": "map-chunk-success", "consumer": "map", "function": "data.c:erofs_map_blocks_chunk", "path": "index acquired, decoded, and released", "acquire_count": 1, "release_count": 1},
{"id": "map-chunk-post-acquire-error", "consumer": "map", "function": "data.c:erofs_map_blocks_chunk", "path": "index released before physical shift overflow", "acquire_count": 1, "release_count": 1},
{"id": "map-chunk-short-read", "consumer": "map", "function": "data.c:erofs_map_blocks_chunk", "path": "short index fails before acquire", "acquire_count": 0, "release_count": 0},
{"id": "compressed-config-success", "consumer": "compressed", "function": "decompressor.c:z_erofs_read_cfg", "path": "length released; payload transferred then released by parse_cfgs", "acquire_count": 2, "release_count": 2},
{"id": "compressed-config-second-short", "consumer": "compressed", "function": "decompressor.c:z_erofs_read_cfg", "path": "length released; payload not acquired", "acquire_count": 1, "release_count": 1},
{"id": "compressed-data-decode-error", "consumer": "compressed", "function": "zdata.c:z_erofs_read_extent", "path": "metadata input released after decoder error", "acquire_count": 1, "release_count": 1},
{"id": "compressed-map-success", "consumer": "compressed", "function": "zmap.c:z_erofs_read_extent", "path": "extent record copied then released", "acquire_count": 1, "release_count": 1},
{"id": "compressed-map-short", "consumer": "compressed", "function": "zmap.c:z_erofs_read_extent", "path": "short record fails before acquire", "acquire_count": 0, "release_count": 0},
{"id": "inode-compact-success", "consumer": "inode", "function": "inode.c:erofs_read_inode", "path": "compact inode decoded and released", "acquire_count": 1, "release_count": 1},
{"id": "inode-invalid-format", "consumer": "inode", "function": "inode.c:erofs_read_inode", "path": "first acquired inode released on format rejection", "acquire_count": 1, "release_count": 1},
{"id": "inode-extended-second-short", "consumer": "inode", "function": "inode.c:erofs_read_inode", "path": "compact probe released; extended read not acquired", "acquire_count": 1, "release_count": 1},
{"id": "inode-extended-success", "consumer": "inode", "function": "inode.c:erofs_read_inode", "path": "compact probe and extended inode each released", "acquire_count": 2, "release_count": 2},
{"id": "super-read-success", "consumer": "super", "function": "super.c:erofs_read_superblock", "path": "super bytes copied and released before validation", "acquire_count": 1, "release_count": 1},
{"id": "super-read-short", "consumer": "super", "function": "super.c:erofs_read_superblock", "path": "short provider read fails before acquire", "acquire_count": 0, "release_count": 0},
{"id": "super-device-validation-error", "consumer": "super", "function": "super.c:erofs_scan_devices", "path": "device table released through out label", "acquire_count": 1, "release_count": 1},
{"id": "xattr-prefix-success", "consumer": "xattr", "function": "xattr.c:erofs_xattr_read_metadata", "path": "length released; prefix transferred then released by caller", "acquire_count": 2, "release_count": 2},
{"id": "xattr-prefix-invalid-length", "consumer": "xattr", "function": "xattr.c:erofs_xattr_read_metadata", "path": "length record released before validation error", "acquire_count": 1, "release_count": 1},
{"id": "xattr-prefix-second-short", "consumer": "xattr", "function": "xattr.c:erofs_xattr_read_metadata", "path": "length released; prefix not acquired", "acquire_count": 1, "release_count": 1},
{"id": "xattr-body-validation-error", "consumer": "xattr", "function": "xattr.c:erofs_xattr_load_body", "path": "body released through fail label", "acquire_count": 1, "release_count": 1},
{"id": "xattr-get-iterator-error", "consumer": "xattr", "function": "xattr.c:erofs_getxattr", "path": "body released after inline/shared iterator error", "acquire_count": 1, "release_count": 1}
],
"decision": {
"go": "all required categories observed; every legal tuple equals expected by field; each successful acquisition has one release; short reads acquire nothing; Linux ownership anchors and all audited consumer bodies are present",
"stop": "missing category, legal tuple delta, unexplained errno, incomplete direct consumer inventory, or any acquire/release mismatch",
"h07": "success and request before EOF implies positive m_llen"
},
"timeouts": {"host_seconds": 240, "qemu_seconds": 1200},
"qemu_required_for_this_candidate_gate": false,
"full_feature_suite_required": false
}