diff --git a/ChangeLog b/ChangeLog index 9c06c24ba..293449491 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-05-01 Vladimir Serbinenko + + * grub-core/kern/file.c (grub_file_read): Read nothing if len = 0. + Special behaviour for len = 0 to read whole file isn't used anywhere and + can cause buffer ovewrflows in several places. + 2012-05-01 Vladimir Serbinenko * grub-core/normal/autofs.c (read_fs_list): Fix memory leak. diff --git a/grub-core/kern/file.c b/grub-core/kern/file.c index 4f1f59ff7..495326f12 100644 --- a/grub-core/kern/file.c +++ b/grub-core/kern/file.c @@ -143,7 +143,10 @@ grub_file_read (grub_file_t file, void *buf, grub_size_t len) return -1; } - if (len == 0 || len > file->size - file->offset) + if (len == 0) + return 0; + + if (len > file->size - file->offset) len = file->size - file->offset; /* Prevent an overflow. */