2009/2/24 Ingo Molnar <mingo@elte.hu>:
> ok, this is the last warning i have from today's overnight -tip
> testruns - a 32-bit system warning in sock_init_data():
>
> [ 2.610389] NET: Registered protocol family 16
> [ 2.616138] initcall netlink_proto_init+0x0/0x170 returned 0 after 7812 usecs
> [ 2.620010] WARNING: kmemcheck: Caught 32-bit read from uninitialized memory (
f642c184)
> [ 2.624002] 010000000200000000000000604990c000000000000000000000000000000000
> [ 2.634076] i i i i i i u u i i i i i i i i i i i i i i i i i i i i i i i i
> [ 2.641038] ^
> [ 2.643376]
> [ 2.644004] Pid: 1, comm: swapper Not tainted (2.6.29-rc6-tip-01751-g4d1c22c-dirty #885)
> [ 2.648003] EIP: 0060:[<
c07141a1>] EFLAGS:
00010282 CPU: 0
> [ 2.652008] EIP is at sock_init_data+0xa1/0x190
> [ 2.656003] EAX:
0001a800 EBX:
f6836c00 ECX:
00463000 EDX:
c0e46fe0
> [ 2.660003] ESI:
f642c180 EDI:
c0b83088 EBP:
f6863ed8 ESP:
c0c412ec
> [ 2.664003] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
> [ 2.668003] CR0:
8005003b CR2:
f682c400 CR3:
00b91000 CR4:
000006f0
> [ 2.672003] DR0:
00000000 DR1:
00000000 DR2:
00000000 DR3:
00000000
> [ 2.676003] DR6:
ffff4ff0 DR7:
00000400
> [ 2.680002] [<
c07423e5>] __netlink_create+0x35/0xa0
> [ 2.684002] [<
c07443cc>] netlink_kernel_create+0x4c/0x140
> [ 2.688002] [<
c072755e>] rtnetlink_net_init+0x1e/0x40
> [ 2.696002] [<
c071b601>] register_pernet_operations+0x11/0x30
> [ 2.700002] [<
c071b72c>] register_pernet_subsys+0x1c/0x30
> [ 2.704002] [<
c0bf3c8c>] rtnetlink_init+0x4c/0x100
> [ 2.708002] [<
c0bf4669>] netlink_proto_init+0x159/0x170
> [ 2.712002] [<
c0101124>] do_one_initcall+0x24/0x150
> [ 2.716002] [<
c0bbf3c7>] do_initcalls+0x27/0x40
> [ 2.723201] [<
c0bbf3fc>] do_basic_setup+0x1c/0x20
> [ 2.728002] [<
c0bbfb8a>] kernel_init+0x5a/0xa0
> [ 2.732002] [<
c0103e47>] kernel_thread_helper+0x7/0x10
> [ 2.736002] [<
ffffffff>] 0xffffffff
We fix this false positive by annotating the bitfield in struct
sock.
Reported-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
#define sk_hash __sk_common.skc_hash
#define sk_prot __sk_common.skc_prot
#define sk_net __sk_common.skc_net
+ kmemcheck_bitfield_begin(flags);
unsigned char sk_shutdown : 2,
sk_no_check : 2,
sk_userlocks : 4;
+ kmemcheck_bitfield_end(flags);
unsigned char sk_protocol;
unsigned short sk_type;
int sk_rcvbuf;
sk = kmalloc(prot->obj_size, priority);
if (sk != NULL) {
+ kmemcheck_annotate_bitfield(sk, flags);
+
if (security_sk_alloc(sk, family, priority))
goto out_free;