Skip to content

Commit 8c78649

Browse files
authored
Merge pull request #5829 from deepikabhavnani/fat_issue_5780_3
Fix: Sector/Size overflow from uint32_t
2 parents b590051 + c86d757 commit 8c78649

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

features/filesystem/fat/FATFileSystem.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,20 +196,24 @@ DRESULT disk_read(BYTE pdrv, BYTE *buff, DWORD sector, UINT count)
196196
{
197197
debug_if(FFS_DBG, "disk_read(sector %d, count %d) on pdrv [%d]\n", sector, count, pdrv);
198198
DWORD ssize = disk_get_sector_size(pdrv);
199-
int err = _ffs[pdrv]->read(buff, sector*ssize, count*ssize);
199+
bd_addr_t addr = (bd_addr_t)sector*ssize;
200+
bd_size_t size = (bd_size_t)count*ssize;
201+
int err = _ffs[pdrv]->read(buff, addr, size);
200202
return err ? RES_PARERR : RES_OK;
201203
}
202204

203205
DRESULT disk_write(BYTE pdrv, const BYTE *buff, DWORD sector, UINT count)
204206
{
205207
debug_if(FFS_DBG, "disk_write(sector %d, count %d) on pdrv [%d]\n", sector, count, pdrv);
206208
DWORD ssize = disk_get_sector_size(pdrv);
207-
int err = _ffs[pdrv]->erase(sector*ssize, count*ssize);
209+
bd_addr_t addr = (bd_addr_t)sector*ssize;
210+
bd_size_t size = (bd_size_t)count*ssize;
211+
int err = _ffs[pdrv]->erase(addr, size);
208212
if (err) {
209213
return RES_PARERR;
210214
}
211215

212-
err = _ffs[pdrv]->program(buff, sector*ssize, count*ssize);
216+
err = _ffs[pdrv]->program(buff, addr, size);
213217
if (err) {
214218
return RES_PARERR;
215219
}
@@ -250,7 +254,9 @@ DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff)
250254
} else {
251255
DWORD *sectors = (DWORD*)buff;
252256
DWORD ssize = disk_get_sector_size(pdrv);
253-
int err = _ffs[pdrv]->trim(sectors[0]*ssize, (sectors[1]-sectors[0]+1)*ssize);
257+
bd_addr_t addr = (bd_addr_t)sectors[0]*ssize;
258+
bd_size_t size = (bd_size_t)(sectors[1]-sectors[0]+1)*ssize;
259+
int err = _ffs[pdrv]->trim(addr, size);
254260
return err ? RES_PARERR : RES_OK;
255261
}
256262
}

0 commit comments

Comments
 (0)