)]}'
{
  "commit": "ae289dc1f474ff380e9d7601f02e4d766cbba408",
  "tree": "4fcb0d00eac8e8003c91118b55fce3a337a927bb",
  "parents": [
    "4bffbb3455372a26816e364fb4448810f7014452"
  ],
  "author": {
    "name": "Heiko Carstens",
    "email": "heiko.carstens@de.ibm.com",
    "time": "Thu Nov 15 09:22:40 2012 +0100"
  },
  "committer": {
    "name": "Martin Schwidefsky",
    "email": "schwidefsky@de.ibm.com",
    "time": "Thu Nov 15 16:33:09 2012 +0100"
  },
  "message": "s390/3215: fix tty close handling\n\nThe 3215 console always has the RAW3215_FIXED flag set, which causes\nraw3215_shutdown() not to wait for outstanding I/O requests if an attached\ntty gets closed.\nThe flag however can be simply removed, so we can guarantee that all requests\nbelonging to the tty have been processed when the tty is closed.\n\nHowever the tasklet that belongs to the 3215 device may be scheduled even if\nthere is no tty attached anymore, since we have a race between console and tty\nprocessing.\nThefore unconditional tty_wakekup() in raw3215_wakeup() can cause the following\nNULL pointer dereference:\n\n3.465368 Unable to handle kernel pointer dereference at virtual kernel address (null)\n3.465448 Oops: 0004 #1 SMP\n3.465454 Modules linked in:\n3.465459 CPU: 1 Not tainted 3.6.0 #1\n3.465462 Process swapper/1 (pid: 0, task: 000000003ffa4428, ksp: 000000003ffb7ce0)\n3.465466 Krnl PSW : 0404100180000000 0000000000162f86 (__wake_up+0x46/0xb8)\n3.465480            R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:0 CC:1 PM:0 EA:3\n         Krnl GPRS: fffffffffffffffe 0000000000000000 0000000000000160 0000000000000001\n3.465492            0000000000000001 0000000000000004 0000000000000004 000000000096b490\n3.465499            0000000000000001 0000000000000100 0000000000000001 0000000000000001\n3.465506            070000003fc87d60 0000000000000160 000000003fc87d68 000000003fc87d00\n3.465526 Krnl Code: 0000000000162f76: e3c0f0a80004      lg      %r12,168(%r15)\n                    0000000000162f7c: 58000370          l       %r0,880\n                   #0000000000162f80: c007ffffffff00    xilf    %r0,4294967295\n                   \u003e0000000000162f86: ba102000          cs      %r1,%r0,0(%r2)\n                    0000000000162f8a: 1211              ltr     %r1,%r1\n                    0000000000162f8c: a774002f          brc     7,162fea\n                    0000000000162f90: b904002d          lgr     %r2,%r13\n                    0000000000162f94: b904003a          lgr     %r3,%r10\n3.465597 Call Trace:\n3.465599 (\u003c0400000000000000\u003e 0x400000000000000)\n3.465602  \u003c000000000048c77e\u003e raw3215_wakeup+0x2e/0x40\n3.465607  \u003c0000000000134d66\u003e tasklet_action+0x96/0x168\n3.465612  \u003c000000000013423c\u003e __do_softirq+0xd8/0x21c\n3.465615  \u003c0000000000134678\u003e irq_exit+0xa8/0xac\n3.465617  \u003c000000000046c232\u003e do_IRQ+0x182/0x248\n3.465621  \u003c00000000005c8296\u003e io_return+0x0/0x8\n3.465625  \u003c00000000005c7cac\u003e vtime_stop_cpu+0x4c/0xb8\n3.465629 (\u003c0000000000194e06\u003e tick_nohz_idle_enter+0x4e/0x74)\n3.465633  \u003c0000000000104760\u003e cpu_idle+0x170/0x184\n3.465636  \u003c00000000005b5182\u003e smp_start_secondary+0xd6/0xe0\n3.465641  \u003c00000000005c86be\u003e restart_int_handler+0x56/0x6c\n3.465643  \u003c0000000000000000\u003e 0x0\n3.465645 Last Breaking-Event-Address:\n3.465647  \u003c0000000000403136\u003e tty_wakeup+0x46/0x98\n3.465652\n3.465654 Kernel panic - not syncing: Fatal exception in interrupt\n01: HCPGIR450W CP entered; disabled wait PSW 00020001 80000000 00000000 0010F63C\n\nThe easiest solution is simply to check if tty is NULL in the tasklet.\nIf it is NULL nothing is to do (no tty attached), otherwise tty_wakeup()\ncan be called, since we hold a reference to the tty.\nThis is not nice... but it is a small patch and it works.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nSigned-off-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9ffb6d5f17aa0523473215db57edeccda1391a70",
      "old_mode": 33188,
      "old_path": "drivers/s390/char/con3215.c",
      "new_id": "4ed343e4eb4155718cc31084eb6902a2ee84f570",
      "new_mode": 33188,
      "new_path": "drivers/s390/char/con3215.c"
    }
  ]
}
