Hi,
On 25.09.2013, at 15:23, LEVAI Daniel <l...@ecentrum.hu> wrote: > On sze, szept 25, 2013 at 14:57:13 +0200, Mike Belopuhov wrote: >> On 25 September 2013 14:41, LEVAI Daniel <l...@ecentrum.hu> wrote: >>> Hi! >>> >>> I'm trying to setup StrongSwan (oh, the pain...) to iked(8) IPsec. When >>> trying to bring up the connection from the Linux end (ipsec up >>> <connection>), the iked(8) at the OpenBSD (5.3-stable) endpoint >>> segfaults. I'm trying to use certs and public keys for authentication >>> for this host-to-host ESP tunnel connection. >>> For the life of me I can not get a coredump from the ikev2 program, but >>> attaching gdb to its PID won't give me a bt either because it can't seem >>> to load the symbol table. I've recompiled iked from sources with >>> CFLAGS=-g and without stripping, but still, no luck. >>> >> >> use "CFLAGS=-g -DDEBUG" to disable chroot and generate a core dump. > > Thanks! Here is gdb's output: > > # gdb /sbin/iked iked.core > GNU gdb 6.3 > Copyright 2004 Free Software Foundation, Inc. > GDB is free software, covered by the GNU General Public License, and you are > welcome to change it and/or distribute copies of it under certain conditions. > Type "show copying" to see the conditions. > There is absolutely no warranty for GDB. Type "show warranty" for details. > This GDB was configured as "i386-unknown-openbsd5.3"... > Core was generated by `iked'. > Program terminated with signal 11, Segmentation fault. > #0 0x1c01726b in ikev2_msg_send (env=0x86e6b000, msg=0xcfbeee10) at > /usr/src/sbin/iked/ikev2_msg.c:296 > 296 m->msg_exchange = hdr->ike_exchange; this shouldn't fail, it sounds like memory corruption somewhere else. but can you also print *m and *hdr in gdb? Reyk > (gdb) list > 291 > 292 if ((m = ikev2_msg_copy(env, msg)) == NULL) { > 293 log_debug("%s: failed to copy a message", __func__); > 294 return (-1); > 295 } > 296 m->msg_exchange = hdr->ike_exchange; > 297 > 298 if (hdr->ike_flags & IKEV2_FLAG_RESPONSE) { > 299 TAILQ_INSERT_TAIL(&sa->sa_responses, m, msg_entry); > 300 timer_initialize(env, &m->msg_timer, > (gdb) bt > #0 0x1c01726b in ikev2_msg_send (env=0x86e6b000, msg=0xcfbeee10) at > /usr/src/sbin/iked/ikev2_msg.c:296 > #1 0x1c01836b in ikev2_msg_send_encrypt (env=0x86e6b000, sa=0x89ed0000, > ep=0xcfbef134, exchange=35 '#', firstpayload=36 '$', response=1) at > /usr/src/sbin/iked/ikev2_msg.c:625 > #2 0x1c0106c2 in ikev2_resp_ike_auth (env=0x86e6b000, sa=0x89ed0000) at > /usr/src/sbin/iked/ikev2.c:1993 > #3 0x1c00bdef in ikev2_ike_auth (env=0x86e6b000, sa=0x89ed0000, msg=0x0) at > /usr/src/sbin/iked/ikev2.c:566 > #4 0x1c00ab98 in ikev2_dispatch_cert (fd=32, p=0x3c03e558, imsg=0xcfbef644) > at /usr/src/sbin/iked/ikev2.c:234 > #5 0x1c0282b9 in proc_dispatch (fd=32, event=2, arg=0x3c03e558) at > /usr/src/sbin/iked/proc.c:324 > #6 0x1c032885 in event_base_loop (base=0x7cfd0c00, flags=0) at > /usr/src/lib/libevent/event.c:402 > #7 0x1c032b2a in event_loop (flags=0) at /usr/src/lib/libevent/event.c:478 > #8 0x1c032b42 in event_dispatch () at /usr/src/lib/libevent/event.c:416 > #9 0x1c028180 in proc_run (ps=0x86e6b4e0, p=0x3c03e47c, procs=0x3c03e520, > nproc=3, init=0, arg=0x0) at /usr/src/sbin/iked/proc.c:276 > #10 0x1c00a69c in ikev2 (ps=0x86e6b4e0, p=0x3c03e47c) at > /usr/src/sbin/iked/ikev2.c:114 > #11 0x1c027976 in proc_init (ps=0x86e6b4e0, p=0x3c03e47c, nproc=3) at > /usr/src/sbin/iked/proc.c:61 > #12 0x1c00955a in main (argc=2, argv=0xcfbefc18) at > /usr/src/sbin/iked/iked.c:157 > (gdb) bt full > #0 0x1c01726b in ikev2_msg_send (env=0x86e6b000, msg=0xcfbeee10) at > /usr/src/sbin/iked/ikev2_msg.c:296 > sa = (struct iked_sa *) 0x89ed0000 > buf = (struct ibuf *) 0x7eda8500 > natt = 0 > isnatt = 1 > hdr = (struct ike_header *) 0x818dc000 > m = (struct iked_message *) 0x87268c00 > __func__ = "ikev2_msg_send" > #1 0x1c01836b in ikev2_msg_send_encrypt (env=0x86e6b000, sa=0x89ed0000, > ep=0xcfbef134, exchange=35 '#', firstpayload=36 '$', response=1) at > /usr/src/sbin/iked/ikev2_msg.c:625 > resp = {msg_data = 0x7eda8500, msg_offset = 4, msg_local = {ss_len = 16 > '\020', ss_family = 2 '\002', __ss_pad1 = "\021\224N\203WÃ", __ss_pad2 = 0, > __ss_pad3 = '\0' <repeats 239 times>}, msg_locallen = 16, msg_peer = > {ss_len = 16 '\020', ss_family = 2 '\002', __ss_pad1 = "\022\231[Rj\202", > __ss_pad2 = 0, > __ss_pad3 = '\0' <repeats 239 times>}, msg_peerlen = 16, msg_sock = 0x0, > msg_fd = 12, msg_response = 1, msg_natt = 0, msg_error = 0, msg_e = 0, > msg_parent = 0xcfbeee10, > msg_policy = 0x0, msg_sa = 0x89ed0000, msg_msgid = 1, msg_exchange = 0 '\0', > msg_proposals = {tqh_first = 0x0, tqh_last = 0xcfbef050}, msg_rekey = {spi = > 0, spi_size = 0 '\0', > spi_protoid = 0 '\0'}, msg_nonce = 0x0, msg_ke = 0x0, msg_auth = {id_type > = 0 '\0', id_offset = 0 '\0', id_buf = 0x0}, msg_id = {id_type = 0 '\0', > id_offset = 0 '\0', > id_buf = 0x0}, msg_cert = {id_type = 0 '\0', id_offset = 0 '\0', id_buf = > 0x0}, msg_prop = 0x0, msg_attrlength = 0, msg_timer = {tmr_ev = {ev_next = > {tqe_next = 0x0, > tqe_prev = 0x0}, ev_active_next = {tqe_next = 0x0, tqe_prev = 0x0}, > ev_signal_next = {tqe_next = 0x0, tqe_prev = 0x0}, min_heap_idx = 0, ev_base > = 0x0, ev_fd = 0, > ev_events = 0, ev_ncalls = 0, ev_pncalls = 0x0, ev_timeout = {tv_sec = > 0, tv_usec = 0}, ev_pri = 0, ev_callback = 0, ev_arg = 0x0, ev_res = 0, > ev_flags = 0}, > tmr_env = 0x0, tmr_cb = 0, tmr_cbarg = 0x0}, msg_entry = {tqe_next = 0x0, > tqe_prev = 0x0}, msg_tries = 0} > hdr = (struct ike_header *) 0x818dc000 > pld = (struct ikev2_payload *) 0x818dc01c > buf = (struct ibuf *) 0x7eda8500 > e = (struct ibuf *) 0x7eda8860 > ret = -1 > __func__ = "ikev2_msg_send_encrypt" > #2 0x1c0106c2 in ikev2_resp_ike_auth (env=0x86e6b000, sa=0x89ed0000) at > /usr/src/sbin/iked/ikev2.c:1993 > pld = (struct ikev2_payload *) 0x82c784c7 > n = (struct ikev2_notify *) 0x0 > cert = (struct ikev2_cert *) 0x82c7801f > auth = (struct ikev2_auth *) 0x82c7837f > id = (struct iked_id *) 0x89ed03e0 > certid = (struct iked_id *) 0x89ed03f0 > e = (struct ibuf *) 0x7eda82e0 > firstpayload = 36 '$' > ret = -1 > len = 20 > #3 0x1c00bdef in ikev2_ike_auth (env=0x86e6b000, sa=0x89ed0000, msg=0x0) at > /usr/src/sbin/iked/ikev2.c:566 > id = (struct iked_id *) 0x0 > certid = (struct iked_id *) 0x0 > authmsg = (struct ibuf *) 0x0 > ikeauth = {auth_method = 0 '\0', auth_eap = 0 '\0', auth_length = 0 > '\0', > auth_data = '\0' <repeats 452 times>, > "ÿÿÿÿ\030õ¾ÏÏG\016\034\000Uî|\016\000\000\000(õ¾Ï", '\0' <repeats 16 times>, > "\rUî|\000\000\000\000r\000\000\000\bBÿÿ\000Uî|\177\000\000\000ÿÿÿÿXõ¾ÏÏG\016\034\000_î|\037\000\000\000hõ¾Ïøó¾Ï\000\000\000\000\004ô¾Ï\000\000\000\000\036_î|\000\000\000\000a\000\000\000\bBÿÿ\000_î|\177\000\000\000(õ¾Ï", > '\0' <repeats 212 times>, > "\020\000\000\000\200ëo|x\003\016\201\bõ¾Ï«ö\020\034À\216y|ß\000\000\000\020\000\000\000\020S\004<\000\000\000\000ð\215y|\030õ¾ÏÍ¿\020\034\020S"...} > policy = (struct iked_policy *) 0x881f9000 > ret = -1 > __func__ = "ikev2_ike_auth" > #4 0x1c00ab98 in ikev2_dispatch_cert (fd=32, p=0x3c03e558, imsg=0xcfbef644) > at /usr/src/sbin/iked/ikev2.c:234 > env = (struct iked *) 0x86e6b000 > sh = {sh_ispi = 9593918580251004300, sh_rspi = 10259927512637042501, > sh_initiator = 0} > sa = (struct iked_sa *) 0x89ed0000 > type = 4 '\004' > ---Type <return> to continue, or q <return> to quit--- > ptr = (u_int8_t *) 0x0 > len = 2116784128 > id = (struct iked_id *) 0x0 > __func__ = "ikev2_dispatch_cert" > #5 0x1c0282b9 in proc_dispatch (fd=32, event=2, arg=0x3c03e558) at > /usr/src/sbin/iked/proc.c:324 > p = (struct privsep_proc *) 0x3c03e558 > ps = (struct privsep *) 0x86e6b4e0 > iev = (struct imsgev *) 0x86e9b6a0 > ibuf = (struct imsgbuf *) 0x86e9b6a0 > imsg = {hdr = {type = 19, len = 37, flags = 0, peerid = 4294967295, pid > = 24878}, fd = -1, data = 0x7eda8fe0} > n = 37 > verbose = -2056474112 > title = 0x3c0036c2 "ikev2" > __func__ = "proc_dispatch" > #6 0x1c032885 in event_base_loop (base=0x7cfd0c00, flags=0) at > /usr/src/lib/libevent/event.c:402 > evsel = (const struct eventop *) 0x3c00a8bc > evbase = (void *) 0x856cb200 > tv = {tv_sec = 25, tv_usec = 535181} > tv_p = Variable "tv_p" is not available. > >>> The network looks like this: >>> [ Linux StrongSwan ] <--> [ NAT gw <remote_ip> ]O--Internetz--O[ >>> <firefly_ip> ] >>> | | >>> `========================== IPsec IKEv2 ======================' >>> >>> Here is the output of iked -dvv from the start until the sig11. >>> I'm sorry about the "anonimization", if it confuses the reader I'll >>> gladly elaborate. >>> >> >> you can also try "iked -dvvT" and see if that works. > > Yes, it doesn't crash if I disable NAT-Traversal. > > > Daniel > > -- > LÉVAI Dániel > PGP key ID = 0x83B63A8F > Key fingerprint = DBEC C66B A47A DFA2 792D 650C C69B BE4C 83B6 3A8F