diff options
author | Pekka Enberg <penberg@cs.helsinki.fi> | 2009-09-21 20:03:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-22 10:17:42 -0400 |
commit | 425fbf047cc70bb30dff368a6da02c8c2d229318 (patch) | |
tree | 7e71fc7a73c799debba250998ab3b3f56c124e90 /mm | |
parent | 6e17b17f1fc7b2f24383a693d63550d9e1460081 (diff) |
shmem: initialize struct shmem_sb_info to zero
Fixes the following kmemcheck false positive (the compiler is using
a 32-bit mov to load the 16-bit sbinfo->mode in shmem_fill_super):
[ 0.337000] Total of 1 processors activated (3088.38 BogoMIPS).
[ 0.352000] CPU0 attaching NULL sched-domain.
[ 0.360000] WARNING: kmemcheck: Caught 32-bit read from uninitialized
memory (9f8020fc)
[ 0.361000]
a44240820000000041f6998100000000000000000000000000000000ff030000
[ 0.368000] i i i i i i i i i i i i i i i i u u u u i i i i i i i i i i u
u
[ 0.375000] ^
[ 0.376000]
[ 0.377000] Pid: 9, comm: khelper Not tainted (2.6.31-tip #206) P4DC6
[ 0.378000] EIP: 0060:[<810a3a95>] EFLAGS: 00010246 CPU: 0
[ 0.379000] EIP is at shmem_fill_super+0xb5/0x120
[ 0.380000] EAX: 00000000 EBX: 9f845400 ECX: 824042a4 EDX: 8199f641
[ 0.381000] ESI: 9f8020c0 EDI: 9f845400 EBP: 9f81af68 ESP: 81cd6eec
[ 0.382000] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[ 0.383000] CR0: 8005003b CR2: 9f806200 CR3: 01ccd000 CR4: 000006d0
[ 0.384000] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
[ 0.385000] DR6: ffff4ff0 DR7: 00000400
[ 0.386000] [<810c25fc>] get_sb_nodev+0x3c/0x80
[ 0.388000] [<810a3514>] shmem_get_sb+0x14/0x20
[ 0.390000] [<810c207f>] vfs_kern_mount+0x4f/0x120
[ 0.392000] [<81b2849e>] init_tmpfs+0x7e/0xb0
[ 0.394000] [<81b11597>] do_basic_setup+0x17/0x30
[ 0.396000] [<81b11907>] kernel_init+0x57/0xa0
[ 0.398000] [<810039b7>] kernel_thread_helper+0x7/0x10
[ 0.400000] [<ffffffff>] 0xffffffff
[ 0.402000] khelper used greatest stack depth: 2820 bytes left
[ 0.407000] calling init_mmap_min_addr+0x0/0x10 @ 1
[ 0.408000] initcall init_mmap_min_addr+0x0/0x10 returned 0 after 0 usecs
Reported-by: Ingo Molnar <mingo@elte.hu>
Analysed-by: Vegard Nossum <vegard.nossum@gmail.com>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
Acked-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/shmem.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/mm/shmem.c b/mm/shmem.c index b4b56fd1e772..b206a7a32e2a 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
@@ -2309,17 +2309,14 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) | |||
2309 | int err = -ENOMEM; | 2309 | int err = -ENOMEM; |
2310 | 2310 | ||
2311 | /* Round up to L1_CACHE_BYTES to resist false sharing */ | 2311 | /* Round up to L1_CACHE_BYTES to resist false sharing */ |
2312 | sbinfo = kmalloc(max((int)sizeof(struct shmem_sb_info), | 2312 | sbinfo = kzalloc(max((int)sizeof(struct shmem_sb_info), |
2313 | L1_CACHE_BYTES), GFP_KERNEL); | 2313 | L1_CACHE_BYTES), GFP_KERNEL); |
2314 | if (!sbinfo) | 2314 | if (!sbinfo) |
2315 | return -ENOMEM; | 2315 | return -ENOMEM; |
2316 | 2316 | ||
2317 | sbinfo->max_blocks = 0; | ||
2318 | sbinfo->max_inodes = 0; | ||
2319 | sbinfo->mode = S_IRWXUGO | S_ISVTX; | 2317 | sbinfo->mode = S_IRWXUGO | S_ISVTX; |
2320 | sbinfo->uid = current_fsuid(); | 2318 | sbinfo->uid = current_fsuid(); |
2321 | sbinfo->gid = current_fsgid(); | 2319 | sbinfo->gid = current_fsgid(); |
2322 | sbinfo->mpol = NULL; | ||
2323 | sb->s_fs_info = sbinfo; | 2320 | sb->s_fs_info = sbinfo; |
2324 | 2321 | ||
2325 | #ifdef CONFIG_TMPFS | 2322 | #ifdef CONFIG_TMPFS |