linux_dsm_epyc7002/drivers/infiniband/hw/hfi1
Dennis Dalessandro 3d2a9d6425 IB/hfi1: Ensure correct mm is used at all times
Two earlier bug fixes have created a security problem in the hfi1
driver. One fix aimed to solve an issue where current->mm was not valid
when closing the hfi1 cdev. It attempted to do this by saving a cached
value of the current->mm pointer at file open time. This is a problem if
another process with access to the FD calls in via write() or ioctl() to
pin pages via the hfi driver. The other fix tried to solve a use after
free by taking a reference on the mm.

To fix this correctly we use the existing cached value of the mm in the
mmu notifier. Now we can check in the insert, evict, etc. routines that
current->mm matched what the notifier was registered for. If not, then
don't allow access. The register of the mmu notifier will save the mm
pointer.

Since in do_exit() the exit_mm() is called before exit_files(), which
would call our close routine a reference is needed on the mm. We rely on
the mmgrab done by the registration of the notifier, whereas before it was
explicit. The mmu notifier deregistration happens when the user context is
torn down, the creation of which triggered the registration.

Also of note is we do not do any explicit work to protect the interval
tree notifier. It doesn't seem that this is going to be needed since we
aren't actually doing anything with current->mm. The interval tree
notifier stuff still has a FIXME noted from a previous commit that will be
addressed in a follow on patch.

Cc: <stable@vger.kernel.org>
Fixes: e0cf75deab ("IB/hfi1: Fix mm_struct use after free")
Fixes: 3faa3d9a30 ("IB/hfi1: Make use of mm consistent")
Link: https://lore.kernel.org/r/20201125210112.104301.51331.stgit@awfm-01.aw.intel.com
Suggested-by: Jann Horn <jannh@google.com>
Reported-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Mike Marciniszyn <mike.marciniszyn@cornelisnetworks.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2020-11-25 20:30:46 -04:00
..
affinity.c IB/hfi1: Add interrupt handler functions for accelerated ipoib 2020-05-21 11:23:56 -03:00
affinity.h IB/hfi1: Add interrupt handler functions for accelerated ipoib 2020-05-21 11:23:56 -03:00
aspm.c IB/hfi1: Reduce excessive aspm inlines 2019-06-28 22:34:26 -03:00
aspm.h IB/hfi1: Reduce excessive aspm inlines 2019-06-28 22:34:26 -03:00
chip_registers.h IB/hfi1: Add RcvShortLengthErrCnt to hfi1stats 2020-01-10 10:57:17 -04:00
chip.c IB/hfi1: Fix error return code in hfi1_init_dd() 2020-11-13 12:25:21 -04:00
chip.h IB/hfi1: Add interrupt handler functions for accelerated ipoib 2020-05-21 11:23:56 -03:00
common.h IB/hfi1: Enable the transmit side of the datagram ipoib netdev 2020-05-21 11:23:58 -03:00
debugfs.c IB/hfi1: Fix module use count flaw due to leftover module put calls 2020-06-24 15:54:08 -03:00
debugfs.h
device.c
device.h
driver.c IB/hfi1: Add packet histogram trace event 2020-05-21 11:23:57 -03:00
efivar.c infiniband: hfi1: Use EFI GetVariable only when available 2020-02-23 21:59:42 +01:00
efivar.h
eprom.c
eprom.h
exp_rcv.c
exp_rcv.h
fault.c IB/hfi1: Use scnprintf() for avoiding potential buffer overflow 2020-03-26 15:06:14 -03:00
fault.h
file_ops.c IB/hfi1: Ensure correct mm is used at all times 2020-11-25 20:30:46 -04:00
firmware.c IB/hfi1: Use fallthrough pseudo-keyword 2020-07-24 16:59:55 -03:00
hfi.h IB/hfi1: Ensure correct mm is used at all times 2020-11-25 20:30:46 -04:00
init.c IB/hfi1: Do not destroy link_wq when the device is shut down 2020-07-02 13:54:50 -03:00
intr.c
iowait.c IB/hfi1: Don't cancel unused work item 2020-01-03 16:41:51 -04:00
iowait.h RDMA/hfi1: Fix trivial mis-spelling of 'descriptor' 2020-06-15 15:56:54 -03:00
ipoib_main.c IB/hfi1: use new function dev_fetch_sw_netstats 2020-10-13 17:33:48 -07:00
ipoib_rx.c IB/hfi1: Activate the dummy netdev 2020-05-21 11:23:56 -03:00
ipoib_tx.c IB/hfi1: Add atomic triggered sleep/wakeup 2020-06-24 16:13:38 -03:00
ipoib.h IB/hfi1: Add atomic triggered sleep/wakeup 2020-06-24 16:13:38 -03:00
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
mad.c IB/hfi1: Use fallthrough pseudo-keyword 2020-07-24 16:59:55 -03:00
mad.h RDMA: Replace zero-length array with flexible-array member 2020-02-20 13:33:51 -04:00
Makefile IB/hfi1: Add functions to receive accelerated ipoib packets 2020-05-21 11:23:56 -03:00
mmu_rb.c IB/hfi1: Ensure correct mm is used at all times 2020-11-25 20:30:46 -04:00
mmu_rb.h IB/hfi1: Ensure correct mm is used at all times 2020-11-25 20:30:46 -04:00
msix.c IB/hfi1: Activate the dummy netdev 2020-05-21 11:23:56 -03:00
msix.h IB/hfi1: Activate the dummy netdev 2020-05-21 11:23:56 -03:00
netdev_rx.c IB/hfi1: Restore kfree in dummy_netdev cleanup 2020-06-24 15:54:08 -03:00
netdev.h IB/hfi1: Activate the dummy netdev 2020-05-21 11:23:56 -03:00
opa_compat.h
opfn.c
opfn.h
pcie.c IB/hfi1: Convert PCIBIOS_* errors to generic -E* errors 2020-06-30 13:27:14 -03:00
pio_copy.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
pio.c IB/hfi1: Use fallthrough pseudo-keyword 2020-07-24 16:59:55 -03:00
pio.h RDMA: Replace zero-length array with flexible-array member 2020-02-20 13:33:51 -04:00
platform.c IB/hfi1: Use fallthrough pseudo-keyword 2020-07-24 16:59:55 -03:00
platform.h
qp.c RDMA 5.9 merge window pull request 2020-08-06 16:43:36 -07:00
qp.h RDMA/hfi1: Remove hfi1_create_qp declaration 2020-06-22 14:49:27 -03:00
qsfp.c IB/hfi1: Use fallthrough pseudo-keyword 2020-07-24 16:59:55 -03:00
qsfp.h
rc.c IB/hfi1: Use fallthrough pseudo-keyword 2020-07-24 16:59:55 -03:00
rc.h
ruc.c
sdma_txreq.h
sdma.c RDMA/hfi1: Convert tasklets to use new tasklet_setup() API 2020-09-03 12:01:52 -03:00
sdma.h RDMA: Replace zero-length array with flexible-array member 2020-02-20 13:33:51 -04:00
sysfs.c IB/hfi1: Call kobject_put() when kobject_init_and_add() fails 2020-03-27 13:13:36 -03:00
tid_rdma.c RDMA/hfi1: Correct an interlock issue for TID RDMA WRITE request 2020-08-20 08:31:41 -03:00
tid_rdma.h IB/hfi1: Calculate flow weight based on QP MTU for TID RDMA 2019-11-06 13:15:36 -04:00
trace_ctxts.h IB/hfi1: Add packet histogram trace event 2020-05-21 11:23:57 -03:00
trace_dbg.h
trace_ibhdrs.h IB/hfi1: Add missing INVALIDATE opcodes for trace 2019-06-28 22:34:26 -03:00
trace_iowait.h
trace_misc.h
trace_mmu.h
trace_rc.h
trace_rx.h IB/hfi1: Add fast and slow handlers for receive context 2020-01-10 10:57:16 -04:00
trace_tid.h ftrace: Rework event_create_dir() 2019-11-27 07:44:25 +01:00
trace_tx.h ftrace: Rework event_create_dir() 2019-11-27 07:44:25 +01:00
trace.c IB/hfi1: Add packet histogram trace event 2020-05-21 11:23:57 -03:00
trace.h
uc.c IB/hfi1: Use fallthrough pseudo-keyword 2020-07-24 16:59:55 -03:00
ud.c IB/{rdmavt, hfi1, qib}: Add helpers to hide SWQE WR details 2019-06-28 22:34:26 -03:00
user_exp_rcv.c IB/hfi1: Ensure correct mm is used at all times 2020-11-25 20:30:46 -04:00
user_exp_rcv.h IB/hfi1: Ensure correct mm is used at all times 2020-11-25 20:30:46 -04:00
user_pages.c mm, tree-wide: rename put_user_page*() to unpin_user_page*() 2020-01-31 10:30:38 -08:00
user_sdma.c IB/hfi1: Ensure correct mm is used at all times 2020-11-25 20:30:46 -04:00
user_sdma.h IB/hfi1: Ensure correct mm is used at all times 2020-11-25 20:30:46 -04:00
verbs_txreq.c IB/hfi1: Silence txreq allocation warnings 2019-06-17 21:15:40 -04:00
verbs_txreq.h RDMA/hfi1: Fix trivial mis-spelling of 'descriptor' 2020-06-15 15:56:54 -03:00
verbs.c RDMA: Fix link active_speed size 2020-09-18 10:31:24 -03:00
verbs.h treewide: Use sizeof_field() macro 2019-12-09 10:36:44 -08:00
vnic_main.c IB/hfi1: Fix hfi1_netdev_rx_init() error handling 2020-06-02 20:32:54 -03:00
vnic_sdma.c net: Use skb_frag_off accessors 2019-07-30 14:21:32 -07:00
vnic.h IB/hfi1: Activate the dummy netdev 2020-05-21 11:23:56 -03:00