aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2012-05-17 23:52:26 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-06-10 00:33:03 +0900
commita2abc1310ff689486730215fcea629b74b01abe4 (patch)
tree73d57e9ac12a1180a4af0a95c090e1aa4425125f /net/core
parent45d21c136849cda838e77928d544fc7cd9d6239c (diff)
downloadkernel_samsung_smdk4412-a2abc1310ff689486730215fcea629b74b01abe4.zip
kernel_samsung_smdk4412-a2abc1310ff689486730215fcea629b74b01abe4.tar.gz
kernel_samsung_smdk4412-a2abc1310ff689486730215fcea629b74b01abe4.tar.bz2
pktgen: fix module unload for good
[ Upstream commit d4b1133558e0d417342d5d2c49e4c35b428ff20d ] commit c57b5468406 (pktgen: fix crash at module unload) did a very poor job with list primitives. 1) list_splice() arguments were in the wrong order 2) list_splice(list, head) has undefined behavior if head is not initialized. 3) We should use the list_splice_init() variant to clear pktgen_threads list. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/pktgen.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index 0865ea0..c0e0f76 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -3755,13 +3755,13 @@ static void __exit pg_cleanup(void)
{
struct pktgen_thread *t;
struct list_head *q, *n;
- struct list_head list;
+ LIST_HEAD(list);
/* Stop all interfaces & threads */
pktgen_exiting = true;
mutex_lock(&pktgen_thread_lock);
- list_splice(&list, &pktgen_threads);
+ list_splice_init(&pktgen_threads, &list);
mutex_unlock(&pktgen_thread_lock);
list_for_each_safe(q, n, &list) {