• Youquan,Song's avatar
    PCI: AER: fix aer inject result in kernel oops · 46256f83
    Youquan,Song authored
    If the BIOS does not export _OSC to allow OS take over the PCIe AER, the
    pcie aer driver will not initialize the aer service. However, the
    aer_inject driver does not check this scenario, which results in a kernel
    oops when injecting an aer error into OS.  For example:
    
    BUG: unable to handle kernel NULL pointer dereference at 0000000000000350
    IP: [<ffffffff812e08f7>] _spin_lock_irqsave+0xc/0x23
    PGD 155c41067 PUD 157fe0067 PMD 0
    Oops: 0002 [#1] SMP
    Pid: 5119, comm: aer-inject Not tainted 2.6.32-rc8-mce #2
    RIP: 0010:[<ffffffff812e08f7>]  [<ffffffff812e08f7>] _spin_lock_irqsave+0xc/0x23
    RSP: 0018:ffff880157f81e28  EFLAGS: 00010096
    RAX: 0000000000000296 RBX: 0000000000000000 RCX: 0000000000000100
    RDX: 0000000000010000 RSI: 0000000000000246 RDI: 0000000000000350
    RBP: ffff880157f81e28 R08: 0000000000000004 R09: ffff880157f81dac
    R10: ffff88015a666f60 R11: ffff88015a666f40 R12: ffff88015758cc00
    R13: 0000000000000350 R14: 0000000000000000 R15: 0000000000000100
    FS:  00007f4d4a66e6f0(0000) GS:ffff8800282e0000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    CR2: 0000000000000350 CR3: 000000015661a000 CR4: 00000000000006e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process aer-inject (pid: 5119, threadinfo ffff880157f80000, task ffff8801585f4340)
    Stack:
     ffff880157f81e78 ffffffff811b1615 ffff880157f81e78 ffffffff81222823
    Call Trace:
     [<ffffffff811b1615>] aer_irq+0x38/0x117
     [<ffffffff81222823>] ? device_for_each_child+0x5f/0x6f
     [<ffffffffa00967bf>] aer_inject_write+0x409/0x45e [aer_inject]
     [<ffffffff810eb80e>] vfs_write+0xae/0x16a
     [<ffffffff810eb98e>] sys_write+0x47/0x6e
     [<ffffffff8100ba2b>] system_call_fastpath+0x16/0x1b
    RIP  [<ffffffff812e08f7>] _spin_lock_irqsave+0xc/0x23
     RSP <ffff880157f81e28>
    CR2: 0000000000000350
    
    So check the _OSC before assuming that AER is available to the OS.
    Signed-off-by: default avatarYouquan, Song <youquan.song@intel.com>
    Acked-by: default avatarYing, Huang <ying.huang@intel.com>
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    46256f83
aer_inject.c 11.1 KB