You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
grub2/SOURCES/0198-grub-mount-work-around...

51 lines
1.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Mon, 8 Jan 2024 15:54:31 -0500
Subject: [PATCH] grub-mount: work around bad integer comparison.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
gcc says:
util/grub-mount.c: In function fuse_read:
util/grub-mount.c:273:11: error: comparison of integer expressions of different signedness: off_t {aka long int} and grub_off_t {aka long unsigned int} [-Werror=sign-compare]
273 | if (off > file->size)
| ^
This is happening because grub_off_t is unsigned but the system's off_t is
signed.
That's too much work to fix today, so this patch works around it with
tests and typecasting.
Signed-off-by: Peter Jones <pjones@redhat.com>
---
util/grub-mount.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/util/grub-mount.c b/util/grub-mount.c
index bf4c8b891be..d369e21666e 100644
--- a/util/grub-mount.c
+++ b/util/grub-mount.c
@@ -269,11 +269,17 @@ fuse_read (const char *path, char *buf, size_t sz, off_t off,
{
grub_file_t file = files[fi->fh];
grub_ssize_t size;
+ grub_off_t offset;
- if (off > file->size)
+ if (off < 0)
return -EINVAL;
- file->offset = off;
+ if ((grub_off_t)off > file->size)
+ return -EINVAL;
+
+ offset = (grub_off_t)off;
+
+ file->offset = offset;
size = grub_file_read (file, buf, sz);
if (size < 0)