• Carsten Otte's avatar
    [S390] vt220 console, initialize list head before use · 7b439d25
    Carsten Otte authored
    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: default avatarCarsten Otte <cotte@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    7b439d25
sclp_vt220.c 20.8 KB