Skip to content

Commit

Permalink
feat: fallback to pread() if file mmap failed
Browse files Browse the repository at this point in the history
  • Loading branch information
secDre4mer committed Nov 13, 2023
1 parent 2c69c92 commit c434efa
Showing 1 changed file with 15 additions and 16 deletions.
31 changes: 15 additions & 16 deletions libyara/proc/linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -218,8 +218,16 @@ YR_API const uint8_t* yr_process_fetch_memory_block_data(YR_MEMORY_BLOCK* block)
fd,
proc_info->map_offset);
close(fd);
if (context->buffer == MAP_FAILED)
{
// Notify the code below that we couldn't read from the file
// fallback to pread() from the process
fd = -1;
}
context->buffer_size = block->size;
}
else

if (fd == -1)
{
context->buffer = mmap(
NULL,
Expand All @@ -228,23 +236,14 @@ YR_API const uint8_t* yr_process_fetch_memory_block_data(YR_MEMORY_BLOCK* block)
MAP_PRIVATE | MAP_ANONYMOUS,
-1,
0);
}

if (context->buffer == MAP_FAILED)
{
context->buffer = NULL;
context->buffer_size = 0;
goto _exit;
}
else if (context->buffer != NULL)
{
if (context->buffer == MAP_FAILED)
{
context->buffer = NULL;
context->buffer_size = 0;
goto _exit;
}
context->buffer_size = block->size;
}
else // Should according to man page never happen
{
context->buffer_size = 0;
goto _exit;
}

// If mapping can't be accessed through the filesystem, read everything from
// target process VM.
Expand Down

0 comments on commit c434efa

Please sign in to comment.