This is an automated email from the ASF dual-hosted git repository. xiaoxiang781216 pushed a commit to branch releases/13.0 in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 5b3b4f355ca37a8c61b254779f867ea09f054ef1 Author: Ansh Rai <[email protected]> AuthorDate: Wed Jul 15 19:55:22 2026 +0530 libs/libc: Fix divide-by-zero in stat() with large filesystem block sizes blksize_t is currently defined as int16_t, which overflows when a filesystem reports a block size larger than 32767 bytes. This causes st_blksize to become zero, leading to an integer divide-by-zero when st_blocks is calculated in stat(). Widen blksize_t to int32_t to support larger filesystem block sizes. Update nuttx_blksize_t in include/nuttx/fs/hostfs.h to keep it consistent with include/sys/types.h. struct geometry.geo_sectorsize (include/nuttx/fs/ioctl.h) is also typed blksize_t, so every debug print of that field using a 16-bit format specifier is updated to PRId32 to match the new width: drivers/misc/ramdisk.c, drivers/mmcsd/mmcsd_spi.c, drivers/mtd/ftl.c, fs/driver/fs_blockmerge.c, drivers/mtd/smart.c, drivers/usbhost/usbhost_storage.c, drivers/mmcsd/mmcsd_sdio.c, arch/arm/src/s32k1xx/s32k1xx_eeeprom.c, arch/arm/src/lc823450/lc823450_mmcl.c. Signed-off-by: Ansh Rai <[email protected]> Signed-off-by: root <[email protected]> --- arch/arm/src/lc823450/lc823450_mmcl.c | 2 +- arch/arm/src/s32k1xx/s32k1xx_eeeprom.c | 2 +- drivers/misc/ramdisk.c | 2 +- drivers/mmcsd/mmcsd_sdio.c | 2 +- drivers/mmcsd/mmcsd_spi.c | 2 +- drivers/mtd/ftl.c | 2 +- drivers/mtd/smart.c | 2 +- drivers/usbhost/usbhost_storage.c | 2 +- fs/driver/fs_blockmerge.c | 4 ++-- include/nuttx/fs/hostfs.h | 2 +- include/sys/types.h | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arch/arm/src/lc823450/lc823450_mmcl.c b/arch/arm/src/lc823450/lc823450_mmcl.c index 13de5f0ad54..f8d521d875c 100644 --- a/arch/arm/src/lc823450/lc823450_mmcl.c +++ b/arch/arm/src/lc823450/lc823450_mmcl.c @@ -205,7 +205,7 @@ static int mmcl_geometry(struct inode *inode, struct geometry *geometry) finfo("available: true mediachanged: false writeenabled: %s\n", geometry->geo_writeenabled ? "true" : "false"); - finfo("nsectors: %" PRIuOFF " sectorsize: %" PRIi16 "\n", + finfo("nsectors: %" PRIuOFF " sectorsize: %" PRId32 "\n", geometry->geo_nsectors, geometry->geo_sectorsize); return OK; diff --git a/arch/arm/src/s32k1xx/s32k1xx_eeeprom.c b/arch/arm/src/s32k1xx/s32k1xx_eeeprom.c index c0ad4bb78e4..9782be4d59f 100644 --- a/arch/arm/src/s32k1xx/s32k1xx_eeeprom.c +++ b/arch/arm/src/s32k1xx/s32k1xx_eeeprom.c @@ -304,7 +304,7 @@ static int eeed_geometry(struct inode *inode, struct geometry *geometry) finfo("available: true mediachanged: false writeenabled: %s\n", geometry->geo_writeenabled ? "true" : "false"); - finfo("nsectors: %" PRIuOFF " sectorsize: %" PRIu16 "\n", + finfo("nsectors: %" PRIuOFF " sectorsize: %" PRId32 "\n", geometry->geo_nsectors, geometry->geo_sectorsize); return OK; diff --git a/drivers/misc/ramdisk.c b/drivers/misc/ramdisk.c index 81454341d0a..96bb2f0f4a7 100644 --- a/drivers/misc/ramdisk.c +++ b/drivers/misc/ramdisk.c @@ -324,7 +324,7 @@ static int rd_geometry(FAR struct inode *inode, finfo("available: true mediachanged: false writeenabled: %s\n", geometry->geo_writeenabled ? "true" : "false"); - finfo("nsectors: %" PRIuOFF " sectorsize: %" PRIi16 "\n", + finfo("nsectors: %" PRIuOFF " sectorsize: %" PRId32 "\n", geometry->geo_nsectors, geometry->geo_sectorsize); return OK; diff --git a/drivers/mmcsd/mmcsd_sdio.c b/drivers/mmcsd/mmcsd_sdio.c index 4f0db8cd154..c034f48fef5 100644 --- a/drivers/mmcsd/mmcsd_sdio.c +++ b/drivers/mmcsd/mmcsd_sdio.c @@ -2591,7 +2591,7 @@ static int mmcsd_geometry(FAR struct inode *inode, struct geometry *geometry) finfo("available: true mediachanged: %s writeenabled: %s\n", geometry->geo_mediachanged ? "true" : "false", geometry->geo_writeenabled ? "true" : "false"); - finfo("nsectors: %" PRIuOFF " sectorsize: %" PRIi16 "\n", + finfo("nsectors: %" PRIuOFF " sectorsize: %" PRId32 "\n", geometry->geo_nsectors, geometry->geo_sectorsize); diff --git a/drivers/mmcsd/mmcsd_spi.c b/drivers/mmcsd/mmcsd_spi.c index eb08b106a83..1f4aea8a97d 100644 --- a/drivers/mmcsd/mmcsd_spi.c +++ b/drivers/mmcsd/mmcsd_spi.c @@ -1649,7 +1649,7 @@ static int mmcsd_geometry(FAR struct inode *inode, finfo("geo_mediachanged: %d\n", geometry->geo_mediachanged); finfo("geo_writeenabled: %d\n", geometry->geo_writeenabled); finfo("geo_nsectors: %" PRIuOFF "\n", geometry->geo_nsectors); - finfo("geo_sectorsize: %" PRIi16 "\n", geometry->geo_sectorsize); + finfo("geo_sectorsize: %" PRId32 "\n", geometry->geo_sectorsize); return OK; } diff --git a/drivers/mtd/ftl.c b/drivers/mtd/ftl.c index eee562c787d..2d50ac28f0e 100644 --- a/drivers/mtd/ftl.c +++ b/drivers/mtd/ftl.c @@ -833,7 +833,7 @@ static int ftl_geometry(FAR struct inode *inode, finfo("available: true mediachanged: false writeenabled: %s\n", geometry->geo_writeenabled ? "true" : "false"); - finfo("nsectors: %" PRIuOFF " sectorsize: %u\n", + finfo("nsectors: %" PRIuOFF " sectorsize: %" PRId32 "\n", geometry->geo_nsectors, geometry->geo_sectorsize); return OK; diff --git a/drivers/mtd/smart.c b/drivers/mtd/smart.c index 8d008a6f6bb..1855da6a0e9 100644 --- a/drivers/mtd/smart.c +++ b/drivers/mtd/smart.c @@ -1074,7 +1074,7 @@ static int smart_geometry(FAR struct inode *inode, finfo("available: true mediachanged: false writeenabled: %s\n", geometry->geo_writeenabled ? "true" : "false"); - finfo("nsectors: %" PRIuOFF " sectorsize: %" PRIi16 "\n", + finfo("nsectors: %" PRIuOFF " sectorsize: %" PRId32 "\n", geometry->geo_nsectors, geometry->geo_sectorsize); return OK; diff --git a/drivers/usbhost/usbhost_storage.c b/drivers/usbhost/usbhost_storage.c index 7621049f68b..ecb3eae76cb 100644 --- a/drivers/usbhost/usbhost_storage.c +++ b/drivers/usbhost/usbhost_storage.c @@ -2235,7 +2235,7 @@ static int usbhost_geometry(FAR struct inode *inode, geometry->geo_sectorsize = priv->blocksize; nxmutex_unlock(&priv->lock); - uinfo("nsectors: %" PRIdOFF " sectorsize: %" PRIi16 "\n", + uinfo("nsectors: %" PRIdOFF " sectorsize: %" PRId32 "\n", geometry->geo_nsectors, geometry->geo_sectorsize); } } diff --git a/fs/driver/fs_blockmerge.c b/fs/driver/fs_blockmerge.c index 69506611c0e..3d4a5d45161 100644 --- a/fs/driver/fs_blockmerge.c +++ b/fs/driver/fs_blockmerge.c @@ -126,7 +126,7 @@ static int merge_open(FAR struct inode *inode) goto err_with_inode; } - finfo("[%s] nsectors: %" PRIuOFF " sectorsize:%u\n", + finfo("[%s] nsectors: %" PRIuOFF " sectorsize:%" PRId32 "\n", priv->part[i].path, priv->part[i].geo.geo_nsectors, priv->part[i].geo.geo_sectorsize); } @@ -260,7 +260,7 @@ static int merge_geometry(FAR struct inode *inode, geometry->geo_nsectors += priv->part[i].geo.geo_nsectors; } - finfo("nsectors: %" PRIuOFF " sectorsize:%u\n", + finfo("nsectors: %" PRIuOFF " sectorsize:%" PRId32 "\n", geometry->geo_nsectors, geometry->geo_sectorsize); return OK; } diff --git a/include/nuttx/fs/hostfs.h b/include/nuttx/fs/hostfs.h index 85840d23b5e..694efe10c45 100644 --- a/include/nuttx/fs/hostfs.h +++ b/include/nuttx/fs/hostfs.h @@ -123,7 +123,7 @@ /* These must match the definitions in include/sys/types.h */ -typedef int16_t nuttx_blksize_t; +typedef int32_t nuttx_blksize_t; # ifdef CONFIG_SMALL_MEMORY typedef uint16_t nuttx_size_t; diff --git a/include/sys/types.h b/include/sys/types.h index e36aad87d49..31e8410e789 100644 --- a/include/sys/types.h +++ b/include/sys/types.h @@ -229,7 +229,7 @@ typedef off_t loff_t; /* blksize_t is a signed integer value used for file block sizes */ -typedef int16_t blksize_t; +typedef int32_t blksize_t; /* Network related */
