diff options
author | Luiz Capitulino <lcapitulino@mandriva.com.br> | 2006-03-21 01:17:00 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-03-21 01:17:00 -0500 |
commit | 12e1872328e7055d06e539f1b687dc3d0610855c (patch) | |
tree | 8a3315b9c67da38a0cf0284100a2e3c06abca330 /net/core | |
parent | cdcdbe0b179adca0bcf98f660fcc63e208ae4284 (diff) |
[PKTGEN]: Fix kernel_thread() fail leak.
Free all the alocated resources if kernel_thread() call fails.
Signed-off-by: Luiz Capitulino <lcapitulino@mandriva.com.br>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/pktgen.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index f2c0e965c139..eef1392b7f8e 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -3082,6 +3082,7 @@ static struct pktgen_thread *__init pktgen_find_thread(const char *name) | |||
3082 | 3082 | ||
3083 | static int __init pktgen_create_thread(const char *name, int cpu) | 3083 | static int __init pktgen_create_thread(const char *name, int cpu) |
3084 | { | 3084 | { |
3085 | int err; | ||
3085 | struct pktgen_thread *t = NULL; | 3086 | struct pktgen_thread *t = NULL; |
3086 | struct proc_dir_entry *pe; | 3087 | struct proc_dir_entry *pe; |
3087 | 3088 | ||
@@ -3120,9 +3121,15 @@ static int __init pktgen_create_thread(const char *name, int cpu) | |||
3120 | 3121 | ||
3121 | t->removed = 0; | 3122 | t->removed = 0; |
3122 | 3123 | ||
3123 | if (kernel_thread((void *)pktgen_thread_worker, (void *)t, | 3124 | err = kernel_thread((void *)pktgen_thread_worker, (void *)t, |
3124 | CLONE_FS | CLONE_FILES | CLONE_SIGHAND) < 0) | 3125 | CLONE_FS | CLONE_FILES | CLONE_SIGHAND); |
3126 | if (err < 0) { | ||
3125 | printk("pktgen: kernel_thread() failed for cpu %d\n", t->cpu); | 3127 | printk("pktgen: kernel_thread() failed for cpu %d\n", t->cpu); |
3128 | remove_proc_entry(t->name, pg_proc_dir); | ||
3129 | list_del(&t->th_list); | ||
3130 | kfree(t); | ||
3131 | return err; | ||
3132 | } | ||
3126 | 3133 | ||
3127 | return 0; | 3134 | return 0; |
3128 | } | 3135 | } |