android_kernel_oneplus_msm8998/drivers
Arnd Bergmann b693f2ad0f libata: fix HDIO_GET_32BIT ioctl
commit 287e6611ab1eac76c2c5ebf6e345e04c80ca9c61 upstream.

As reported by Soohoon Lee, the HDIO_GET_32BIT ioctl does not
work correctly in compat mode with libata.

I have investigated the issue further and found multiple problems
that all appeared with the same commit that originally introduced
HDIO_GET_32BIT handling in libata back in linux-2.6.8 and presumably
also linux-2.4, as the code uses "copy_to_user(arg, &val, 1)" to copy
a 'long' variable containing either 0 or 1 to user space.

The problems with this are:

* On big-endian machines, this will always write a zero because it
  stores the wrong byte into user space.

* In compat mode, the upper three bytes of the variable are updated
  by the compat_hdio_ioctl() function, but they now contain
  uninitialized stack data.

* The hdparm tool calling this ioctl uses a 'static long' variable
  to store the result. This means at least the upper bytes are
  initialized to zero, but calling another ioctl like HDIO_GET_MULTCOUNT
  would fill them with data that remains stale when the low byte
  is overwritten. Fortunately libata doesn't implement any of the
  affected ioctl commands, so this would only happen when we query
  both an IDE and an ATA device in the same command such as
  "hdparm -N -c /dev/hda /dev/sda"

* The libata code for unknown reasons started using ATA_IOC_GET_IO32
  and ATA_IOC_SET_IO32 as aliases for HDIO_GET_32BIT and HDIO_SET_32BIT,
  while the ioctl commands that were added later use the normal
  HDIO_* names. This is harmless but rather confusing.

This addresses all four issues by changing the code to use put_user()
on an 'unsigned long' variable in HDIO_GET_32BIT, like the IDE subsystem
does, and by clarifying the names of the ioctl commands.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reported-by: Soohoon Lee <Soohoon.Lee@f5.com>
Tested-by: Soohoon Lee <Soohoon.Lee@f5.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-03-09 15:34:52 -08:00
..
accessibility
acpi nfit: fix multi-interface dimm handling, acpi6.1 compatibility 2016-03-03 15:07:24 -08:00
amba
android drivers: android: correct the size of struct binder_uintptr_t for BC_DEAD_BINDER_DONE 2016-03-03 15:07:10 -08:00
ata libata: fix HDIO_GET_32BIT ioctl 2016-03-09 15:34:52 -08:00
atm
auxdisplay
base base/platform: Fix platform drivers with no probe callback 2016-02-17 12:30:55 -08:00
bcma
block zram: don't call idr_remove() from zram_remove() 2016-02-17 12:31:06 -08:00
bluetooth Bluetooth: Add support of Toshiba Broadcom based devices 2016-03-03 15:07:16 -08:00
bus bus: sunxi-rsb: Fix peripheral IC mapping runtime address 2015-12-22 11:42:30 -08:00
cdrom
char ipmi: move timer init to before irq is setup 2015-12-09 13:13:06 -06:00
clk clk: exynos: use irqsave version of spin_lock to avoid deadlock with irqs 2016-03-03 15:07:17 -08:00
clocksource clockevents/tcb_clksrc: Prevent disabling an already disabled clock 2016-03-03 15:07:15 -08:00
connector connector: bump skb->users before callback invocation 2016-01-04 21:46:45 -05:00
cpufreq cpufreq: Fix NULL reference crash while accessing policy->governor_data 2016-03-03 15:07:25 -08:00
cpuidle
crypto crypto: marvell/cesa - fix test in mv_cesa_dev_dma_init() 2016-02-17 12:31:05 -08:00
dca
devfreq
dio
dma dmaengine: dw: disable BLOCK IRQs for non-cyclic xfer 2016-03-03 15:07:24 -08:00
dma-buf
edac EDAC, mc_sysfs: Fix freeing bus' name 2016-03-03 15:07:17 -08:00
eisa
extcon
firewire IEEE 1394 subsystem patch: 2015-11-11 10:21:34 -08:00
firmware efi: Add pstore variables to the deletion whitelist 2016-03-03 15:07:09 -08:00
fmc
fpga fpga manager: Fix firmware resource leak on error 2015-11-24 15:25:46 -08:00
gpio gpio: revert get() to non-errorprogating behaviour 2015-12-17 15:48:29 +01:00
gpu drm/amdgpu: return from atombios_dp_get_dpcd only when error 2016-03-09 15:34:52 -08:00
hid HID: multitouch: fix input mode switching on some Elan panels 2016-02-17 12:31:06 -08:00
hsi
hv Drivers: hv: vmbus: Fix a Host signaling bug 2016-03-03 15:07:16 -08:00
hwmon hwmon: (ads1015) Handle negative conversion values correctly 2016-03-03 15:07:25 -08:00
hwspinlock drivers/hwspinlock: fix race between radix tree insertion and lookup 2016-02-25 12:01:23 -08:00
hwtracing coresight: checking for NULL string in coresight_name_match() 2016-03-03 15:07:14 -08:00
i2c i2c: i801: Adding Intel Lewisburg support for iTCO 2016-03-03 15:07:28 -08:00
ide
idle
iio iio: inkern: fix a NULL dereference on error 2016-02-25 12:01:17 -08:00
infiniband IB/cma: Fix RDMA port validation for iWarp 2016-03-03 15:07:32 -08:00
input Input: vmmouse - fix absolute device registration 2016-02-25 12:01:21 -08:00
iommu iommu/vt-d: Use BUS_NOTIFY_REMOVED_DEVICE in hotplug path 2016-03-09 15:34:51 -08:00
ipack
irqchip irqchip/gic-v3-its: Fix double ICC_EOIR write for LPI in EOImode==1 2016-03-03 15:07:14 -08:00
isdn ser_gigaset: remove unnecessary kfree() calls from release method 2015-12-15 13:24:21 -05:00
leds
lguest
lightnvm lightnvm: wrong offset in bad blk lun calculation 2015-12-29 08:28:32 -07:00
macintosh
mailbox
mcb
md dm: fix dm_rq_target_io leak on faults with .request_fn DM w/ blk-mq paths 2016-03-03 15:07:14 -08:00
media tda1004x: only update the frontend properties if locked 2016-03-03 15:07:14 -08:00
memory fsl-ifc: add missing include on ARM64 2015-12-16 00:16:58 +01:00
memstick
message SCSI queue for 4.4. 2015-11-12 07:06:18 -05:00
mfd
misc cxl: use correct operator when writing pcie config space values 2016-03-03 15:07:17 -08:00
mmc mmc: sdhci: Allow override of get_cd() called from sdhci_request() 2016-03-03 15:07:16 -08:00
mtd mtd: nand: assign reasonable default name for NAND drivers 2016-02-17 12:30:56 -08:00
net iwlwifi: mvm: don't allow sched scans without matches to be started 2016-03-03 15:07:32 -08:00
nfc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-11-10 18:11:41 -08:00
ntb
nubus
nvdimm libnvdimm: fix namespace object confusion in is_uuid_busy() 2016-02-25 12:01:21 -08:00
nvme NVMe: IO ending fixes on surprise removal 2015-12-22 10:12:04 -07:00
nvmem
of of/irq: Fix msi-map calculation for nonzero rid-base 2016-03-03 15:07:29 -08:00
oprofile
parisc parisc iommu: fix panic due to trying to allocate too large region 2015-12-12 16:07:25 +01:00
parport
pci PCI: keystone: Fix MSI code that retrieves struct pcie_port pointer 2016-03-09 15:34:49 -08:00
pcmcia
perf
phy phy: core: fix wrong err handle for phy_power_on 2016-03-03 15:07:28 -08:00
pinctrl pinctrl: bcm2835: Fix initial value for direction_output 2015-12-14 11:31:20 +01:00
platform ideapad-laptop: Add Lenovo Yoga 700 to no_hw_rfkill dmi list 2016-03-03 15:07:24 -08:00
pnp
power
powercap powercap / RAPL: fix BIOS lock check 2015-12-12 02:31:11 +01:00
pps
ps3
ptp
pwm pwm: Changes for v4.4-rc1 2015-11-11 09:16:10 -08:00
rapidio
ras
regulator regulator: mt6311: MT6311_REGULATOR needs to select REGMAP_I2C 2016-03-03 15:07:17 -08:00
remoteproc remoteproc: fix memory leak of remoteproc ida cache layers 2015-11-26 17:44:28 +02:00
reset
rpmsg
rtc rtc: da9063: fix access ordering error during RTC interrupt at system power on 2015-12-20 13:39:29 +01:00
s390 s390/dasd: fix performance drop 2016-03-03 15:07:12 -08:00
sbus
scsi qla2xxx: Fix stale pointer access. 2016-03-03 15:07:27 -08:00
sfi
sh drivers: sh: Restore legacy clock domain on SuperH platforms 2016-03-09 15:34:49 -08:00
sn
soc Few Keystone fixes for 4.4-rcx 2015-11-25 23:48:12 +01:00
spi spi: atmel: fix gpio chip-select in case of non-DT platform 2016-03-03 15:07:27 -08:00
spmi
ssb
staging Revert "Staging: panel: usleep_range is preferred over udelay" 2016-03-03 15:07:26 -08:00
target target: Fix WRITE_SAME/DISCARD conversion to linux 512b sectors 2016-03-09 15:34:51 -08:00
tc
thermal Thermal: do thermal zone update after a cooling device registered 2016-03-03 15:07:25 -08:00
thunderbolt
tty serial: omap: Prevent DoS using unprivileged ioctl(TIOCSRS485) 2016-02-25 12:01:14 -08:00
uio
usb cdc-acm:exclude Samsung phone 04e8:685d 2016-03-03 15:07:26 -08:00
uwb
vfio vfio: fix ioctl error handling 2016-03-09 15:34:50 -08:00
vhost vhost: replace % with & on data path 2015-12-07 17:28:10 +02:00
video fbcon: set a default value to blink interval 2016-03-09 15:34:50 -08:00
virt
virtio virtio_pci: fix use after free on release 2016-03-03 15:07:18 -08:00
vlynq
vme
w1
watchdog watchdog: mtk_wdt: Use MODE_KEY when stopping the watchdog 2015-11-23 09:00:09 +01:00
xen xen/pciback: Save the number of MSI-X entries to be copied later. 2016-03-03 15:07:30 -08:00
zorro
Kconfig
Makefile null_blk: register as a LightNVM device 2015-11-16 15:22:28 -07:00