trace: add build-time check to avoid overrunning hex buffer
authorHarvey Harrison <harvey.harrison@gmail.com>
Thu, 9 Oct 2008 00:44:55 +0000 (17:44 -0700)
committerIngo Molnar <mingo@elte.hu>
Tue, 14 Oct 2008 08:39:26 +0000 (10:39 +0200)
Remove the runtime BUG_ON and change to a compile-time check in
the macro that calls the hex format routine

[Noticed by Joe Perches]
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/trace/trace.c

index 36cbb873845f172d6db0ae8389c49f06b5b1380e..d345d649d073a39d6e572b88047e726754e8da1f 100644 (file)
@@ -335,7 +335,8 @@ trace_seq_putmem(struct trace_seq *s, void *mem, size_t len)
        return len;
 }
 
-#define HEX_CHARS 17
+#define MAX_MEMHEX_BYTES       8
+#define HEX_CHARS              (MAX_MEMHEX_BYTES*2 + 1)
 
 static int
 trace_seq_putmem_hex(struct trace_seq *s, void *mem, size_t len)
@@ -344,8 +345,6 @@ trace_seq_putmem_hex(struct trace_seq *s, void *mem, size_t len)
        unsigned char *data = mem;
        int i, j;
 
-       BUG_ON(len >= HEX_CHARS);
-
 #ifdef __BIG_ENDIAN
        for (i = 0, j = 0; i < len; i++) {
 #else
@@ -1668,6 +1667,7 @@ do {                                                      \
 
 #define SEQ_PUT_HEX_FIELD_RET(s, x)                    \
 do {                                                   \
+       BUILD_BUG_ON(sizeof(x) > MAX_MEMHEX_BYTES);     \
        if (!trace_seq_putmem_hex(s, &(x), sizeof(x)))  \
                return 0;                               \
 } while (0)