tomoyo: use vsnprintf() properly
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 16 May 2021 20:59:56 +0000 (16:59 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 21 Aug 2022 15:50:42 +0000 (11:50 -0400)
Idiomatic way to find how much space sprintf output would take is
len = snprintf(NULL, 0, ...) + 1;
Once upon a time there'd been libc implementations that blew chunks
on that and somebody had come up with the following "cute" trick:
len = snprintf((char *) &len, 1, ...) + 1;
for doing the same.  However, that's unidiomatic, harder to follow
*and* any such libc implementation would violate both C99 and POSIX
(since 2001).
IOW, this kludge is best buried along with such libc implementations,
nevermind getting cargo-culted into newer code.  Our vsnprintf() does not
suffer that braindamage, TYVM.

Acked-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
security/tomoyo/audit.c
security/tomoyo/common.c

index 023bedd..7cf8fdb 100644 (file)
@@ -423,7 +423,7 @@ void tomoyo_write_log(struct tomoyo_request_info *r, const char *fmt, ...)
        int len;
 
        va_start(args, fmt);
-       len = vsnprintf((char *) &len, 1, fmt, args) + 1;
+       len = vsnprintf(NULL, 0, fmt, args) + 1;
        va_end(args);
        va_start(args, fmt);
        tomoyo_write_log2(r, len, fmt, args);
index ff17abc..f4cd9b5 100644 (file)
@@ -2057,7 +2057,7 @@ int tomoyo_supervisor(struct tomoyo_request_info *r, const char *fmt, ...)
        bool quota_exceeded = false;
 
        va_start(args, fmt);
-       len = vsnprintf((char *) &len, 1, fmt, args) + 1;
+       len = vsnprintf(NULL, 0, fmt, args) + 1;
        va_end(args);
        /* Write /sys/kernel/security/tomoyo/audit. */
        va_start(args, fmt);