[Openswan Users] Cause of kernel bug in AES_set_key

David McCullough david_mccullough at mcafee.com
Wed Apr 14 23:08:49 EDT 2010


Jivin Armin Krauss lays it down ...
> Hello everybody,
> I've been struggling with the following bug for quite a while and finally 
> found the kernel feature causing it. Since I've seen others experiencing the 
> same problem I would like to share my knowledge.
> The bug occurs for me using a vanilla kernel in conjunction with openswan 
> and klips. I've seen it first with kernel version 2.6.23 and openswan 2.6.22 
> if I'm not mistaking. It results in the following bug right after starting 
> openswan:
> 
> BUG: unable to handle kernel NULL pointer dereference at 00000000
> IP: [<f865a6ad>] aes_32+0x3/0x496 [ipsec]
> *pde = 00000000
> Oops: 0002 [#1] SMP
> last sysfs file: /sys/devices/platform/w83627ehf.656/cpu0_vid
> Modules linked in: lp tun capi kernelcapi capifs ipt_MASQUERADE xt_MARK 
> ipt_REDIRECT xt_limit xt_state ipt_REJECT ipt_LOG iptable_nat iptable_mangle 
> nf_nat_ftp nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack_ftp 
> nf_conntrack ipsec serpent blowfish twofish twofish_common xcbc cbc md5 
> sha256_generic sha512_generic des_generic xt_TCPMSS xt_tcpmss xt_tcpudp 
> iptable_filter ip_tables x_tables pppoe pppox ppp_generic slhc dm_snapshot 
> dm_round_robin dm_multipath w83627ehf ov511 ovcamchip hwmon_vid eeprom 
> ide_cd_mod snd_via82xx k8temp hwmon snd_ac97_codec snd_pcsp ac97_bus 
> snd_mpu401_uart snd_usb_audio snd_usb_lib via_rhine snd_rawmidi i2c_viapro 
> gspca_sunplus gspca_main videodev v4l1_compat parport_pc parport
> 
> Pid: 4417, comm: pluto Not tainted (2.6.28.10-2 #1) MS-7312
> EIP: 0060:[<f865a6ad>] EFLAGS: 00210212 CPU: 0
> EIP is at aes_32+0x3/0x496 [ipsec]
> EAX: f67cf000 EBX: 00000208 ECX: 00000004 EDX: 00000000
> ESI: f67cf800 EDI: f67cf208 EBP: f6115b40 ESP: f6115b2c
>  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
> Process pluto (pid: 4417, ti=f6114000 task=f7033600 task.ti=f6114000)
> Stack:
>  f67cf208 f67cf800 00000208 f6115b5c c016d104 f6115b50 00200212 f8658f53
>  00000000 f6115b58 f8658c86 f6115b7c f8655cfa 00000010 00000000 f67cf000
>  f868426c 00000003 f67cf800 f864cf51 f6115c74 f863ad50 f6115e64 5d62442d
> Call Trace:
>  [<c016d104>] ? __kmalloc+0x77/0xae
>  [<f8658f53>] ? AES_set_key+0xa/0x17 [ipsec]
>  [<f8658c86>] ? _aes_set_key+0xf/0x19 [ipsec]
>  [<f8655cfa>] ? ipsec_alg_enc_key_create+0x1cf/0x284 [ipsec]
>  [<f864cf51>] ? pfkey_key_process+0x0/0x19f [ipsec]
>  [<f863ad50>] ? ipsec_sa_init+0x4f7/0x8ce [ipsec]
>  [<c046c493>] ? fn_hash_lookup+0x38/0x89
>  [<c04686a0>] ? __inet_dev_addr_type+0x71/0xa8
>  [<f864cf51>] ? pfkey_key_process+0x0/0x19f [ipsec]
>  [<f864a29b>] ? pfkey_add_parse+0x1c2/0x6eb [ipsec]
>  [<c042a962>] ? __alloc_skb+0x49/0xf8
>  [<f864fc08>] ? pfkey_msg_parse+0x466/0x5ea [ipsec]
>  [<f864cf51>] ? pfkey_key_process+0x0/0x19f [ipsec]
>  [<f86481b2>] ? pfkey_msg_interp+0x236/0x29c [ipsec]
>  [<f8647d34>] ? pfkey_sendmsg+0x2b1/0x3c1 [ipsec]
>  [<c0424721>] ? sock_aio_write+0xe8/0xf5
>  [<c04c145b>] ? do_page_fault+0x36c/0x6a9
>  [<c016f61c>] ? do_sync_write+0xab/0xe9
>  [<c0171f9c>] ? cp_new_stat64+0xe4/0xf6
>  [<c013459a>] ? autoremove_wake_function+0x0/0x33
>  [<c016f335>] ? fsnotify_access+0x4f/0x5a
>  [<c016fd4f>] ? vfs_write+0x8d/0xad
>  [<c016fe08>] ? sys_write+0x3b/0x60
>  [<c0102f06>] ? syscall_call+0x7/0xb
> Code: 89 e5 83 ec 08 53 56 57 8b 55 0c 8b 4d 14 81 f9 80 00 00 00 72 03 c1 
> e9 03 83 f9 20 74 0a 83 f9 18 74 05 b9 10 00 00 00 c1 e9 02 <89> 0a 8d 41 06 
> 89 42 04 8b 75 10 8d 7a 08 fc 55 89 c8 f3 a5 8b
> EIP: [<f865a6ad>] aes_32+0x3/0x496 [ipsec] SS:ESP 0068:f6115b2c
> ---[ end trace 72bde90d89f5c18c ]---
> 
> Playing around with kernel features I finally found the switch to a working 
> configuration in the following parameter:
> You have to disable CONFIG_FRAME_POINTER in the kernel hacking section 
> (caption: Compile the kernel with frame pointers).
> I was able to reproduce the bug up to current kernel and openswan versions 
> (last checked: kernel 2.6.31.13 and openswan 2.6.24). I couldn't check 
> openswan 2.6.25 due to an other problem but never mind. Configuring 
> CONFIG_FRAME_POINTER=y always gave me the kernel bug and changing it to 
> disabled did the trick.

Ok,  the problem is in the assembly, openswan only builds the assembler
versions for i386 with CONFIG_FRAME_POINTER=y,  everything else uses the 'C'
code.

A simple patch that should allow you to use CONFIG_FRAME_POINTER=y is
attached,

Cheers,
Davidm

-- 
David McCullough,      david_mccullough at mcafee.com,  Ph:+61 734352815
McAfee - SnapGear      http://www.mcafee.com         http://www.uCdot.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: remove-crypto-asm.patch
Type: text/x-diff
Size: 1927 bytes
Desc: not available
Url : http://lists.openswan.org/pipermail/users/attachments/20100415/abdd7f16/attachment.bin 


More information about the Users mailing list