https://bugzilla.kernel.org/show_bug.cgi?id=214711 --- Comment #3 from Andrew Bao (bao00065@xxxxxxx) --- Hi Bart, Yes, It is an information leak. "my understanding of the C standard is that a compiler is required to zero-initialize members that have not been mentioned in an initializer list. >From the ANSI C 202x d"raft: "The initialization shall occur in initializer list order, each initializer provided for a particular subobject overriding any previously listed initializer for the same subobject; all subobjects that are not initialized explicitly shall be initialized implicitly the same as objects that have static storage duration." I am wondering in what condition the compiler will zero-initialize the field in a struct. And what is the initializer in the context? Let say we have a struct foo: struct foo{ int a; int b; int c; }; method 1: struct foo f; f.a = 1; f.b = 2; In method 1, will the compiler zero-initialize the field f.c? method 2: struct foo f = { .a = 1 .b = 2 }; In method 2, will the compiler zero-initialize the field f.c? By the way, struct compat_cdrom_generic_command { unsigned char cmd[CDROM_PACKET_SIZE]; compat_caddr_t buffer; compat_uint_t buflen; compat_int_t stat; compat_caddr_t sense; unsigned char data_direction; unsigned char pad[3]; compat_int_t quiet; compat_int_t timeout; compat_caddr_t unused; }; If this struct does not declare unsigned char pad[3] in order to fill with padding, will the compiler zero-initialize 3 bytes holes for this struct? -- You may reply to this email to add a comment. You are receiving this mail because: You are watching the assignee of the bug.