Messages in this thread | | | From | David Laight <> | Subject | RE: [PATCH] KEYS: trusted: fix -Wvarags warning | Date | Mon, 15 Oct 2018 09:26:02 +0000 |
| |
From: ndesaulniers@google.com > Sent: 11 October 2018 21:31 ... > by swapping h2 and h3. > > security/keys/trusted.c:146:17: warning: passing an object that > undergoes default > argument promotion to 'va_start' has undefined behavior [-Wvarargs] > va_start(argp, h3); > ^ > security/keys/trusted.c:126:37: note: parameter of type 'unsigned > char' is declared here > unsigned char *h2, unsigned char h3, ...) > ^ > Specifically, it seems that both the C90 (4.8.1.1) and C11 (7.16.1.4) > standards explicitly call this out as undefined behavior:
I guess that problems arise when all the arguments are stacked and va_start/va_arg use naive pointer manipulation. In that case &h3 might be 4n+3 aligned so va_arg() will access misaligned stack locations.
I doubt any modern compilers (where va_start and va_arg are builtins) will get this 'wrong' even when all arguments are stacked.
Seems clang is being over cautious.
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
| |