From: Dan Carpenter <hidden> Date: 2021-06-29 08:20:32
The "hbinfo" struct has a 4 byte hole at the end so we have to zero it
out to prevent stack information from being disclosed.
Fixes: fe59379b9ab7 ("sctp: do the basic send and recv for PLPMTUD probe")
Signed-off-by: Dan Carpenter <redacted>
---
Btw = {} is the newest way to initialize holes.
In the past we have debated whether = {} will *always* zero out struct
holes and it wasn't clear from the C standard. But it turns out that
"= {}" is not part of the standard but is instead a GCC extension and it
does clear the holes. In GCC (not the C standard) then = {0}; is also
supposed to initialize holes in there was a bug in one version where it
didn't.
So that's nice, because adding memset()s to zero everywhere was ugly.
net/sctp/sm_make_chunk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Andreas Fink <hidden> Date: 2021-06-29 08:29:53
Does that gcc extension work with all compilers, especially clang?
Dan Carpenter wrote on 29.06.21 10:19:
quoted hunk
The "hbinfo" struct has a 4 byte hole at the end so we have to zero it
out to prevent stack information from being disclosed.
Fixes: fe59379b9ab7 ("sctp: do the basic send and recv for PLPMTUD probe")
Signed-off-by: Dan Carpenter <redacted>
---
Btw = {} is the newest way to initialize holes.
In the past we have debated whether = {} will *always* zero out struct
holes and it wasn't clear from the C standard. But it turns out that
"= {}" is not part of the standard but is instead a GCC extension and it
does clear the holes. In GCC (not the C standard) then = {0}; is also
supposed to initialize holes in there was a bug in one version where it
didn't.
So that's nice, because adding memset()s to zero everywhere was ugly.
net/sctp/sm_make_chunk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Does that gcc extension work with all compilers, especially clang?
quoted
So that's nice, because adding memset()s to zero everywhere was ugly.
The 'real fun' (tm) starts when the bit pattern for the NULL
pointer isn't 'all zeros'.
Using memset() is then broken - I suspect the compiler is
expected to initialise pointers to the correct NULL pattern.
Not that I think anyone sane would consider trying to compile
any 'normal' C code for such a system.
OTOH it is probably why clang is bleating about (int)((char *)0 + 4)
being undefined behaviour.
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)