]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
libebl: Use static number for array stack allocation in openbackend.
authorMark Wielaard <mjw@redhat.com>
Sun, 17 May 2015 16:49:10 +0000 (18:49 +0200)
committerMark Wielaard <mjw@redhat.com>
Wed, 27 May 2015 21:04:31 +0000 (23:04 +0200)
Help the compiler see we stack allocate a small array.  Add assert to check
no machine prefix is ever larger than 16. Current maximum number is 7.
This prevents gcc warning about possible unbounded stack usage with
-Wstack-usage.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
libebl/ChangeLog
libebl/eblopenbackend.c

index 3655e72c55c76810ee736b6aab1430242d02c31e..9ca7b47fa8335dad72ca3f3ebf3db1e9b30b5094 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-17  Mark Wielaard  <mjw@redhat.com>
+
+       * eblopenbackend.c (MAX_PREFIX_LEN): New define (16).
+       (openbackend): Stack allocate symname array using MAX_PREFIX_LEN.
+
 2015-01-27  Mark Wielaard  <mjw@redhat.com>
 
        * libebl.h: Add comment from README that this is completely
index 3a22f53df10fd56474a966d616ebf3ea52d0c40e..2766e7b069b993d14d27ff59c89d2586d17b256d 100644 (file)
@@ -1,5 +1,5 @@
 /* Generate ELF backend handle.
-   Copyright (C) 2000-2014 Red Hat, Inc.
+   Copyright (C) 2000-2015 Red Hat, Inc.
    This file is part of elfutils.
 
    This file is free software; you can redistribute it and/or modify
@@ -135,6 +135,8 @@ static const struct
 };
 #define nmachines (sizeof (machines) / sizeof (machines[0]))
 
+/* No machine prefix should be larger than this.  */
+#define MAX_PREFIX_LEN 16
 
 /* Default callbacks.  Mostly they just return the error value.  */
 static const char *default_object_type_name (int ignore, char *buf,
@@ -343,7 +345,11 @@ openbackend (elf, emulation, machine)
            static const char version[] = MODVERSION;
            const char *modversion;
            ebl_bhinit_t initp;
-           char symname[machines[cnt].prefix_len + sizeof "_init"];
+
+           // We use a static number to help the compiler see we don't
+           // overflow the stack with an arbitrary number.
+           assert (machines[cnt].prefix_len <= MAX_PREFIX_LEN);
+           char symname[MAX_PREFIX_LEN + sizeof "_init"];
 
            strcpy (mempcpy (symname, machines[cnt].prefix,
                             machines[cnt].prefix_len), "_init");