Page MenuHomeFreeBSD

sbin/fsck_msdosfs: Correct off-by-two issue when determining FAT type.
ClosedPublic

Authored by delphij on Jan 8 2020, 8:56 AM.
Tags
None
Referenced Files
Unknown Object (File)
Fri, Mar 22, 8:43 PM
Unknown Object (File)
Fri, Mar 22, 8:43 PM
Unknown Object (File)
Fri, Mar 22, 8:43 PM
Unknown Object (File)
Fri, Mar 22, 8:43 PM
Unknown Object (File)
Fri, Mar 22, 8:43 PM
Unknown Object (File)
Sat, Mar 9, 8:42 AM
Unknown Object (File)
Jan 4 2024, 12:03 PM
Unknown Object (File)
Jan 4 2024, 12:03 PM
Subscribers

Details

Summary

Correct off-by-two issue when determining FAT type.

In the code we used NumClusters as the upper (non-inclusive) boundary
of valid cluster number, so the actual value was 2 (CLUST_FIRST) more
than the real number of clusters. This causes a FAT16 media with
65524 clusters be treated as FAT32 and might affect FAT12 media with
4084 clusters as well.

To fix this, we increment NumClusters by CLUST_FIRST after the type
determination.

PR: 243179

Test Plan

Create FAT16 media on a 2GiB storage and run fsck_msdosfs

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Sync with NetBSD which added more boundary checks.

Reduce the patch back to original (NetBSD sync was merged).

This revision was not accepted when it landed; it landed in state Needs Review.Jan 11 2020, 5:41 PM
This revision was automatically updated to reflect the committed changes.