Re: [2.5.64, IPv6] sleeping function called from illegal context

James Morris (jmorris@intercode.com.au)
Wed, 5 Mar 2003 20:22:58 +1100 (EST)


On Wed, 5 Mar 2003, Jochen Hein wrote:
>
> The console output is:
>
> Debug: sleeping function called from illegal context at
> include/linux/rwsem.h:43
> Call Trace:
> [<c0116478>] __might_sleep+0x54/0x5c
> [<c01cab41>] crypto_alg_lookup+0x21/0xc8
> [<c01cb971>] crypto_alg_mod_lookup+0xd/0x2c
> [<c01cacfd>] crypto_alloc_tfm+0x11/0xc0
> [<c02c1240>] __ipv6_regen_rndid+0xa0/0x1f4
> [<c01149fd>] wake_up_process+0xd/0x14
> [<c02c13c2>] ipv6_regen_rndid+0x2e/0xc4
> [<c011eeb9>] run_timer_softirq+0xf1/0x144
> [<c02c1394>] ipv6_regen_rndid+0x0/0xc4
> [<c011b761>] do_softirq+0x51/0xb0
> [<c010a230>] do_IRQ+0x114/0x130
> [<c0106f54>] default_idle+0x0/0x34
> [<c0106f54>] default_idle+0x0/0x34
> [<c0108ea0>] common_interrupt+0x18/0x20
> [<c0106f54>] default_idle+0x0/0x34
> [<c0106f54>] default_idle+0x0/0x34
> [<c0106f7a>] default_idle+0x26/0x34
> [<c0107009>] cpu_idle+0x35/0x44
> [<c0105000>] rest_init+0x0/0x5c
> [<c0105055>] rest_init+0x55/0x5c
>
> __ipv6_regen_rndid(): too short regeneration interval; timer diabled
> for eth0.

Crypto transforms cannot be allocated in interrupt context or while
holding a spinlock. It seems that at least the latter is happening in
ipv6_regen_rndid().

The transform needs to be allocated prior to use in this case.

- James

-- 
James Morris
<jmorris@intercode.com.au>

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/