Description
In the Linux kernel, the following vulnerability has been resolved: parisc: Fix data TLB miss in sba_unmap_sg Rolf Eike Beer reported the following bug: [1274934.746891] Bad Address (null pointer deref?): Code=15 (Data TLB miss fault) at addr 0000004140000018 [1274934.746891] CPU: 3 PID: 5549 Comm: cmake Not tainted 5.15.4-gentoo-parisc64 #4 [1274934.746891] Hardware name: 9000/785/C8000 [1274934.746891] [1274934.746891] YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI [1274934.746891] PSW: 00001000000001001111111000001110 Not tainted [1274934.746891] r00-03 000000ff0804fe0e 0000000040bc9bc0 00000000406760e4 0000004140000000 [1274934.746891] r04-07 0000000040b693c0 0000004140000000 000000004a2b08b0 0000000000000001 [1274934.746891] r08-11 0000000041f98810 0000000000000000 000000004a0a7000 0000000000000001 [1274934.746891] r12-15 0000000040bddbc0 0000000040c0cbc0 0000000040bddbc0 0000000040bddbc0 [1274934.746891] r16-19 0000000040bde3c0 0000000040bddbc0 0000000040bde3c0 0000000000000007 [1274934.746891] r20-23 0000000000000006 000000004a368950 0000000000000000 0000000000000001 [1274934.746891] r24-27 0000000000001fff 000000000800000e 000000004a1710f0 0000000040b693c0 [1274934.746891] r28-31 0000000000000001 0000000041f988b0 0000000041f98840 000000004a171118 [1274934.746891] sr00-03 00000000066e5800 0000000000000000 0000000000000000 00000000066e5800 [1274934.746891] sr04-07 0000000000000000 0000000000000000 0000000000000000 0000000000000000 [1274934.746891] [1274934.746891] IASQ: 0000000000000000 0000000000000000 IAOQ: 00000000406760e8 00000000406760ec [1274934.746891] IIR: 48780030 ISR: 0000000000000000 IOR: 0000004140000018 [1274934.746891] CPU: 3 CR30: 00000040e3a9c000 CR31: ffffffffffffffff [1274934.746891] ORIG_R28: 0000000040acdd58 [1274934.746891] IAOQ[0]: sba_unmap_sg+0xb0/0x118 [1274934.746891] IAOQ[1]: sba_unmap_sg+0xb4/0x118 [1274934.746891] RP(r2): sba_unmap_sg+0xac/0x118 [1274934.746891] Backtrace: [1274934.746891] [<00000000402740cc>] dma_unmap_sg_attrs+0x6c/0x70 [1274934.746891] [<000000004074d6bc>] scsi_dma_unmap+0x54/0x60 [1274934.746891] [<00000000407a3488>] mptscsih_io_done+0x150/0xd70 [1274934.746891] [<0000000040798600>] mpt_interrupt+0x168/0xa68 [1274934.746891] [<0000000040255a48>] __handle_irq_event_percpu+0xc8/0x278 [1274934.746891] [<0000000040255c34>] handle_irq_event_percpu+0x3c/0xd8 [1274934.746891] [<000000004025ecb4>] handle_percpu_irq+0xb4/0xf0 [1274934.746891] [<00000000402548e0>] generic_handle_irq+0x50/0x70 [1274934.746891] [<000000004019a254>] call_on_stack+0x18/0x24 [1274934.746891] [1274934.746891] Kernel panic - not syncing: Bad Address (null pointer deref?) The bug is caused by overrunning the sglist and incorrectly testing sg_dma_len(sglist) before nents. Normally this doesn't cause a crash, but in this case sglist crossed a page boundary. This occurs in the following code: while (sg_dma_len(sglist) && nents--) { The fix is simply to test nents first and move the decrement of nents into the loop.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < f23f0444ead4d941165aa82ce2fcbb997dc00e97affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < de75676ee99bf9f25b1124ff301b3f7b8ba597d4affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < 867e50231c7605547d9334904d70a181f39f2d9eaffected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < efccc9b0c7e28d0eb7918a236e59f60dc23db4c3affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < f8f519d7df66c334b5e08f896ac70ee3b53add3baffected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < 8c8e949ae81e7f5ab58f9f9f8e9b573b93173dd2affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < e40ae3133ed87d6d526f3c8fc6a5f9a2d72dcdbfaffected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < b7d6f44a0fa716a82969725516dc0b16bc7cd514affected
Linux Linux
Default version status: affected
2.6.12affected0 to < 2.6.12unaffected4.9.303 to ≤ 4.9.*unaffected4.14.268 to ≤ 4.14.*unaffected4.19.231 to ≤ 4.19.*unaffected5.4.181 to ≤ 5.4.*unaffected5.10.102 to ≤ 5.10.*unaffected5.15.25 to ≤ 5.15.*unaffected5.16.11 to ≤ 5.16.*unaffected5.17 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/f23f0444ead4d941165aa82ce2fcbb997dc00e97 ↗
- https://git.kernel.org/stable/c/de75676ee99bf9f25b1124ff301b3f7b8ba597d4 ↗
- https://git.kernel.org/stable/c/867e50231c7605547d9334904d70a181f39f2d9e ↗
- https://git.kernel.org/stable/c/efccc9b0c7e28d0eb7918a236e59f60dc23db4c3 ↗
- https://git.kernel.org/stable/c/f8f519d7df66c334b5e08f896ac70ee3b53add3b ↗
- https://git.kernel.org/stable/c/8c8e949ae81e7f5ab58f9f9f8e9b573b93173dd2 ↗
- https://git.kernel.org/stable/c/e40ae3133ed87d6d526f3c8fc6a5f9a2d72dcdbf ↗
- https://git.kernel.org/stable/c/b7d6f44a0fa716a82969725516dc0b16bc7cd514 ↗