Cap fm_mapped_extents to FIEMAP_EXTENTS_BATCH after each ioctl() call
to prevent potential out-of-bounds access if the kernel returns more
extents than requested.
Reported-by: Coverity Scan
Signed-off-by: Karel Zak <kzak@redhat.com>
return;
}
+ if (fm->fm_mapped_extents > FIEMAP_EXTENTS_BATCH)
+ fm->fm_mapped_extents = FIEMAP_EXTENTS_BATCH;
+
/* If no extents, the entire file is a hole - keep fiemap to indicate this */
if (fm->fm_mapped_extents == 0) {
hex->fiemap = fm;
if (ioctl(fd, FS_IOC_FIEMAP, fm) < 0)
return 0;
+ if (fm->fm_mapped_extents > FIEMAP_EXTENTS_BATCH)
+ fm->fm_mapped_extents = FIEMAP_EXTENTS_BATCH;
+
hex->current_extent = 0;
return 1;
}