The next_buf is the offset to the next cached block rounded to the size of bufio->block_size. However the calculation needs the block_size to be in power of 2 is not always valid. As an example, files with smaller size than block_size will have the block_size leveled to the size of file which can be set arbitrary value.
This patch fixes the next_buf calculation to accept any integers. Signed-off-by: Michael Chang <mch...@suse.com> --- grub-core/io/bufio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/io/bufio.c b/grub-core/io/bufio.c index 22438277d..d0b0f71b6 100644 --- a/grub-core/io/bufio.c +++ b/grub-core/io/bufio.c @@ -132,7 +132,7 @@ grub_bufio_read (grub_file_t file, char *buf, grub_size_t len) return res; /* Need to read some more. */ - next_buf = (file->offset + res + len - 1) & ~((grub_off_t) bufio->block_size - 1); + next_buf = (grub_divmod64 (file->offset + res + len - 1, bufio->block_size, NULL)) * bufio->block_size; /* Now read between file->offset + res and bufio->buffer_at. */ if (file->offset + res < next_buf) { -- 2.13.6 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel