android_kernel_motorola_sm6375/drivers
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Dan Williams ece3a3337c /dev/mem: Revoke mappings when a driver claims the region
[ Upstream commit 3234ac664a870e6ea69ae3a57d824cd7edbeacc5 ]

Close the hole of holding a mapping over kernel driver takeover event of
a given address range.

Commit 90a545e981 ("restrict /dev/mem to idle io memory ranges")
introduced CONFIG_IO_STRICT_DEVMEM with the goal of protecting the
kernel against scenarios where a /dev/mem user tramples memory that a
kernel driver owns. However, this protection only prevents *new* read(),
write() and mmap() requests. Established mappings prior to the driver
calling request_mem_region() are left alone.

Especially with persistent memory, and the core kernel metadata that is
stored there, there are plentiful scenarios for a /dev/mem user to
violate the expectations of the driver and cause amplified damage.

Teach request_mem_region() to find and shoot down active /dev/mem
mappings that it believes it has successfully claimed for the exclusive
use of the driver. Effectively a driver call to request_mem_region()
becomes a hole-punch on the /dev/mem device.

The typical usage of unmap_mapping_range() is part of
truncate_pagecache() to punch a hole in a file, but in this case the
implementation is only doing the "first half" of a hole punch. Namely it
is just evacuating current established mappings of the "hole", and it
relies on the fact that /dev/mem establishes mappings in terms of
absolute physical address offsets. Once existing mmap users are
invalidated they can attempt to re-establish the mapping, or attempt to
continue issuing read(2) / write(2) to the invalidated extent, but they
will then be subject to the CONFIG_IO_STRICT_DEVMEM checking that can
block those subsequent accesses.

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Fixes: 90a545e981 ("restrict /dev/mem to idle io memory ranges")
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/159009507306.847224.8502634072429766747.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-06-24 17:50:35 +02:00
..
accessibility
acpi ACPI/IORT: Fix PMCG node single ID mapping handling 2020-06-22 09:30:54 +02:00
amba
android
ata
atm
auxdisplay
base drivers: base: Fix NULL pointer exception in __platform_driver_probe() if a driver developer is foolish 2020-06-24 17:50:24 +02:00
bcma
block ps3disk: use the default segment boundary 2020-06-24 17:50:15 +02:00
bluetooth Bluetooth: hci_bcm: fix freeing not-requested IRQ 2020-06-22 09:31:18 +02:00
bus
cdrom
char /dev/mem: Revoke mappings when a driver claims the region 2020-06-24 17:50:35 +02:00
clk clk: ast2600: Fix AHB clock divider for A1 2020-06-24 17:50:35 +02:00
clocksource clocksource: dw_apb_timer_of: Fix missing clockevent timers 2020-06-22 09:30:55 +02:00
connector
counter
cpufreq cpufreq: Fix up cpufreq_boost_set_sw() 2020-06-17 16:40:33 +02:00
cpuidle cpuidle: Fix three reference count leaks 2020-06-22 09:31:10 +02:00
crypto crypto: stm32/crc32 - fix multi-instance 2020-06-22 09:31:07 +02:00
dax device-dax: don't leak kernel memory to user space after unloading kmem 2020-05-27 17:46:48 +02:00
dca
devfreq
dio
dma dmaengine: owl: Use correct lock in owl_dma_get_pchan() 2020-05-27 17:46:43 +02:00
dma-buf
edac EDAC/amd64: Add AMD family 17h model 60h PCI IDs 2020-06-22 09:31:20 +02:00
eisa
extcon
firewire
firmware firmware: imx: scu: Fix possible memory leak in imx_scu_probe() 2020-06-24 17:50:30 +02:00
fpga fpga: dfl: afu: Corrected error handling levels 2020-06-24 17:50:29 +02:00
fsi
gnss gnss: sirf: fix error return code in sirf_probe() 2020-06-22 09:31:20 +02:00
gpio gpio: pca953x: fix handling of automatic address incrementing 2020-06-24 17:50:22 +02:00
gpu drm/msm/mdp5: Fix mdp5_init error path for failed mdp5_kms allocation 2020-06-24 17:50:29 +02:00
greybus
hid HID: Add quirks for Trust Panora Graphic Tablet 2020-06-24 17:50:27 +02:00
hsi
hv Drivers: hv: vmbus: Always handle the VMBus messages on CPU0 2020-06-22 09:31:00 +02:00
hwmon hwmon: (k10temp) Add AMD family 17h model 60h PCI match 2020-06-22 09:31:19 +02:00
hwspinlock
hwtracing coresight: tmc: Fix TMC mode read in tmc_read_prepare_etb() 2020-06-24 17:50:15 +02:00
i2c i2c: pxa: fix i2c_pxa_scream_blue_murder() debug output 2020-06-24 17:50:24 +02:00
i3c
ide
idle
iio iio: bmp280: fix compensation of humidity 2020-06-24 17:50:12 +02:00
infiniband RDMA/iw_cxgb4: cleanup device debugfs entries on ULD remove 2020-06-24 17:50:33 +02:00
input Input: edt-ft5x06 - fix get_default register write access 2020-06-24 17:50:12 +02:00
interconnect
iommu iommu: Fix reference count leak in iommu_group_alloc. 2020-06-03 08:21:28 +02:00
ipack ipack: tpci200: fix error return code in tpci200_register() 2020-05-27 17:46:47 +02:00
irqchip
isdn
leds
lightnvm
macintosh drivers/macintosh: Fix memleak in windfarm_pm112 driver 2020-06-22 09:31:22 +02:00
mailbox
mcb
md dm zoned: return NULL if dmz_get_zone_for_reclaim() fails to find a zone 2020-06-24 17:50:31 +02:00
media media: ov5640: fix use of destroyed mutex 2020-06-22 09:31:19 +02:00
memory
memstick
message
mfd mfd: stmfx: Disable IRQ in suspend to avoid spurious interrupt 2020-06-24 17:50:33 +02:00
misc misc: xilinx-sdfec: improve get_user_pages_fast() error handling 2020-06-24 17:50:35 +02:00
mmc mmc: sdhci-esdhc-imx: fix the mask for tuning start point 2020-06-22 09:31:10 +02:00
mtd mtd: rawnand: tmio: Fix the probe error path 2020-06-22 09:31:26 +02:00
mux
net net: dsa: lantiq_gswip: fix and improve the unsupported interface error 2020-06-24 17:50:19 +02:00
nfc NFC: st21nfca: add missed kfree_skb() in an error path 2020-06-10 20:24:54 +02:00
ntb NTB: Fix the default port and peer numbers for legacy drivers 2020-06-24 17:50:18 +02:00
nubus
nvdimm
nvme nvme-tcp: use bh_lock in data_ready 2020-06-22 09:31:04 +02:00
nvmem nvmem: qfprom: remove incorrect write support 2020-06-10 20:24:57 +02:00
of
opp
oprofile
parisc
parport
pci PCI: amlogic: meson: Don't use FAST_LINK_MODE to set up link 2020-06-24 17:50:31 +02:00
pcmcia
perf drivers/perf: hisi: Fix typo in events attribute array 2020-06-22 09:31:01 +02:00
phy drivers: phy: sr-usb: do not use internal fsm for USB2 phy init 2020-06-24 17:50:28 +02:00
pinctrl pinctrl: rockchip: fix memleak in rockchip_dt_node_to_map 2020-06-24 17:50:26 +02:00
platform platform/x86: asus_wmi: Reserve more space for struct bias_args 2020-06-22 09:31:11 +02:00
pnp
power power: supply: smb347-charger: IRQSTAT_D is volatile 2020-06-24 17:50:25 +02:00
powercap
pps
ps3
ptp
pwm pwm: img: Call pm_runtime_put() in pm_runtime_get_sync() failed case 2020-06-24 17:50:18 +02:00
rapidio rapidio: fix an error in get_user_pages_fast() error handling 2020-05-27 17:46:48 +02:00
ras
regulator regulator: qcom-rpmh: Fix typos in pm8150 and pm8150l 2020-06-22 09:30:58 +02:00
remoteproc remoteproc: qcom_q6v5_mss: map/unmap mpss segments before/after use 2020-06-24 17:50:13 +02:00
reset
rpmsg
rtc rtc: mc13xxx: fix a double-unlock issue 2020-06-24 17:50:12 +02:00
s390 s390/qdio: put thinint indicator after early error 2020-06-24 17:50:22 +02:00
sbus
scsi scsi: ufs-qcom: Fix scheduling while atomic issue 2020-06-24 17:50:34 +02:00
sfi
sh
siox
slimbus slimbus: ngd: get drvdata from correct device 2020-06-24 17:50:22 +02:00
soc soc/tegra: pmc: Select GENERIC_PINCONF 2020-06-22 09:31:22 +02:00
soundwire soundwire: slave: don't init debugfs on device registration error 2020-06-24 17:50:23 +02:00
spi spi: dw: Return any value retrieved from the dma_transfer callback 2020-06-22 09:31:10 +02:00
spmi
ssb
staging staging: sm750fb: add missing case while setting FB_VISUAL 2020-06-24 17:50:24 +02:00
target scsi: target: tcmu: Fix a use after free in tcmu_check_expired_queue_cmd() 2020-06-24 17:50:34 +02:00
tc
tee
thermal thermal/drivers/ti-soc-thermal: Avoid dereferencing ERR_PTR 2020-06-24 17:50:23 +02:00
thunderbolt
tty tty: n_gsm: Fix bogus i++ in gsm_data_kick 2020-06-24 17:50:29 +02:00
uio
usb usb: gadget: Fix issue with config_ep_by_speed function 2020-06-24 17:50:32 +02:00
vfio vfio-pci: Mask cap zero 2020-06-24 17:50:29 +02:00
vhost scsi: vhost: Notify TCM about the maximum sg entries supported per command 2020-06-24 17:50:17 +02:00
video backlight: lp855x: Ensure regulators are disabled on probe failure 2020-06-24 17:50:09 +02:00
virt
virtio
visorbus
vlynq
vme
w1 w1: omap-hdq: cleanup to add missing newline for some dev_dbg 2020-06-22 09:31:26 +02:00
watchdog watchdog: da9062: No need to ping manually before setting timeout 2020-06-24 17:50:32 +02:00
xen xen/pvcalls-back: test for errors when calling backend_connect() 2020-06-17 16:40:38 +02:00
zorro
Kconfig
Makefile