From: Vladimir 'phcoder' Serbinenko Date: Tue, 1 May 2012 13:08:29 +0000 (+0200) Subject: * grub-core/kern/file.c (grub_file_read): Read nothing if len = 0. X-Git-Tag: 2.00~286 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a188012e6c831dd5355cadfc8f3848aaa74a703f;p=thirdparty%2Fgrub.git * 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. --- 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. */