1*4882a593SmuzhiyunFrom 5dc41edc4eba259c6043ae7698c245ec1baaacc6 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Darren Kenny <darren.kenny@oracle.com> 3*4882a593SmuzhiyunDate: Thu, 5 Nov 2020 14:33:50 +0000 4*4882a593SmuzhiyunSubject: [PATCH] util/grub-editenv: Fix incorrect casting of a signed value 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunThe return value of ftell() may be negative (-1) on error. While it is 7*4882a593Smuzhiyunprobably unlikely to occur, we should not blindly cast to an unsigned 8*4882a593Smuzhiyunvalue without first testing that it is not negative. 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunFixes: CID 73856 11*4882a593Smuzhiyun 12*4882a593SmuzhiyunSigned-off-by: Darren Kenny <darren.kenny@oracle.com> 13*4882a593SmuzhiyunReviewed-by: Daniel Kiper <daniel.kiper@oracle.com> 14*4882a593SmuzhiyunSigned-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com> 15*4882a593Smuzhiyun--- 16*4882a593Smuzhiyun util/grub-editenv.c | 8 +++++++- 17*4882a593Smuzhiyun 1 file changed, 7 insertions(+), 1 deletion(-) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyundiff --git a/util/grub-editenv.c b/util/grub-editenv.c 20*4882a593Smuzhiyunindex f3662c9..db6f187 100644 21*4882a593Smuzhiyun--- a/util/grub-editenv.c 22*4882a593Smuzhiyun+++ b/util/grub-editenv.c 23*4882a593Smuzhiyun@@ -125,6 +125,7 @@ open_envblk_file (const char *name) 24*4882a593Smuzhiyun { 25*4882a593Smuzhiyun FILE *fp; 26*4882a593Smuzhiyun char *buf; 27*4882a593Smuzhiyun+ long loc; 28*4882a593Smuzhiyun size_t size; 29*4882a593Smuzhiyun grub_envblk_t envblk; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun@@ -143,7 +144,12 @@ open_envblk_file (const char *name) 32*4882a593Smuzhiyun grub_util_error (_("cannot seek `%s': %s"), name, 33*4882a593Smuzhiyun strerror (errno)); 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun- size = (size_t) ftell (fp); 36*4882a593Smuzhiyun+ loc = ftell (fp); 37*4882a593Smuzhiyun+ if (loc < 0) 38*4882a593Smuzhiyun+ grub_util_error (_("cannot get file location `%s': %s"), name, 39*4882a593Smuzhiyun+ strerror (errno)); 40*4882a593Smuzhiyun+ 41*4882a593Smuzhiyun+ size = (size_t) loc; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun if (fseek (fp, 0, SEEK_SET) < 0) 44*4882a593Smuzhiyun grub_util_error (_("cannot seek `%s': %s"), name, 45*4882a593Smuzhiyun-- 46*4882a593Smuzhiyun2.14.2 47*4882a593Smuzhiyun 48