Skip to content

Commit

Permalink
futex: fix init order
Browse files Browse the repository at this point in the history
When the futex init code fails to initialize the futex pseudo file system it
returns early without initializing the hash queues.  Should the boot succeed
then a futex syscall which tries to enqueue a waiter on the hashqueue will
crash due to the unitilialized plist heads.

Initialize the hash queues before the filesystem.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Ingo Molnar <mingo@elte.hu>
Cc: Lennert Buytenhek <buytenh@wantstofly.org>
Cc: Riku Voipio <riku.voipio@movial.fi>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Thomas Gleixner authored and Linus Torvalds committed Feb 24, 2008
1 parent 43fe105 commit 3e4ab74
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions kernel/futex.c
Original file line number Diff line number Diff line change
Expand Up @@ -2145,8 +2145,14 @@ static struct file_system_type futex_fs_type = {

static int __init init(void)
{
int i = register_filesystem(&futex_fs_type);
int i;

for (i = 0; i < ARRAY_SIZE(futex_queues); i++) {
plist_head_init(&futex_queues[i].chain, &futex_queues[i].lock);
spin_lock_init(&futex_queues[i].lock);
}

i = register_filesystem(&futex_fs_type);
if (i)
return i;

Expand All @@ -2156,10 +2162,6 @@ static int __init init(void)
return PTR_ERR(futex_mnt);
}

for (i = 0; i < ARRAY_SIZE(futex_queues); i++) {
plist_head_init(&futex_queues[i].chain, &futex_queues[i].lock);
spin_lock_init(&futex_queues[i].lock);
}
return 0;
}
__initcall(init);

0 comments on commit 3e4ab74

Please sign in to comment.