fincore: Handle large files on 32 bit without LFS
If util-linux is installed on a system without large file support, an out of memory issue can occur while processing a file which is 2 GB in size: $ ./configure --disable-largefile && make $ dd if=/dev/zero of=2gb-file seek=2147483646 count=1 bs=1 $ fincore 2gb-file (endless loop) fincore: failed to do mmap: 2gb-file: Cannot allocate memory Even though iterating with "len" seems counter-intuitive, it fixes this issue. The variable len is only in the last iteration not a multiplication of pagesize -- which is the requirement for mmap. Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
This commit is contained in:
parent
ea62c15276
commit
fcfe1a5cde
|
@ -194,12 +194,11 @@ static int fincore_fd (struct fincore_control *ctl,
|
|||
off_t *count_incore)
|
||||
{
|
||||
size_t window_size = N_PAGES_IN_WINDOW * ctl->pagesize;
|
||||
off_t file_offset;
|
||||
off_t file_offset, len;
|
||||
int rc = 0;
|
||||
int warned_once = 0;
|
||||
|
||||
for (file_offset = 0; file_offset < file_size; file_offset += window_size) {
|
||||
off_t len;
|
||||
for (file_offset = 0; file_offset < file_size; file_offset += len) {
|
||||
void *window = NULL;
|
||||
|
||||
len = file_size - file_offset;
|
||||
|
|
Loading…
Reference in New Issue