mirror of
https://github.com/apache/nuttx.git
synced 2026-08-02 12:49:00 +00:00
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 <anshrai331@gmail.com> Signed-off-by: root <root@LAPTOP-9C7LKDC5.localdomain>
This commit is contained in:
parent
26ec938064
commit
54b0066a69
11 changed files with 12 additions and 12 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue