On Mon, Nov 15, 2010 at 08:12:21PM +0100, Eric Dumazet wrote: >Le dimanche 14 novembre 2010 Ã 18:06 -0800, Andrew Morton a Ãcrit : >> On Sun, 14 Nov 2010 12:25:33 +0300 Vasiliy Kulikov <segoon@xxxxxxxxxxxx> wrote: >> > >> > if (timeval) { >> > - rtv.tv_sec = rts.tv_sec; >> > - rtv.tv_usec = rts.tv_nsec / NSEC_PER_USEC; >> > + struct timeval rtv = { >> > + .tv_sec = rts.tv_sec, >> > + .tv_usec = rts.tv_nsec / NSEC_PER_USEC >> > + }; >> > >> > if (!copy_to_user(p, &rtv, sizeof(rtv))) >> > return ret; >> >> Please check the assembly code - this will still leave four bytes of >> uninitalised stack data in 'rtv', surely. > >Thats a good question. > >In my understanding, gcc should initialize all holes (and other not >mentioned fields) with 0, even for automatic storage [C99 only mandates >this on static storage] > >I tested on x86_64 and this is the case, but could not find a definitive >answer in gcc documentation. > Yeah, this is not clearly defined by C99 I think, but we can still find some clues in 6.2.6.1, Paragraph 6, " When a value is stored in an object of structure or union type, including in a member object, the bytes of the object representation that correspond to any padding bytes take unspecified values. " So we can't rely on the compiler to initialize the padding bytes too. -- Live like a child, think like the god. -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html