git: d5c1fa0ec09e - releng/13.4 - msdosfs: fix cluster limit when mounting FAT-16 file systems

From: Stefan Eßer <se_at_FreeBSD.org>
Date: Thu, 15 Aug 2024 21:47:13 UTC
The branch releng/13.4 has been updated by se:

URL: https://cgit.FreeBSD.org/src/commit/?id=d5c1fa0ec09e34040c9c9941c27e38b583c60d86

commit d5c1fa0ec09e34040c9c9941c27e38b583c60d86
Author:     Stefan Eßer <se@FreeBSD.org>
AuthorDate: 2024-08-09 17:26:27 +0000
Commit:     Stefan Eßer <se@FreeBSD.org>
CommitDate: 2024-08-15 21:46:57 +0000

    msdosfs: fix cluster limit when mounting FAT-16 file systems
    
    The maximum cluster number was calculated based on the number of data
    cluters that fit in the givem partition size and the size of the FAT
    area. This limit did not take into account that the highest 10 cluster
    numbers are reserved and must not be used for files.
    
    Approved by:    re
    PR:             280347
    Reported by:    pho@FreeBSD.org
    
    (cherry picked from commit 45d4e82bf61f91792142a2b9e2af657dab8500fd)
    (cherry picked from commit e8f52a86ee279a1270e31bc5bad436939e44f555)
---
 sys/fs/msdosfs/msdosfs_vfsops.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sys/fs/msdosfs/msdosfs_vfsops.c b/sys/fs/msdosfs/msdosfs_vfsops.c
index b5392e62b578..4326dc1f0a6d 100644
--- a/sys/fs/msdosfs/msdosfs_vfsops.c
+++ b/sys/fs/msdosfs/msdosfs_vfsops.c
@@ -724,7 +724,9 @@ mountmsdosfs(struct vnode *odevvp, struct mount *mp)
 		}
 	}
 
-	clusters = (pmp->pm_fatsize / pmp->pm_fatmult) * pmp->pm_fatdiv ;
+	clusters = (pmp->pm_fatsize / pmp->pm_fatmult) * pmp->pm_fatdiv;
+	if (clusters >= (CLUST_RSRVD & pmp->pm_fatmask))
+		clusters = CLUST_RSRVD & pmp->pm_fatmask;
 	if (pmp->pm_maxcluster >= clusters) {
 #ifdef MSDOSFS_DEBUG
 		printf("Warning: number of clusters (%ld) exceeds FAT "