This patch fixes a null pointer dereference during initialisation when no
sclp event facility is available:
sclp vt220 tty driver: could not register vt220 - sclp_register returned -5
Unable to handle kernel paging request at virtual user address
0000000000000000
Oops: 0004 [#1] PREEMPT SMP
Modules linked in:
CPU: 0 Not tainted
2.6.26-rc3-kvm-bigiron-00968-gd939e93-dirty #30
Process swapper (pid: 0, task:
0000000000600be0, ksp:
000000000064a000)
Krnl PSW :
0400000180000000 0000000000320d8c (sclp_unregister+0x48/0x8c)
R:0 T:1 IO:0 EX:0 Key:0 M:0 W:0 P:0 AS:0 CC:0 PM:0 EA:3
Krnl GPRS:
0000000000000000 0000000000000000 0000000000630478 0700000000649c20
0000000000000000 0000000000433060 000000000064a660 0000000002e26000
00000000006db000 0000000000000000 0000000000a78578 0000000000649b80
0000000000630dc0 000000000044fa20 0000000000320d76 0000000000649b80
Krnl Code:
0000000000320d7c:
e310c0080004 lg %r1,8(%r12)
0000000000320d82:
b9040032 lgr %r3,%r2
0000000000320d86:
c02000187b79 larl %r2,630478
>
0000000000320d8c:
e34010000024 stg %r4,0(%r1)
0000000000320d92:
e31040080024 stg %r1,8(%r4)
0000000000320d98:
c01100200200 lgfi %r1,
2097664
0000000000320d9e:
e310c0080024 stg %r1,8(%r12)
0000000000320da4:
c01100100100 lgfi %r1,
1048832
Call Trace:
([<
0000000000320d76>] sclp_unregister+0x32/0x8c)
[<
00000000006657b4>] __sclp_vt220_cleanup+0xc4/0xe0
[<
000000000066595c>] __sclp_vt220_init+0x18c/0x1a0
[<
0000000000665aba>] sclp_vt220_con_init+0x42/0x68
[<
00000000006601ca>] console_init+0x4e/0x68
[<
000000000064acae>] start_kernel+0x3a2/0x4dc
[<
0000000000100020>] _stext+0x20/0x80
INFO: lockdep is turned off.
Last Breaking-Event-Address:
[<
000000000041f964>] _spin_lock_irqsave+0xb0/0xb4
<4>---[ end trace
31fd0ba7d8756001 ]---
The issue is caused by a list_empty() check in __sclp_vt220_cleanup, which
usually fails on non-initialized list heads that contain {NULL,NULL} instead.
Signed-off-by: Carsten Otte <cotte@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>