diff options
author | Jarek Poplawski <jarkao2@gmail.com> | 2010-01-16 04:04:04 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-01-16 04:04:04 -0500 |
commit | d00c362f1b0ff54161e0a42b4554ac621a9ef92d (patch) | |
tree | 33ffeef90727309ad67690b2b7b63e1161b052ec /net/ax25 | |
parent | 2a04cd4c7d41c4549764734dcf5a883d304e3229 (diff) |
ax25: netrom: rose: Fix timer oopses
Wrong ax25_cb refcounting in ax25_send_frame() and by its callers can
cause timer oopses (first reported with 2.6.29.6 kernel).
Fixes: http://bugzilla.kernel.org/show_bug.cgi?id=14905
Reported-by: Bernard Pidoux <bpidoux@free.fr>
Tested-by: Bernard Pidoux <bpidoux@free.fr>
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ax25')
-rw-r--r-- | net/ax25/ax25_out.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/ax25/ax25_out.c b/net/ax25/ax25_out.c index bf706f83a5c9..14912600ec57 100644 --- a/net/ax25/ax25_out.c +++ b/net/ax25/ax25_out.c | |||
@@ -92,6 +92,12 @@ ax25_cb *ax25_send_frame(struct sk_buff *skb, int paclen, ax25_address *src, ax2 | |||
92 | #endif | 92 | #endif |
93 | } | 93 | } |
94 | 94 | ||
95 | /* | ||
96 | * There is one ref for the state machine; a caller needs | ||
97 | * one more to put it back, just like with the existing one. | ||
98 | */ | ||
99 | ax25_cb_hold(ax25); | ||
100 | |||
95 | ax25_cb_add(ax25); | 101 | ax25_cb_add(ax25); |
96 | 102 | ||
97 | ax25->state = AX25_STATE_1; | 103 | ax25->state = AX25_STATE_1; |