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