From 1f6af2a9f8b02a71f213b4717d8e62c8a6b14fc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=BE=D0=BC=D0=B0=D0=BD=20=D0=9F=D0=B5=D1=85=D0=BE?= =?UTF-8?q?=D0=B2?= Date: Sun, 22 Jun 2014 03:51:50 +0400 Subject: [PATCH] * grub-core/commands/loadenv.c (check_blocklists): Fix overlap check. --- ChangeLog | 4 ++++ grub-core/commands/loadenv.c | 13 ++----------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 03eedb3ad..be322d48c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-06-21 Роман Пехов + + * grub-core/commands/loadenv.c (check_blocklists): Fix overlap check. + 2014-06-21 Glenn Washburn * util/grub-install.c: Fix handling of --disk-module. diff --git a/grub-core/commands/loadenv.c b/grub-core/commands/loadenv.c index 6af811207..acd93d123 100644 --- a/grub-core/commands/loadenv.c +++ b/grub-core/commands/loadenv.c @@ -263,7 +263,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists, for (q = p->next; q; q = q->next) { grub_disk_addr_t s1, s2; - grub_disk_addr_t e1, e2, t; + grub_disk_addr_t e1, e2; s1 = p->sector; e1 = s1 + ((p->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS); @@ -271,16 +271,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists, s2 = q->sector; e2 = s2 + ((q->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS); - if (s2 > s1) - { - t = s2; - s2 = s1; - s1 = t; - t = e2; - e2 = e1; - e1 = t; - } - if (e1 > s2) + if (s1 < e2 && s2 < e1) { /* This might be actually valid, but it is unbelievable that any filesystem makes such a silly allocation. */