keymaster:log: Add format checking attributes.

Bug: 279488041
Test: build.py qemu-generic-arm32-test-debug
Test: build.py qemu-generic-arm64-test-debug
Change-Id: I7ee2808125084c793aeb31c6e659a2be56e28e5b
diff --git a/include/keymaster/logger.h b/include/keymaster/logger.h
index a9b005b..51ee23e 100644
--- a/include/keymaster/logger.h
+++ b/include/keymaster/logger.h
@@ -37,12 +37,13 @@
     virtual int log_msg(LogLevel level, const char* fmt, va_list args) const = 0;
 
     static int Log(LogLevel level, const char* fmt, va_list args);
-    static int Log(LogLevel level, const char* fmt, ...);
-    static int Debug(const char* fmt, ...);
-    static int Info(const char* fmt, ...);
-    static int Warning(const char* fmt, ...);
-    static int Error(const char* fmt, ...);
-    static int Severe(const char* fmt, ...);
+
+    __attribute__((format(printf, 2, 3))) static int Log(LogLevel level, const char* fmt, ...);
+    __attribute__((format(printf, 1, 2))) static int Debug(const char* fmt, ...);
+    __attribute__((format(printf, 1, 2))) static int Info(const char* fmt, ...);
+    __attribute__((format(printf, 1, 2))) static int Warning(const char* fmt, ...);
+    __attribute__((format(printf, 1, 2))) static int Error(const char* fmt, ...);
+    __attribute__((format(printf, 1, 2))) static int Severe(const char* fmt, ...);
 
   protected:
     static void set_instance(Logger* logger) { instance_ = logger; }
@@ -59,11 +60,11 @@
 #define __KM_STRINGIFY(x) __KM_STR(x)
 #define __KM_FILE_LINE __FILE__ ", Line " __KM_STRINGIFY(__LINE__) ": "
 
-#define LOG_D(fmt, ...) Logger::Debug(__KM_FILE_LINE fmt, __VA_ARGS__)
-#define LOG_I(fmt, ...) Logger::Info(__KM_FILE_LINE fmt, __VA_ARGS__)
-#define LOG_W(fmt, ...) Logger::Warning(__KM_FILE_LINE fmt, __VA_ARGS__)
-#define LOG_E(fmt, ...) Logger::Error(__KM_FILE_LINE fmt, __VA_ARGS__)
-#define LOG_S(fmt, ...) Logger::Severe(__KM_FILE_LINE fmt, __VA_ARGS__)
+#define LOG_D(fmt, ...) Logger::Debug(__KM_FILE_LINE fmt, ##__VA_ARGS__)
+#define LOG_I(fmt, ...) Logger::Info(__KM_FILE_LINE fmt, ##__VA_ARGS__)
+#define LOG_W(fmt, ...) Logger::Warning(__KM_FILE_LINE fmt, ##__VA_ARGS__)
+#define LOG_E(fmt, ...) Logger::Error(__KM_FILE_LINE fmt, ##__VA_ARGS__)
+#define LOG_S(fmt, ...) Logger::Severe(__KM_FILE_LINE fmt, ##__VA_ARGS__)
 
 }  // namespace keymaster