lkml.org 
[lkml]   [2016]   [May]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subject[Request for help] Kernel Panic in __nf_conntrack_find_get
Dear Linux developers,

At first, I'd like to apologize if this mailing list is not the appropriate
one to ask for help about a kernel panic, but I'm a bit confused about who
to ask for some help.

I'm not sure this one is a bug in the kernel or elsewhere, but I've
exhausted a lot of things in trying to identify what's happening, and I'm
not sure to be able to understand further what is happening.

Basically, I have a Debian 8 router under 3.16.7 patched by canonical kernel
team. This router has periodic kernel panics which are caused by SWAPPER.

I put a kexec/kdump setup to get crash logs, and this is what I get :

KERNEL: /var/crash/201605082314/kernel_link
DUMPFILE: /var/crash/201605082314/dump.201605082314 [PARTIAL DUMP]
CPUS: 12
DATE: Sun May 8 23:14:31 2016
UPTIME: 3 days, 10:44:11
LOAD AVERAGE: 0.85, 1.00, 1.10
TASKS: 264
NODENAME: odlyd
RELEASE: 3.16.0-4-amd64
VERSION: #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08)
MACHINE: x86_64 (2593 Mhz)
MEMORY: 16 GB
PANIC: ""
PID: 0
COMMAND: "swapper/0"
TASK: ffffffff8181a460 (1 of 12) [THREAD_INFO: ffffffff81800000]
CPU: 0
STATE: TASK_RUNNING (PANIC)

A backtrace gives me that :

PID: 0 TASK: ffffffff8181a460 CPU: 0 COMMAND: "swapper/0"
#0 [ffff88043f4039b0] machine_kexec at ffffffff8104c0a2
#1 [ffff88043f403a00] crash_kexec at ffffffff810df7da
#2 [ffff88043f403ac0] oops_end at ffffffff81016228
#3 [ffff88043f403ae0] general_protection at ffffffff815169c8
[exception RIP: __nf_conntrack_find_get+111]
RIP: ffffffffa0233e4f RSP: ffff88043f403b90 RFLAGS: 00010246
RAX: 000060fbc02020e0 RBX: ffb00504023b9dc0 RCX: 0000000000002ad2
RDX: ffff88043f403c00 RSI: 0000000000015690 RDI: 0000000005e6ab45
RBP: ffff88043f403c00 R8: 0000000000000000 R9: 00000000ea00da68
R10: ffff88043f403c18 R11: 0000000000000010 R12: ffffffff818ba200
R13: 00000000ab4bdd82 R14: 0000000000000000 R15: 0000000000000000
ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018
#4 [ffff88043f403bb8] nf_conntrack_in at ffffffffa0235833 [nf_conntrack]
#5 [ffff88043f403c88] nf_iterate at ffffffff8144fb65
#6 [ffff88043f403cc8] nf_hook_slow at ffffffff8144fc16
#7 [ffff88043f403d28] ip_rcv at ffffffff8145677d
#8 [ffff88043f403d50] __netif_receive_skb_core at ffffffff8141f1a3
#9 [ffff88043f403da0] netif_receive_skb_internal at ffffffff8141f42f
#10 [ffff88043f403dc0] napi_gro_receive at ffffffff8141ff00
#11 [ffff88043f403de0] tg3_poll_work at ffffffffa026589f [tg3]
#12 [ffff88043f403e60] napi_gro_flush at ffffffff8141f615
#13 [ffff88043f403e98] tg3_poll_msix at ffffffffa0265b85 [tg3]
#14 [ffff88043f403ed0] net_rx_action at ffffffff8141f7b0
#15 [ffff88043f403f20] __do_softirq at ffffffff8106c6a1
#16 [ffff88043f403f78] irq_exit at ffffffff8106ca75
#17 [ffff88043f403f80] do_IRQ at ffffffff81517822
--- <IRQ stack> ---
#18 [ffffffff81803e28] ret_from_intr at ffffffff8151566d
[exception RIP: cpuidle_enter_state+82]
RIP: ffffffff813e0122 RSP: ffffffff81803ed8 RFLAGS: 00000202
RAX: 00010ee477267826 RBX: ffffffff81074ae6 RCX: 0000000000000018
RDX: 0000000225c17d03 RSI: ffffffff81803fd8 RDI: 00010ee477267826
RBP: ffffffff81803f00 R8: 00000000ffffffff R9: 00000000000014a1
R10: 0000000000000030 R11: 0000000000000008 R12: 00000001046f0f95
R13: 00000001046f0f94 R14: 00000001046f0f94 R15: ffffffff81803ea0
ORIG_RAX: ffffffffffffff7b CS: 0010 SS: 0018
#19 [ffffffff81803f08] cpu_startup_entry at ffffffff810a8398
#20 [ffffffff81803f68] start_kernel at ffffffff81903076
#21 [ffffffff81803fa0] x86_64_start_kernel at ffffffff8190271f

So I guess the exception that raised a general protection fault is caused by
__nf_conntrack_find_get+111.

I had some troubles having something more readable (by me) than assembly, but
here is the __nf_conntrack_find_get disassembled by crash:

0xffffffffa0233de0 <__nf_conntrack_find_get>: nopl 0x0(%rax,%rax,1) [FTRACE NOP]
0xffffffffa0233de5 <__nf_conntrack_find_get+5>: push %r14
0xffffffffa0233de7 <__nf_conntrack_find_get+7>: mov %esi,%r14d
0xffffffffa0233dea <__nf_conntrack_find_get+10>: push %r13
0xffffffffa0233dec <__nf_conntrack_find_get+12>: push %r12
0xffffffffa0233dee <__nf_conntrack_find_get+14>: mov %rdi,%r12
0xffffffffa0233df1 <__nf_conntrack_find_get+17>: push %rbp
0xffffffffa0233df2 <__nf_conntrack_find_get+18>: mov %rdx,%rbp
0xffffffffa0233df5 <__nf_conntrack_find_get+21>: push %rbx
0xffffffffa0233df6 <__nf_conntrack_find_get+22>: mov %ecx,%r13d
0xffffffffa0233df9 <__nf_conntrack_find_get+25>: mov 0xaf0(%r12),%ecx
0xffffffffa0233e01 <__nf_conntrack_find_get+33>: addl $0x200,%gs:0xb860
0xffffffffa0233e0d <__nf_conntrack_find_get+45>: imul %r13,%rcx
0xffffffffa0233e11 <__nf_conntrack_find_get+49>: shr $0x20,%rcx
0xffffffffa0233e15 <__nf_conntrack_find_get+53>: lea 0x0(,%rcx,8),%rsi
0xffffffffa0233e1d <__nf_conntrack_find_get+61>: mov %rsi,%rax
0xffffffffa0233e20 <__nf_conntrack_find_get+64>: add 0xb00(%r12),%rax
0xffffffffa0233e28 <__nf_conntrack_find_get+72>: mov (%rax),%rbx
0xffffffffa0233e2b <__nf_conntrack_find_get+75>: test $0x1,%bl
0xffffffffa0233e2e <__nf_conntrack_find_get+78>: je 0xffffffffa0233e4f
0xffffffffa0233e30 <__nf_conntrack_find_get+80>: jmpq 0xffffffffa0233f90
0xffffffffa0233e35 <__nf_conntrack_find_get+85>: nopl (%rax)
0xffffffffa0233e38 <__nf_conntrack_find_get+88>: mov 0xb18(%r12),%rax
0xffffffffa0233e40 <__nf_conntrack_find_get+96>: incl %gs:(%rax)
0xffffffffa0233e43 <__nf_conntrack_find_get+99>: mov (%rbx),%rbx
0xffffffffa0233e46 <__nf_conntrack_find_get+102>: test $0x1,%bl
0xffffffffa0233e49 <__nf_conntrack_find_get+105>: jne 0xffffffffa0233f90
0xffffffffa0233e4f <__nf_conntrack_find_get+111>: mov 0x10(%rbx),%edi
0xffffffffa0233e52 <__nf_conntrack_find_get+114>: cmp %edi,0x0(%rbp)
0xffffffffa0233e55 <__nf_conntrack_find_get+117>: movzbl 0x37(%rbx),%eax
0xffffffffa0233e59 <__nf_conntrack_find_get+121>: jne 0xffffffffa0233e38
0xffffffffa0233e5b <__nf_conntrack_find_get+123>: mov 0x14(%rbx),%edx
0xffffffffa0233e5e <__nf_conntrack_find_get+126>: cmp %edx,0x4(%rbp)
0xffffffffa0233e61 <__nf_conntrack_find_get+129>: jne 0xffffffffa0233e38
0xffffffffa0233e63 <__nf_conntrack_find_get+131>: mov 0x18(%rbx),%edi
0xffffffffa0233e66 <__nf_conntrack_find_get+134>: cmp %edi,0x8(%rbp)
0xffffffffa0233e69 <__nf_conntrack_find_get+137>: jne 0xffffffffa0233e38
0xffffffffa0233e6b <__nf_conntrack_find_get+139>: mov 0x1c(%rbx),%edx
0xffffffffa0233e6e <__nf_conntrack_find_get+142>: cmp %edx,0xc(%rbp)
0xffffffffa0233e71 <__nf_conntrack_find_get+145>: jne 0xffffffffa0233e38
0xffffffffa0233e73 <__nf_conntrack_find_get+147>: mov 0x20(%rbx),%edx
0xffffffffa0233e76 <__nf_conntrack_find_get+150>: cmp %edx,0x10(%rbp)
0xffffffffa0233e79 <__nf_conntrack_find_get+153>: jne 0xffffffffa0233e38
0xffffffffa0233e7b <__nf_conntrack_find_get+155>: mov 0x24(%rbx),%edi
0xffffffffa0233e7e <__nf_conntrack_find_get+158>: cmp %edi,0x14(%rbp)
0xffffffffa0233e81 <__nf_conntrack_find_get+161>: jne 0xffffffffa0233e38
0xffffffffa0233e83 <__nf_conntrack_find_get+163>: mov 0x28(%rbx),%edx
0xffffffffa0233e86 <__nf_conntrack_find_get+166>: cmp %edx,0x18(%rbp)
0xffffffffa0233e89 <__nf_conntrack_find_get+169>: jne 0xffffffffa0233e38
0xffffffffa0233e8b <__nf_conntrack_find_get+171>: mov 0x2c(%rbx),%edx
0xffffffffa0233e8e <__nf_conntrack_find_get+174>: cmp %edx,0x1c(%rbp)
0xffffffffa0233e91 <__nf_conntrack_find_get+177>: jne 0xffffffffa0233e38
0xffffffffa0233e93 <__nf_conntrack_find_get+179>: mov 0x30(%rbx),%edx
0xffffffffa0233e96 <__nf_conntrack_find_get+182>: cmp %edx,0x20(%rbp)
0xffffffffa0233e99 <__nf_conntrack_find_get+185>: jne 0xffffffffa0233e38
0xffffffffa0233e9b <__nf_conntrack_find_get+187>: mov 0x24(%rbp),%edi
0xffffffffa0233e9e <__nf_conntrack_find_get+190>: mov 0x34(%rbx),%edx
0xffffffffa0233ea1 <__nf_conntrack_find_get+193>: and $0xffffff,%edi
0xffffffffa0233ea7 <__nf_conntrack_find_get+199>: and $0xffffff,%edx
0xffffffffa0233ead <__nf_conntrack_find_get+205>: cmp %edx,%edi
0xffffffffa0233eaf <__nf_conntrack_find_get+207>: jne 0xffffffffa0233e38
0xffffffffa0233eb1 <__nf_conntrack_find_get+209>: lea 0x0(,%rax,8),%rdx
0xffffffffa0233eb9 <__nf_conntrack_find_get+217>: shl $0x6,%rax
0xffffffffa0233ebd <__nf_conntrack_find_get+221>: mov %rbx,%rdi
0xffffffffa0233ec0 <__nf_conntrack_find_get+224>: sub %rdx,%rax
0xffffffffa0233ec3 <__nf_conntrack_find_get+227>: add $0x10,%rax
0xffffffffa0233ec7 <__nf_conntrack_find_get+231>: sub %rax,%rdi
0xffffffffa0233eca <__nf_conntrack_find_get+234>: mov 0xe8(%rdi),%rdx
0xffffffffa0233ed1 <__nf_conntrack_find_get+241>: test %rdx,%rdx
0xffffffffa0233ed4 <__nf_conntrack_find_get+244>: je 0xffffffffa023405e
0xffffffffa0233eda <__nf_conntrack_find_get+250>: movzwl 0x1a(%rdx),%eax
0xffffffffa0233ede <__nf_conntrack_find_get+254>: test %ax,%ax
0xffffffffa0233ee1 <__nf_conntrack_find_get+257>: je 0xffffffffa0233eef
0xffffffffa0233ee3 <__nf_conntrack_find_get+259>: add %rax,%rdx
0xffffffffa0233ee6 <__nf_conntrack_find_get+262>: je 0xffffffffa023405e
0xffffffffa0233eec <__nf_conntrack_find_get+268>: movzwl (%rdx),%eax
0xffffffffa0233eef <__nf_conntrack_find_get+271>: cmp %ax,%r14w
0xffffffffa0233ef3 <__nf_conntrack_find_get+275>: jne 0xffffffffa0233e38
0xffffffffa0233ef9 <__nf_conntrack_find_get+281>: mov 0x80(%rdi),%rax
0xffffffffa0233f00 <__nf_conntrack_find_get+288>: test $0x8,%al
0xffffffffa0233f02 <__nf_conntrack_find_get+290>: je 0xffffffffa0233e38
0xffffffffa0233f08 <__nf_conntrack_find_get+296>: mov $0x200,%esi
0xffffffffa0233f0d <__nf_conntrack_find_get+301>: mov $0xffffffffa0233f08,%rdi
0xffffffffa0233f14 <__nf_conntrack_find_get+308>: mov 0xb18(%r12),%rax
0xffffffffa0233f1c <__nf_conntrack_find_get+316>: incl %gs:0x4(%rax)
0xffffffffa0233f20 <__nf_conntrack_find_get+320>: callq 0xffffffff8106c8f0 <__local_bh_enable_ip>
0xffffffffa0233f25 <__nf_conntrack_find_get+325>: test %rbx,%rbx
0xffffffffa0233f28 <__nf_conntrack_find_get+328>: je 0xffffffffa0234076
0xffffffffa0233f2e <__nf_conntrack_find_get+334>: movzbl 0x37(%rbx),%eax
0xffffffffa0233f32 <__nf_conntrack_find_get+338>: mov %rbx,%rdi
0xffffffffa0233f35 <__nf_conntrack_find_get+341>: lea 0x0(,%rax,8),%rdx
0xffffffffa0233f3d <__nf_conntrack_find_get+349>: shl $0x6,%rax
0xffffffffa0233f41 <__nf_conntrack_find_get+353>: sub %rdx,%rax
0xffffffffa0233f44 <__nf_conntrack_find_get+356>: add $0x10,%rax
0xffffffffa0233f48 <__nf_conntrack_find_get+360>: sub %rax,%rdi
0xffffffffa0233f4b <__nf_conntrack_find_get+363>: mov 0x80(%rdi),%rax
0xffffffffa0233f52 <__nf_conntrack_find_get+370>: test $0x2,%ah
0xffffffffa0233f55 <__nf_conntrack_find_get+373>: jne 0xffffffffa0234076
0xffffffffa0233f5b <__nf_conntrack_find_get+379>: mov (%rdi),%edx
0xffffffffa0233f5d <__nf_conntrack_find_get+381>: test %edx,%edx
0xffffffffa0233f5f <__nf_conntrack_find_get+383>: je 0xffffffffa0234076
0xffffffffa0233f65 <__nf_conntrack_find_get+389>: lea 0x1(%rdx),%ecx
0xffffffffa0233f68 <__nf_conntrack_find_get+392>: mov %edx,%eax
0xffffffffa0233f6a <__nf_conntrack_find_get+394>: lock cmpxchg %ecx,(%rdi)
0xffffffffa0233f6e <__nf_conntrack_find_get+398>: cmp %eax,%edx
0xffffffffa0233f70 <__nf_conntrack_find_get+400>: mov %eax,%ecx
0xffffffffa0233f72 <__nf_conntrack_find_get+402>: jne 0xffffffffa023407e
0xffffffffa0233f78 <__nf_conntrack_find_get+408>: mov 0x10(%rbx),%esi
0xffffffffa0233f7b <__nf_conntrack_find_get+411>: cmp %esi,0x0(%rbp)
0xffffffffa0233f7e <__nf_conntrack_find_get+414>: movzbl 0x37(%rbx),%eax
0xffffffffa0233f82 <__nf_conntrack_find_get+418>: je 0xffffffffa0233fad
0xffffffffa0233f84 <__nf_conntrack_find_get+420>: callq 0xffffffffa0233240 <nf_conntrack_put>
0xffffffffa0233f89 <__nf_conntrack_find_get+425>: jmpq 0xffffffffa0233df9
0xffffffffa0233f8e <__nf_conntrack_find_get+430>: xchg %ax,%ax
0xffffffffa0233f90 <__nf_conntrack_find_get+432>: shr %rbx
0xffffffffa0233f93 <__nf_conntrack_find_get+435>: cmp %rbx,%rcx
0xffffffffa0233f96 <__nf_conntrack_find_get+438>: je 0xffffffffa0234065
0xffffffffa0233f9c <__nf_conntrack_find_get+444>: mov 0xb18(%r12),%rax
0xffffffffa0233fa4 <__nf_conntrack_find_get+452>: incl %gs:0x3c(%rax)
0xffffffffa0233fa8 <__nf_conntrack_find_get+456>: jmpq 0xffffffffa0233e1d
0xffffffffa0233fad <__nf_conntrack_find_get+461>: mov 0x14(%rbx),%esi
0xffffffffa0233fb0 <__nf_conntrack_find_get+464>: cmp %esi,0x4(%rbp)
0xffffffffa0233fb3 <__nf_conntrack_find_get+467>: jne 0xffffffffa0233f84
0xffffffffa0233fb5 <__nf_conntrack_find_get+469>: mov 0x18(%rbx),%esi
0xffffffffa0233fb8 <__nf_conntrack_find_get+472>: cmp %esi,0x8(%rbp)
0xffffffffa0233fbb <__nf_conntrack_find_get+475>: jne 0xffffffffa0233f84
0xffffffffa0233fbd <__nf_conntrack_find_get+477>: mov 0x1c(%rbx),%esi
0xffffffffa0233fc0 <__nf_conntrack_find_get+480>: cmp %esi,0xc(%rbp)
0xffffffffa0233fc3 <__nf_conntrack_find_get+483>: jne 0xffffffffa0233f84
0xffffffffa0233fc5 <__nf_conntrack_find_get+485>: mov 0x20(%rbx),%esi
0xffffffffa0233fc8 <__nf_conntrack_find_get+488>: cmp %esi,0x10(%rbp)
0xffffffffa0233fcb <__nf_conntrack_find_get+491>: jne 0xffffffffa0233f84
0xffffffffa0233fcd <__nf_conntrack_find_get+493>: mov 0x24(%rbx),%esi
0xffffffffa0233fd0 <__nf_conntrack_find_get+496>: cmp %esi,0x14(%rbp)
0xffffffffa0233fd3 <__nf_conntrack_find_get+499>: jne 0xffffffffa0233f84
0xffffffffa0233fd5 <__nf_conntrack_find_get+501>: mov 0x28(%rbx),%esi
0xffffffffa0233fd8 <__nf_conntrack_find_get+504>: cmp %esi,0x18(%rbp)
0xffffffffa0233fdb <__nf_conntrack_find_get+507>: jne 0xffffffffa0233f84
0xffffffffa0233fdd <__nf_conntrack_find_get+509>: mov 0x2c(%rbx),%esi
0xffffffffa0233fe0 <__nf_conntrack_find_get+512>: cmp %esi,0x1c(%rbp)
0xffffffffa0233fe3 <__nf_conntrack_find_get+515>: jne 0xffffffffa0233f84
0xffffffffa0233fe5 <__nf_conntrack_find_get+517>: mov 0x30(%rbx),%esi
0xffffffffa0233fe8 <__nf_conntrack_find_get+520>: cmp %esi,0x20(%rbp)
0xffffffffa0233feb <__nf_conntrack_find_get+523>: jne 0xffffffffa0233f84
0xffffffffa0233fed <__nf_conntrack_find_get+525>: mov 0x24(%rbp),%ecx
0xffffffffa0233ff0 <__nf_conntrack_find_get+528>: mov 0x34(%rbx),%edx
0xffffffffa0233ff3 <__nf_conntrack_find_get+531>: and $0xffffff,%ecx
0xffffffffa0233ff9 <__nf_conntrack_find_get+537>: and $0xffffff,%edx
0xffffffffa0233fff <__nf_conntrack_find_get+543>: cmp %edx,%ecx
0xffffffffa0234001 <__nf_conntrack_find_get+545>: jne 0xffffffffa0233f84
0xffffffffa0234003 <__nf_conntrack_find_get+547>: lea 0x0(,%rax,8),%rdx
0xffffffffa023400b <__nf_conntrack_find_get+555>: shl $0x6,%rax
0xffffffffa023400f <__nf_conntrack_find_get+559>: mov %rbx,%rcx
0xffffffffa0234012 <__nf_conntrack_find_get+562>: sub %rdx,%rax
0xffffffffa0234015 <__nf_conntrack_find_get+565>: add $0x10,%rax
0xffffffffa0234019 <__nf_conntrack_find_get+569>: sub %rax,%rcx
0xffffffffa023401c <__nf_conntrack_find_get+572>: mov 0xe8(%rcx),%rdx
0xffffffffa0234023 <__nf_conntrack_find_get+579>: test %rdx,%rdx
0xffffffffa0234026 <__nf_conntrack_find_get+582>: je 0xffffffffa023407a
0xffffffffa0234028 <__nf_conntrack_find_get+584>: movzwl 0x1a(%rdx),%eax
0xffffffffa023402c <__nf_conntrack_find_get+588>: test %ax,%ax
0xffffffffa023402f <__nf_conntrack_find_get+591>: je 0xffffffffa0234039
0xffffffffa0234031 <__nf_conntrack_find_get+593>: add %rdx,%rax
0xffffffffa0234034 <__nf_conntrack_find_get+596>: je 0xffffffffa023407a
0xffffffffa0234036 <__nf_conntrack_find_get+598>: movzwl (%rax),%eax
0xffffffffa0234039 <__nf_conntrack_find_get+601>: cmp %ax,%r14w
0xffffffffa023403d <__nf_conntrack_find_get+605>: jne 0xffffffffa0233f84
0xffffffffa0234043 <__nf_conntrack_find_get+611>: mov 0x80(%rcx),%rax
0xffffffffa023404a <__nf_conntrack_find_get+618>: test $0x8,%al
0xffffffffa023404c <__nf_conntrack_find_get+620>: je 0xffffffffa0233f84
0xffffffffa0234052 <__nf_conntrack_find_get+626>: mov %rbx,%rax
0xffffffffa0234055 <__nf_conntrack_find_get+629>: pop %rbx
0xffffffffa0234056 <__nf_conntrack_find_get+630>: pop %rbp
0xffffffffa0234057 <__nf_conntrack_find_get+631>: pop %r12
0xffffffffa0234059 <__nf_conntrack_find_get+633>: pop %r13
0xffffffffa023405b <__nf_conntrack_find_get+635>: pop %r14
0xffffffffa023405d <__nf_conntrack_find_get+637>: retq
0xffffffffa023405e <__nf_conntrack_find_get+638>: xor %eax,%eax
0xffffffffa0234060 <__nf_conntrack_find_get+640>: jmpq 0xffffffffa0233eef
0xffffffffa0234065 <__nf_conntrack_find_get+645>: mov $0x200,%esi
0xffffffffa023406a <__nf_conntrack_find_get+650>: mov $0xffffffffa0234065,%rdi
0xffffffffa0234071 <__nf_conntrack_find_get+657>: callq 0xffffffff8106c8f0 <__local_bh_enable_ip>
0xffffffffa0234076 <__nf_conntrack_find_get+662>: xor %ebx,%ebx
0xffffffffa0234078 <__nf_conntrack_find_get+664>: jmp 0xffffffffa0234052
0xffffffffa023407a <__nf_conntrack_find_get+666>: xor %eax,%eax
0xffffffffa023407c <__nf_conntrack_find_get+668>: jmp 0xffffffffa0234039
0xffffffffa023407e <__nf_conntrack_find_get+670>: test %ecx,%ecx
0xffffffffa0234080 <__nf_conntrack_find_get+672>: je 0xffffffffa0234076
0xffffffffa0234082 <__nf_conntrack_find_get+674>: lea 0x1(%rcx),%edx
0xffffffffa0234085 <__nf_conntrack_find_get+677>: mov %ecx,%eax
0xffffffffa0234087 <__nf_conntrack_find_get+679>: lock cmpxchg %edx,(%rdi)
0xffffffffa023408b <__nf_conntrack_find_get+683>: cmp %ecx,%eax
0xffffffffa023408d <__nf_conntrack_find_get+685>: je 0xffffffffa0233f78
0xffffffffa0234093 <__nf_conntrack_find_get+691>: mov %eax,%ecx
0xffffffffa0234095 <__nf_conntrack_find_get+693>: jmp 0xffffffffa023407e
0xffffffffa0234097 <__nf_conntrack_find_get+695>: nopw 0x0(%rax,%rax,1)

I could not directly find the source file of this function, but a little
digging in kernel sources of the debian package led me to
net/netfilter/nf_conntrack_core.c

I compiled it with the .config used by debian to build the kernel, and with GDB
I tracked down the code with list at the good offset address, even if the dumps
don't look exactly the same (the offset of the assembly code that triggers
general protection fault seems to be the same)

(gdb) disassemble __nf_conntrack_find_get
Dump of assembler code for function __nf_conntrack_find_get:
0x00000000000022a0 <+0>: callq 0x22a5 <__nf_conntrack_find_get+5>
0x00000000000022a5 <+5>: push %r14
0x00000000000022a7 <+7>: mov %esi,%r14d
0x00000000000022aa <+10>: push %r13
0x00000000000022ac <+12>: mov %rdx,%r13
0x00000000000022af <+15>: push %r12
0x00000000000022b1 <+17>: mov %rdi,%r12
0x00000000000022b4 <+20>: push %rbp
0x00000000000022b5 <+21>: push %rbx
0x00000000000022b6 <+22>: mov %ecx,%ebp
0x00000000000022b8 <+24>: mov 0xaf0(%r12),%edx
0x00000000000022c0 <+32>: addl $0x200,%gs:0x0
0x00000000000022cc <+44>: imul %rbp,%rdx
0x00000000000022d0 <+48>: shr $0x20,%rdx
0x00000000000022d4 <+52>: lea 0x0(,%rdx,8),%rcx
0x00000000000022dc <+60>: mov %rcx,%rax
0x00000000000022df <+63>: add 0xb00(%r12),%rax
0x00000000000022e7 <+71>: mov (%rax),%rbx
0x00000000000022ea <+74>: test $0x1,%bl
0x00000000000022ed <+77>: je 0x230f <__nf_conntrack_find_get+111>
0x00000000000022ef <+79>: jmpq 0x2470 <__nf_conntrack_find_get+464>
0x00000000000022f4 <+84>: nopl 0x0(%rax)
0x00000000000022f8 <+88>: mov 0xb18(%r12),%rax
0x0000000000002300 <+96>: incl %gs:(%rax)
0x0000000000002303 <+99>: mov (%rbx),%rbx
0x0000000000002306 <+102>: test $0x1,%bl
0x0000000000002309 <+105>: jne 0x2470 <__nf_conntrack_find_get+464>
0x000000000000230f <+111>: mov 0x10(%rbx),%edi
0x0000000000002312 <+114>: cmp %edi,0x0(%r13)
0x0000000000002316 <+118>: movzbl 0x37(%rbx),%eax
0x000000000000231a <+122>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x000000000000231c <+124>: mov 0x14(%rbx),%esi
0x000000000000231f <+127>: cmp %esi,0x4(%r13)
0x0000000000002323 <+131>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x0000000000002325 <+133>: mov 0x18(%rbx),%esi
0x0000000000002328 <+136>: cmp %esi,0x8(%r13)
0x000000000000232c <+140>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x000000000000232e <+142>: mov 0x1c(%rbx),%esi
0x0000000000002331 <+145>: cmp %esi,0xc(%r13)
0x0000000000002335 <+149>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x0000000000002337 <+151>: mov 0x20(%rbx),%esi
0x000000000000233a <+154>: cmp %esi,0x10(%r13)
0x000000000000233e <+158>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x0000000000002340 <+160>: mov 0x24(%rbx),%esi
0x0000000000002343 <+163>: cmp %esi,0x14(%r13)
0x0000000000002347 <+167>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x0000000000002349 <+169>: mov 0x28(%rbx),%esi
0x000000000000234c <+172>: cmp %esi,0x18(%r13)
0x0000000000002350 <+176>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x0000000000002352 <+178>: mov 0x2c(%rbx),%esi
0x0000000000002355 <+181>: cmp %esi,0x1c(%r13)
0x0000000000002359 <+185>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x000000000000235b <+187>: mov 0x30(%rbx),%esi
0x000000000000235e <+190>: cmp %esi,0x20(%r13)
0x0000000000002362 <+194>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x0000000000002364 <+196>: mov 0x24(%r13),%edi
0x0000000000002368 <+200>: mov 0x34(%rbx),%esi
0x000000000000236b <+203>: and $0xffffff,%edi
0x0000000000002371 <+209>: and $0xffffff,%esi
0x0000000000002377 <+215>: cmp %esi,%edi
0x0000000000002379 <+217>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x000000000000237f <+223>: lea 0x0(,%rax,8),%rsi
0x0000000000002387 <+231>: shl $0x6,%rax
0x000000000000238b <+235>: mov %rbx,%rdi
0x000000000000238e <+238>: sub %rsi,%rax
0x0000000000002391 <+241>: add $0x10,%rax
0x0000000000002395 <+245>: sub %rax,%rdi
0x0000000000002398 <+248>: mov 0xe8(%rdi),%rsi
0x000000000000239f <+255>: test %rsi,%rsi
0x00000000000023a2 <+258>: je 0x24b0 <__nf_conntrack_find_get+528>
0x00000000000023a8 <+264>: movzwl 0x1a(%rsi),%eax
0x00000000000023ac <+268>: test %ax,%ax
0x00000000000023af <+271>: je 0x23bd <__nf_conntrack_find_get+285>
0x00000000000023b1 <+273>: add %rsi,%rax
0x00000000000023b4 <+276>: je 0x24b0 <__nf_conntrack_find_get+528>
0x00000000000023ba <+282>: movzwl (%rax),%eax
0x00000000000023bd <+285>: cmp %ax,%r14w
0x00000000000023c1 <+289>: jne 0x22f8 <__nf_conntrack_find_get+88>
0x00000000000023c7 <+295>: mov 0x80(%rdi),%rax
0x00000000000023ce <+302>: test $0x8,%al
0x00000000000023d0 <+304>: je 0x22f8 <__nf_conntrack_find_get+88>
0x00000000000023d6 <+310>: mov $0x200,%esi
0x00000000000023db <+315>: mov $0x0,%rdi
0x00000000000023e2 <+322>: mov 0xb18(%r12),%rax
0x00000000000023ea <+330>: incl %gs:0x4(%rax)
0x00000000000023ee <+334>: callq 0x23f3 <__nf_conntrack_find_get+339>
0x00000000000023f3 <+339>: test %rbx,%rbx
0x00000000000023f6 <+342>: je 0x2590 <__nf_conntrack_find_get+752>
0x00000000000023fc <+348>: movzbl 0x37(%rbx),%eax
0x0000000000002400 <+352>: mov %rbx,%rdi
0x0000000000002403 <+355>: lea 0x0(,%rax,8),%rdx
0x000000000000240b <+363>: shl $0x6,%rax
0x000000000000240f <+367>: sub %rdx,%rax
0x0000000000002412 <+370>: add $0x10,%rax
0x0000000000002416 <+374>: sub %rax,%rdi
0x0000000000002419 <+377>: mov 0x80(%rdi),%rax
0x0000000000002420 <+384>: test $0x2,%ah
0x0000000000002423 <+387>: jne 0x2590 <__nf_conntrack_find_get+752>
0x0000000000002429 <+393>: mov (%rdi),%ecx
0x000000000000242b <+395>: test %ecx,%ecx
0x000000000000242d <+397>: je 0x2590 <__nf_conntrack_find_get+752>
0x0000000000002433 <+403>: lea 0x1(%rcx),%edx
0x0000000000002436 <+406>: mov %ecx,%eax
0x0000000000002438 <+408>: lock cmpxchg %edx,(%rdi)
0x000000000000243c <+412>: cmp %eax,%ecx
0x000000000000243e <+414>: mov %eax,%edx
0x0000000000002440 <+416>: jne 0x248f <__nf_conntrack_find_get+495>
0x0000000000002442 <+418>: mov 0x10(%rbx),%ecx
0x0000000000002445 <+421>: cmp %ecx,0x0(%r13)
0x0000000000002449 <+425>: movzbl 0x37(%rbx),%eax
0x000000000000244d <+429>: je 0x24c0 <__nf_conntrack_find_get+544>
0x000000000000244f <+431>: test %rdi,%rdi
0x0000000000002452 <+434>: je 0x22b8 <__nf_conntrack_find_get+24>
0x0000000000002458 <+440>: lock decl (%rdi)
0x000000000000245b <+443>: je 0x25b3 <__nf_conntrack_find_get+787>
0x0000000000002461 <+449>: jmpq 0x22b8 <__nf_conntrack_find_get+24>
0x0000000000002466 <+454>: nopw %cs:0x0(%rax,%rax,1)
0x0000000000002470 <+464>: shr %rbx
0x0000000000002473 <+467>: cmp %rbx,%rdx
0x0000000000002476 <+470>: je 0x259e <__nf_conntrack_find_get+766>
0x000000000000247c <+476>: mov 0xb18(%r12),%rax
0x0000000000002484 <+484>: incl %gs:0x3c(%rax)
0x0000000000002488 <+488>: jmpq 0x22dc <__nf_conntrack_find_get+60>
0x000000000000248d <+493>: mov %eax,%edx
0x000000000000248f <+495>: test %edx,%edx
0x0000000000002491 <+497>: je 0x2590 <__nf_conntrack_find_get+752>
0x0000000000002497 <+503>: lea 0x1(%rdx),%ecx
0x000000000000249a <+506>: mov %edx,%eax
0x000000000000249c <+508>: lock cmpxchg %ecx,(%rdi)
0x00000000000024a0 <+512>: cmp %edx,%eax
0x00000000000024a2 <+514>: je 0x2442 <__nf_conntrack_find_get+418>
0x00000000000024a4 <+516>: jmp 0x248d <__nf_conntrack_find_get+493>
0x00000000000024a6 <+518>: nopw %cs:0x0(%rax,%rax,1)
0x00000000000024b0 <+528>: xor %eax,%eax
0x00000000000024b2 <+530>: jmpq 0x23bd <__nf_conntrack_find_get+285>
0x00000000000024b7 <+535>: nopw 0x0(%rax,%rax,1)
0x00000000000024c0 <+544>: mov 0x14(%rbx),%ecx
0x00000000000024c3 <+547>: cmp %ecx,0x4(%r13)
0x00000000000024c7 <+551>: jne 0x244f <__nf_conntrack_find_get+431>
0x00000000000024c9 <+553>: mov 0x18(%rbx),%ecx
0x00000000000024cc <+556>: cmp %ecx,0x8(%r13)
0x00000000000024d0 <+560>: jne 0x244f <__nf_conntrack_find_get+431>
0x00000000000024d6 <+566>: mov 0x1c(%rbx),%ecx
0x00000000000024d9 <+569>: cmp %ecx,0xc(%r13)
0x00000000000024dd <+573>: jne 0x244f <__nf_conntrack_find_get+431>
0x00000000000024e3 <+579>: mov 0x20(%rbx),%ecx
0x00000000000024e6 <+582>: cmp %ecx,0x10(%r13)
0x00000000000024ea <+586>: jne 0x244f <__nf_conntrack_find_get+431>
0x00000000000024f0 <+592>: mov 0x24(%rbx),%ecx
0x00000000000024f3 <+595>: cmp %ecx,0x14(%r13)
0x00000000000024f7 <+599>: jne 0x244f <__nf_conntrack_find_get+431>
0x00000000000024fd <+605>: mov 0x28(%rbx),%ecx
0x0000000000002500 <+608>: cmp %ecx,0x18(%r13)
0x0000000000002504 <+612>: jne 0x244f <__nf_conntrack_find_get+431>
0x000000000000250a <+618>: mov 0x2c(%rbx),%ecx
0x000000000000250d <+621>: cmp %ecx,0x1c(%r13)
0x0000000000002511 <+625>: jne 0x244f <__nf_conntrack_find_get+431>
0x0000000000002517 <+631>: mov 0x30(%rbx),%ecx
0x000000000000251a <+634>: cmp %ecx,0x20(%r13)
0x000000000000251e <+638>: jne 0x244f <__nf_conntrack_find_get+431>
0x0000000000002524 <+644>: mov 0x24(%r13),%ecx
0x0000000000002528 <+648>: mov 0x34(%rbx),%edx
0x000000000000252b <+651>: and $0xffffff,%ecx
0x0000000000002531 <+657>: and $0xffffff,%edx
0x0000000000002537 <+663>: cmp %edx,%ecx
0x0000000000002539 <+665>: jne 0x244f <__nf_conntrack_find_get+431>
0x000000000000253f <+671>: lea 0x0(,%rax,8),%rdx
0x0000000000002547 <+679>: shl $0x6,%rax
0x000000000000254b <+683>: mov %rbx,%rcx
0x000000000000254e <+686>: sub %rdx,%rax
0x0000000000002551 <+689>: add $0x10,%rax
0x0000000000002555 <+693>: sub %rax,%rcx
0x0000000000002558 <+696>: mov 0xe8(%rcx),%rdx
0x000000000000255f <+703>: test %rdx,%rdx
0x0000000000002562 <+706>: je 0x25bd <__nf_conntrack_find_get+797>
0x0000000000002564 <+708>: movzwl 0x1a(%rdx),%eax
0x0000000000002568 <+712>: test %ax,%ax
0x000000000000256b <+715>: je 0x2575 <__nf_conntrack_find_get+725>
0x000000000000256d <+717>: add %rdx,%rax
0x0000000000002570 <+720>: je 0x25bd <__nf_conntrack_find_get+797>
0x0000000000002572 <+722>: movzwl (%rax),%eax
0x0000000000002575 <+725>: cmp %ax,%r14w
0x0000000000002579 <+729>: jne 0x244f <__nf_conntrack_find_get+431>
0x000000000000257f <+735>: mov 0x80(%rcx),%rax
0x0000000000002586 <+742>: test $0x8,%al
0x0000000000002588 <+744>: je 0x244f <__nf_conntrack_find_get+431>
0x000000000000258e <+750>: jmp 0x2592 <__nf_conntrack_find_get+754>
0x0000000000002590 <+752>: xor %ebx,%ebx
0x0000000000002592 <+754>: mov %rbx,%rax
0x0000000000002595 <+757>: pop %rbx
0x0000000000002596 <+758>: pop %rbp
0x0000000000002597 <+759>: pop %r12
0x0000000000002599 <+761>: pop %r13
0x000000000000259b <+763>: pop %r14
0x000000000000259d <+765>: retq
0x000000000000259e <+766>: mov $0x200,%esi
0x00000000000025a3 <+771>: mov $0x0,%rdi
0x00000000000025aa <+778>: xor %ebx,%ebx
0x00000000000025ac <+780>: callq 0x25b1 <__nf_conntrack_find_get+785>
0x00000000000025b1 <+785>: jmp 0x2592 <__nf_conntrack_find_get+754>
0x00000000000025b3 <+787>: callq 0x25b8 <__nf_conntrack_find_get+792>
0x00000000000025b8 <+792>: jmpq 0x22b8 <__nf_conntrack_find_get+24>
0x00000000000025bd <+797>: xor %eax,%eax
0x00000000000025bf <+799>: jmp 0x2575 <__nf_conntrack_find_get+725>
End of assembler dump.

(gdb) list *0x000000000000230f
0x230f is in __nf_conntrack_find_get (include/linux/netfilter.h:24).
19 static inline int nf_inet_addr_cmp(const union nf_inet_addr *a1,
20 const union nf_inet_addr *a2)
21 {
22 return a1->all[0] == a2->all[0] &&
23 a1->all[1] == a2->all[1] &&
24 a1->all[2] == a2->all[2] &&
25 a1->all[3] == a2->all[3];
26 }
27
28 static inline void nf_inet_addr_mask(const union nf_inet_addr *a1,

Basically, I have two questions :

* Did I understand correctly the backtrace, and did I dig at the good
place? (okay, that's already two questions)
* Admitting I'm good in my research, the only way this code would crash
would be if a1 or a2 is a pointer to a NULL or non-dereferencable
address. I guess that'd mean no IP address has been provided in a1 or a2.
Would it be a bug in the kernel or a bug in a software that propagates to
the kernel?

How could I investigate further more?

Thanks for your help, and in advance, I apologize for the noise.

--
Pierre-Elliott Bécue

\
 
 \ /
  Last update: 2016-05-09 12:41    [W:2.299 / U:0.000 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site