OSDN Git Service
(root)
/
uclinux-h8
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
bd71c2b
)
[XFRM]: Fix policy double put
author
Patrick McHardy
<kaber@trash.net>
Mon, 20 Feb 2006 06:11:50 +0000
(22:11 -0800)
committer
David S. Miller
<davem@davemloft.net>
Mon, 20 Feb 2006 06:11:50 +0000
(22:11 -0800)
The policy is put once immediately and once at the error label, which results
in the following Oops:
kernel BUG at net/xfrm/xfrm_policy.c:250!
invalid opcode: 0000 [#2]
PREEMPT
[...]
CPU: 0
EIP: 0060:[<
c028caf7
>] Not tainted VLI
EFLAGS:
00210246
(2.6.16-rc3 #39)
EIP is at __xfrm_policy_destroy+0xf/0x46
eax:
d49f2000
ebx:
d49f2000
ecx:
f74bd880
edx:
f74bd280
esi:
d49f2000
edi:
00000001
ebp:
cd506dcc
esp:
cd506dc8
ds: 007b es: 007b ss: 0068
Process ssh (pid: 31970, threadinfo=
cd506000
task=
cfb04a70
)
Stack: <0>
cd506000
cd506e34
c028e92b
ebde7280
cd506e58
cd506ec0
f74bd280
00000000
00000214
0000000a
0000000a
00000000
00000002
f7ae6000
00000000
cd506e58
cd506e14
c0299e36
f74bd280
e873fe00
c02943fd
cd506ec0
ebde7280
f271f440
Call Trace:
[<
c0103a44
>] show_stack_log_lvl+0xaa/0xb5
[<
c0103b75
>] show_registers+0x126/0x18c
[<
c0103e68
>] die+0x14e/0x1db
[<
c02b6809
>] do_trap+0x7c/0x96
[<
c0104237
>] do_invalid_op+0x89/0x93
[<
c01035af
>] error_code+0x4f/0x54
[<
c028e92b
>] xfrm_lookup+0x349/0x3c2
[<
c02b0b0d
>] ip6_datagram_connect+0x317/0x452
[<
c0281749
>] inet_dgram_connect+0x49/0x54
[<
c02404d2
>] sys_connect+0x51/0x68
[<
c0240928
>] sys_socketcall+0x6f/0x166
[<
c0102aa1
>] syscall_call+0x7/0xb
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/xfrm/xfrm_policy.c
patch
|
blob
|
history
diff --git
a/net/xfrm/xfrm_policy.c
b/net/xfrm/xfrm_policy.c
index
98ec53b
..
5e6b05a
100644
(file)
--- a/
net/xfrm/xfrm_policy.c
+++ b/
net/xfrm/xfrm_policy.c
@@
-885,8
+885,6
@@
restart:
* We can't enlist stable bundles either.
*/
write_unlock_bh(&policy->lock);
-
- xfrm_pol_put(policy);
if (dst)
dst_free(dst);