linux/drivers/infiniband/hw/qib
Mike Marciniszyn 09dc9cd652 IB/qib: fix mcast detach when qp not attached
The code produces the following trace:

[1750924.419007] general protection fault: 0000 [#3] SMP
[1750924.420364] Modules linked in: nfnetlink autofs4 rpcsec_gss_krb5 nfsv4
dcdbas rfcomm bnep bluetooth nfsd auth_rpcgss nfs_acl dm_multipath nfs lockd
scsi_dh sunrpc fscache radeon ttm drm_kms_helper drm serio_raw parport_pc
ppdev i2c_algo_bit lpc_ich ipmi_si ib_mthca ib_qib dca lp parport ib_ipoib
mac_hid ib_cm i3000_edac ib_sa ib_uverbs edac_core ib_umad ib_mad ib_core
ib_addr tg3 ptp dm_mirror dm_region_hash dm_log psmouse pps_core
[1750924.420364] CPU: 1 PID: 8401 Comm: python Tainted: G D
3.13.0-39-generic #66-Ubuntu
[1750924.420364] Hardware name: Dell Computer Corporation PowerEdge
860/0XM089, BIOS A04 07/24/2007
[1750924.420364] task: ffff8800366a9800 ti: ffff88007af1c000 task.ti:
ffff88007af1c000
[1750924.420364] RIP: 0010:[<ffffffffa0131d51>] [<ffffffffa0131d51>]
qib_mcast_qp_free+0x11/0x50 [ib_qib]
[1750924.420364] RSP: 0018:ffff88007af1dd70  EFLAGS: 00010246
[1750924.420364] RAX: 0000000000000001 RBX: ffff88007b822688 RCX:
000000000000000f
[1750924.420364] RDX: ffff88007b822688 RSI: ffff8800366c15a0 RDI:
6764697200000000
[1750924.420364] RBP: ffff88007af1dd78 R08: 0000000000000001 R09:
0000000000000000
[1750924.420364] R10: 0000000000000011 R11: 0000000000000246 R12:
ffff88007baa1d98
[1750924.420364] R13: ffff88003ecab000 R14: ffff88007b822660 R15:
0000000000000000
[1750924.420364] FS:  00007ffff7fd8740(0000) GS:ffff88007fc80000(0000)
knlGS:0000000000000000
[1750924.420364] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[1750924.420364] CR2: 00007ffff597c750 CR3: 000000006860b000 CR4:
00000000000007e0
[1750924.420364] Stack:
[1750924.420364]  ffff88007b822688 ffff88007af1ddf0 ffffffffa0132429
000000007af1de20
[1750924.420364]  ffff88007baa1dc8 ffff88007baa0000 ffff88007af1de70
ffffffffa00cb313
[1750924.420364]  00007fffffffde88 0000000000000000 0000000000000008
ffff88003ecab000
[1750924.420364] Call Trace:
[1750924.420364]  [<ffffffffa0132429>] qib_multicast_detach+0x1e9/0x350
[ib_qib]
[1750924.568035]  [<ffffffffa00cb313>] ? ib_uverbs_modify_qp+0x323/0x3d0
[ib_uverbs]
[1750924.568035]  [<ffffffffa0092d61>] ib_detach_mcast+0x31/0x50 [ib_core]
[1750924.568035]  [<ffffffffa00cc213>] ib_uverbs_detach_mcast+0x93/0x170
[ib_uverbs]
[1750924.568035]  [<ffffffffa00c61f6>] ib_uverbs_write+0xc6/0x2c0 [ib_uverbs]
[1750924.568035]  [<ffffffff81312e68>] ? apparmor_file_permission+0x18/0x20
[1750924.568035]  [<ffffffff812d4cd3>] ? security_file_permission+0x23/0xa0
[1750924.568035]  [<ffffffff811bd214>] vfs_write+0xb4/0x1f0
[1750924.568035]  [<ffffffff811bdc49>] SyS_write+0x49/0xa0
[1750924.568035]  [<ffffffff8172f7ed>] system_call_fastpath+0x1a/0x1f
[1750924.568035] Code: 66 2e 0f 1f 84 00 00 00 00 00 31 c0 5d c3 66 2e 0f 1f
84 00 00 00 00 00 66 90 0f 1f 44 00 00 55 48 89 e5 53 48 89 fb 48 8b 7f 10
<f0> ff 8f 40 01 00 00 74 0e 48 89 df e8 8e f8 06 e1 5b 5d c3 0f
[1750924.568035] RIP  [<ffffffffa0131d51>] qib_mcast_qp_free+0x11/0x50
[ib_qib]
[1750924.568035]  RSP <ffff88007af1dd70>
[1750924.650439] ---[ end trace 73d5d4b3f8ad4851 ]

The fix is to note the qib_mcast_qp that was found.   If none is found, then
return EINVAL indicating the error.

Cc: <stable@vger.kernel.org>
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Reported-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
2016-01-19 13:09:44 -05:00
..
Kconfig Remove GENERIC_HARDIRQ config option 2013-09-13 15:09:52 +02:00
Makefile IB/qib: Convert opcode counters to per-context 2013-06-21 17:19:50 -07:00
qib_6120_regs.h
qib_7220_regs.h
qib_7220.h
qib_7322_regs.h
qib_common.h IB/qib: Fix checkpatch warnings 2015-02-20 09:04:09 -08:00
qib_cq.c IB/core: Change provider's API of create_cq to be extendible 2015-06-12 14:49:10 -04:00
qib_debugfs.c IB/qib: Fix checkpatch warnings 2015-02-20 09:04:09 -08:00
qib_debugfs.h IB/qib: Convert opcode counters to per-context 2013-06-21 17:19:50 -07:00
qib_diag.c IB/qib: Add blank line after declaration 2015-02-20 09:04:12 -08:00
qib_dma.c IB/qib: Remove ib_sg_dma_address() and ib_sg_dma_len() overloads 2014-04-01 11:16:31 -07:00
qib_driver.c IB/qib: Add blank line after declaration 2015-02-20 09:04:12 -08:00
qib_eeprom.c IB/qib: Add blank line after declaration 2015-02-20 09:04:12 -08:00
qib_file_ops.c mm: mark most vm_operations_struct const 2015-09-10 13:29:01 -07:00
qib_fs.c make simple_positive() public 2015-06-23 18:02:01 -04:00
qib_iba6120.c IB/qib: use arch_phys_wc_add() 2015-05-05 09:18:02 -04:00
qib_iba7220.c IB/qib: use arch_phys_wc_add() 2015-05-05 09:18:02 -04:00
qib_iba7322.c IB/mad: Support alternate Base Versions when creating MADs 2015-06-12 14:49:17 -04:00
qib_init.c mm, page_alloc: rename __GFP_WAIT to __GFP_RECLAIM 2015-11-06 17:50:42 -08:00
qib_intr.c IB/qib: Fix checkpatch warnings 2015-02-20 09:04:09 -08:00
qib_keys.c IB/qib: Remove old FRWR API 2015-10-28 22:32:29 -04:00
qib_mad.c IB/mad: Remove improper use of BUG_ON 2015-07-14 13:20:08 -04:00
qib_mad.h IB/core: Add core header changes needed for OPA 2015-08-28 22:54:50 -04:00
qib_mmap.c mm: mark most vm_operations_struct const 2015-09-10 13:29:01 -07:00
qib_mr.c IB: remove support for phys MRs 2015-12-23 14:29:04 -05:00
qib_pcie.c IB/qib: Add blank line after declaration 2015-02-20 09:04:12 -08:00
qib_pio_copy.c
qib_qp.c IB: split struct ib_send_wr 2015-10-08 11:09:10 +01:00
qib_qsfp.c IB/qib: Minor fixes to qib per SFF 8636 2015-12-07 16:36:00 -05:00
qib_qsfp.h
qib_rc.c IB: split struct ib_send_wr 2015-10-08 11:09:10 +01:00
qib_ruc.c IB: split struct ib_send_wr 2015-10-08 11:09:10 +01:00
qib_sd7220.c IB/qib: Add blank line after declaration 2015-02-20 09:04:12 -08:00
qib_sdma.c IB/qib: Improve SDMA performance 2013-08-13 11:14:34 -07:00
qib_srq.c
qib_sysfs.c IB/qib: Fix sizeof checkpatch warnings 2015-02-17 10:26:19 -08:00
qib_twsi.c IB/qib: Add blank line after declaration 2015-02-20 09:04:12 -08:00
qib_tx.c IB/qib: Add blank line after declaration 2015-02-20 09:04:12 -08:00
qib_uc.c IB: split struct ib_send_wr 2015-10-08 11:09:10 +01:00
qib_ud.c IB: split struct ib_send_wr 2015-10-08 11:09:10 +01:00
qib_user_pages.c IB/qib: Change get_user_pages() usage to always NULL vmas 2014-09-19 10:03:27 -07:00
qib_user_sdma.c IB/qib: Add blank line after declaration 2015-02-20 09:04:12 -08:00
qib_user_sdma.h
qib_verbs_mcast.c IB/qib: fix mcast detach when qp not attached 2016-01-19 13:09:44 -05:00
qib_verbs.c IB: remove support for phys MRs 2015-12-23 14:29:04 -05:00
qib_verbs.h IB: remove support for phys MRs 2015-12-23 14:29:04 -05:00
qib_wc_ppc64.c
qib_wc_x86_64.c IB/qib: fix test of unsigned variable 2015-05-12 13:55:41 -04:00
qib.h IB/qib: fix test of unsigned variable 2015-05-12 13:55:41 -04:00