* Re: GRUB warning level increase
2012-02-10 16:00 GRUB warning level increase Vladimir 'φ-coder/phcoder' Serbinenko
@ 2012-02-12 14:25 ` Grégoire Sutre
0 siblings, 0 replies; 2+ messages in thread
From: Grégoire Sutre @ 2012-02-12 14:25 UTC (permalink / raw)
To: The development of GNU GRUB
[-- Attachment #1: Type: text/plain, Size: 1166 bytes --]
On 02/10/2012 05:00 PM, Vladimir 'φ-coder/phcoder' Serbinenko wrote:
> Hello, all. I have increased the warning level in GRUB. This is done for
> quicker discovery and correction of the bugs which would be otherwise
> hard to track. Mostly it enabled warnings regarding guidelines which are
> already followed by GRUB.
On Debian GNU/Linux amd64 with GCC 4.6.2, I get a number of warnings
triggered by -Wunsafe-loop-optimizations. The first one is:
commands/lsacpi.c: In function 'grub_cmd_lsacpi':
commands/lsacpi.c:135:3: error: cannot optimize loop, the loop counter
may overflow [-Werror=unsafe-loop-optimizations]
commands/lsacpi.c:166:3: error: cannot optimize loop, the loop counter
may overflow [-Werror=unsafe-loop-optimizations]
cc1: all warnings being treated as errors
The attached patch fixes it. The remaining ones are, afaics, either
false positives or potential overflows in loops of the form:
for (i = 1; i <= foo; i++) { ... }
where i and foo have the same type (e.g., int). I'm not sure how to
properly fix those (declare i with a wider type? replace i by i+1 in
the whole loop to make the condition become i < foo?).
Grégoire
[-- Attachment #2: check-len.diff --]
[-- Type: text/x-patch, Size: 854 bytes --]
=== modified file 'grub-core/commands/lsacpi.c'
--- grub-core/commands/lsacpi.c 2012-02-10 15:48:48 +0000
+++ grub-core/commands/lsacpi.c 2012-02-12 14:03:07 +0000
@@ -132,7 +132,7 @@ disp_acpi_xsdt_table (struct grub_acpi_t
disp_acpi_table (t);
len = t->length - sizeof (*t);
desc = (grub_uint64_t *) (t + 1);
- for (; len > 0; desc++, len -= sizeof (*desc))
+ for (; len >= sizeof (*desc); desc++, len -= sizeof (*desc))
{
#if GRUB_CPU_SIZEOF_VOID_P == 4
if (*desc >= (1ULL << 32))
@@ -163,7 +163,7 @@ disp_acpi_rsdt_table (struct grub_acpi_t
disp_acpi_table (t);
len = t->length - sizeof (*t);
desc = (grub_uint32_t *) (t + 1);
- for (; len > 0; desc++, len -= sizeof (*desc))
+ for (; len >= sizeof (*desc); desc++, len -= sizeof (*desc))
{
t = (struct grub_acpi_table_header *) (grub_addr_t) *desc;
^ permalink raw reply [flat|nested] 2+ messages in thread