<@U0BKXHU8F1D> for the NTFS patch, fable says the ...
# aros
k
@Gareth Davidson for the NTFS patch, fable says the following -: Problems to raise (line numbers are at PR head fe8346c) 1. Unbounded recursion in FindMFTAttrib, ntfs.c:693-701. - If $MFT's base record has an attribute-list entry for $DATA but no $DATA attribute itself, the function calls itself until the stack is gone (27,000+ frames in the harness, at mount). - Master with only the struct fix fails that image cleanly, so this is new. - The data == NULL return on line 700 also leaks base_at's buffer. - Suggested fix: have the bootstrap lookup walk only the base record and never enter the list. 2. Use-after-free for directories whose $INDEX_ROOT sits in an extension record, direntry.c:73-88. - dh->idx_root points into emft_buf, which FreeMFTAttrib frees a few lines later; ProcessFSEntry then reads it. - The code is old, but before this PR the attribute-list path never worked, so it is newly reachable. - A 300-file directory with long names was enough to trigger it. 3. Cache_GetBlock still dereferences NULL on a failed read, cache.c:236. - The PR's "report read failures" returns in ReadMFTAttribData are therefore never reached; an injected read error crashes instead. - rom/filesys/fat/cache.c already has the guard: *data = b ? (b->data + data_offset) : NULL;. 4. Minor. - The (UQUAD) cast for first_device_sector does nothing: the field, AccessDisk's num and BlockRange.num are all ULONG. - A non-resident attribute list is only capped at 4 GB (ntfs.c:664); NTFS limits them to 256 KB. - The AF_GPOS code is now dead. - FindMFTAttrib and the read loop lost all their D(bug()) tracing and are much denser than the surrounding style. - The PR title says "NFTS".
👍 1