[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20171108223020.24487-4-linux@rasmusvillemoes.dk>
Date: Wed, 8 Nov 2017 23:30:17 +0100
From: Rasmus Villemoes <linux@...musvillemoes.dk>
To: kernel-hardening@...ts.openwall.com
Cc: linux-kernel@...r.kernel.org,
Andrew Morton <akpm@...ux-foundation.org>,
Kees Cook <keescook@...omium.org>,
Rasmus Villemoes <linux@...musvillemoes.dk>
Subject: [RFC 3/6] compiler.h: add __attribute__((format_arg)) shorthand
The __format_arg attribute tells gcc that it can use a specific
argument to the annotated function as the format string for the
purpose of type-checking a surrounding __printf function call, e.g.
sprintf(buf, fmtcheck(what->ever, "%d %lx", 0), i, m)
makes gcc check that i and m are indeed an int and a long; with
sprintf(buf, what->ever, i, m)
the compiler cannot do any type checking.
Signed-off-by: Rasmus Villemoes <linux@...musvillemoes.dk>
---
include/linux/compiler-gcc.h | 1 +
include/linux/compiler.h | 4 ++++
2 files changed, 5 insertions(+)
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index bb78e5bdff26..69a233f9fa26 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -128,6 +128,7 @@
#define __maybe_unused __attribute__((unused))
#define __always_unused __attribute__((unused))
#define __mode(x) __attribute__((mode(x)))
+#define __format_arg(n) __attribute__((format_arg(n)))
/* gcc version specific checks */
diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index 478914ad280b..2c8793f72fb0 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -631,4 +631,8 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
#define __format_template(x)
#endif
+#ifndef __format_arg
+#define __format_arg(n)
+#endif
+
#endif /* __LINUX_COMPILER_H */
--
2.11.0
Powered by blists - more mailing lists