aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-04-27 13:39:38 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-04-27 13:39:38 -0400
commitd8a332730e757129e70675679f2b2a03f1ecf65e (patch)
tree90f955d200bd6837eea81f14dad543ba5140fdd0
parentee3748be5c18db11f17baebf50405bbebeb85471 (diff)
parent6a7228d90d42bcacfe38786756ba62762b91c20a (diff)
Merge tag 'char-misc-4.17-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
Pull char/misc driver fixes from Greg KH: "Here are some small char and misc driver fixes for 4.17-rc3 A variety of small things that have fallen out after 4.17-rc1 was out. Some vboxguest fixes for systems with lots of memory, amba bus fixes, some MAINTAINERS updates, uio_hv_generic driver fixes, and a few other minor things that resolve problems that people reported. The amba bus fixes took twice to get right, the first time I messed up applying the patches in the wrong order, hence the revert and later addition again with the correct fix, sorry about that. All of these have been in linux-next with no reported issues" * tag 'char-misc-4.17-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: ARM: amba: Fix race condition with driver_override ARM: amba: Make driver_override output consistent with other buses Revert "ARM: amba: Fix race condition with driver_override" ARM: amba: Don't read past the end of sysfs "driver_override" buffer ARM: amba: Fix race condition with driver_override virt: vbox: Log an error when we fail to get the host version virt: vbox: Use __get_free_pages instead of kmalloc for DMA32 memory virt: vbox: Add vbg_req_free() helper function virt: vbox: Move declarations of vboxguest private functions to private header slimbus: Fix out-of-bounds access in slim_slicesize() MAINTAINERS: add dri-devel&linaro-mm for Android ION fpga-manager: altera-ps-spi: preserve nCONFIG state MAINTAINERS: update my email address uio_hv_generic: fix subchannel ring mmap uio_hv_generic: use correct channel in isr uio_hv_generic: make ring buffer attribute for primary channel uio_hv_generic: set size of ring buffer attribute ANDROID: binder: prevent transactions into own process.
-rw-r--r--MAINTAINERS6
-rw-r--r--drivers/amba/bus.c17
-rw-r--r--drivers/android/binder.c8
-rw-r--r--drivers/fpga/altera-ps-spi.c2
-rw-r--r--drivers/slimbus/messaging.c2
-rw-r--r--drivers/uio/uio_hv_generic.c72
-rw-r--r--drivers/virt/vboxguest/vboxguest_core.c70
-rw-r--r--drivers/virt/vboxguest/vboxguest_core.h9
-rw-r--r--drivers/virt/vboxguest/vboxguest_linux.c19
-rw-r--r--drivers/virt/vboxguest/vboxguest_utils.c17
-rw-r--r--include/linux/vbox_utils.h23
11 files changed, 124 insertions, 121 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 1901ef510b43..3e41e12a88a4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -905,6 +905,8 @@ ANDROID ION DRIVER
905M: Laura Abbott <labbott@redhat.com> 905M: Laura Abbott <labbott@redhat.com>
906M: Sumit Semwal <sumit.semwal@linaro.org> 906M: Sumit Semwal <sumit.semwal@linaro.org>
907L: devel@driverdev.osuosl.org 907L: devel@driverdev.osuosl.org
908L: dri-devel@lists.freedesktop.org
909L: linaro-mm-sig@lists.linaro.org (moderated for non-subscribers)
908S: Supported 910S: Supported
909F: drivers/staging/android/ion 911F: drivers/staging/android/ion
910F: drivers/staging/android/uapi/ion.h 912F: drivers/staging/android/uapi/ion.h
@@ -13953,7 +13955,7 @@ THUNDERBOLT DRIVER
13953M: Andreas Noever <andreas.noever@gmail.com> 13955M: Andreas Noever <andreas.noever@gmail.com>
13954M: Michael Jamet <michael.jamet@intel.com> 13956M: Michael Jamet <michael.jamet@intel.com>
13955M: Mika Westerberg <mika.westerberg@linux.intel.com> 13957M: Mika Westerberg <mika.westerberg@linux.intel.com>
13956M: Yehezkel Bernat <yehezkel.bernat@intel.com> 13958M: Yehezkel Bernat <YehezkelShB@gmail.com>
13957T: git git://git.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt.git 13959T: git git://git.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt.git
13958S: Maintained 13960S: Maintained
13959F: Documentation/admin-guide/thunderbolt.rst 13961F: Documentation/admin-guide/thunderbolt.rst
@@ -13963,7 +13965,7 @@ F: include/linux/thunderbolt.h
13963THUNDERBOLT NETWORK DRIVER 13965THUNDERBOLT NETWORK DRIVER
13964M: Michael Jamet <michael.jamet@intel.com> 13966M: Michael Jamet <michael.jamet@intel.com>
13965M: Mika Westerberg <mika.westerberg@linux.intel.com> 13967M: Mika Westerberg <mika.westerberg@linux.intel.com>
13966M: Yehezkel Bernat <yehezkel.bernat@intel.com> 13968M: Yehezkel Bernat <YehezkelShB@gmail.com>
13967L: netdev@vger.kernel.org 13969L: netdev@vger.kernel.org
13968S: Maintained 13970S: Maintained
13969F: drivers/net/thunderbolt.c 13971F: drivers/net/thunderbolt.c
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 594c228d2f02..4a3ac31c07d0 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -69,11 +69,12 @@ static ssize_t driver_override_show(struct device *_dev,
69 struct device_attribute *attr, char *buf) 69 struct device_attribute *attr, char *buf)
70{ 70{
71 struct amba_device *dev = to_amba_device(_dev); 71 struct amba_device *dev = to_amba_device(_dev);
72 ssize_t len;
72 73
73 if (!dev->driver_override) 74 device_lock(_dev);
74 return 0; 75 len = sprintf(buf, "%s\n", dev->driver_override);
75 76 device_unlock(_dev);
76 return sprintf(buf, "%s\n", dev->driver_override); 77 return len;
77} 78}
78 79
79static ssize_t driver_override_store(struct device *_dev, 80static ssize_t driver_override_store(struct device *_dev,
@@ -81,9 +82,10 @@ static ssize_t driver_override_store(struct device *_dev,
81 const char *buf, size_t count) 82 const char *buf, size_t count)
82{ 83{
83 struct amba_device *dev = to_amba_device(_dev); 84 struct amba_device *dev = to_amba_device(_dev);
84 char *driver_override, *old = dev->driver_override, *cp; 85 char *driver_override, *old, *cp;
85 86
86 if (count > PATH_MAX) 87 /* We need to keep extra room for a newline */
88 if (count >= (PAGE_SIZE - 1))
87 return -EINVAL; 89 return -EINVAL;
88 90
89 driver_override = kstrndup(buf, count, GFP_KERNEL); 91 driver_override = kstrndup(buf, count, GFP_KERNEL);
@@ -94,12 +96,15 @@ static ssize_t driver_override_store(struct device *_dev,
94 if (cp) 96 if (cp)
95 *cp = '\0'; 97 *cp = '\0';
96 98
99 device_lock(_dev);
100 old = dev->driver_override;
97 if (strlen(driver_override)) { 101 if (strlen(driver_override)) {
98 dev->driver_override = driver_override; 102 dev->driver_override = driver_override;
99 } else { 103 } else {
100 kfree(driver_override); 104 kfree(driver_override);
101 dev->driver_override = NULL; 105 dev->driver_override = NULL;
102 } 106 }
107 device_unlock(_dev);
103 108
104 kfree(old); 109 kfree(old);
105 110
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 764b63a5aade..e578eee31589 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -2839,6 +2839,14 @@ static void binder_transaction(struct binder_proc *proc,
2839 else 2839 else
2840 return_error = BR_DEAD_REPLY; 2840 return_error = BR_DEAD_REPLY;
2841 mutex_unlock(&context->context_mgr_node_lock); 2841 mutex_unlock(&context->context_mgr_node_lock);
2842 if (target_node && target_proc == proc) {
2843 binder_user_error("%d:%d got transaction to context manager from process owning it\n",
2844 proc->pid, thread->pid);
2845 return_error = BR_FAILED_REPLY;
2846 return_error_param = -EINVAL;
2847 return_error_line = __LINE__;
2848 goto err_invalid_target_handle;
2849 }
2842 } 2850 }
2843 if (!target_node) { 2851 if (!target_node) {
2844 /* 2852 /*
diff --git a/drivers/fpga/altera-ps-spi.c b/drivers/fpga/altera-ps-spi.c
index 14f14efdf0d5..06d212a3d49d 100644
--- a/drivers/fpga/altera-ps-spi.c
+++ b/drivers/fpga/altera-ps-spi.c
@@ -249,7 +249,7 @@ static int altera_ps_probe(struct spi_device *spi)
249 249
250 conf->data = of_id->data; 250 conf->data = of_id->data;
251 conf->spi = spi; 251 conf->spi = spi;
252 conf->config = devm_gpiod_get(&spi->dev, "nconfig", GPIOD_OUT_HIGH); 252 conf->config = devm_gpiod_get(&spi->dev, "nconfig", GPIOD_OUT_LOW);
253 if (IS_ERR(conf->config)) { 253 if (IS_ERR(conf->config)) {
254 dev_err(&spi->dev, "Failed to get config gpio: %ld\n", 254 dev_err(&spi->dev, "Failed to get config gpio: %ld\n",
255 PTR_ERR(conf->config)); 255 PTR_ERR(conf->config));
diff --git a/drivers/slimbus/messaging.c b/drivers/slimbus/messaging.c
index 884419c37e84..457ea1f8db30 100644
--- a/drivers/slimbus/messaging.c
+++ b/drivers/slimbus/messaging.c
@@ -183,7 +183,7 @@ static u16 slim_slicesize(int code)
183 0, 1, 2, 3, 3, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7 183 0, 1, 2, 3, 3, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7
184 }; 184 };
185 185
186 clamp(code, 1, (int)ARRAY_SIZE(sizetocode)); 186 code = clamp(code, 1, (int)ARRAY_SIZE(sizetocode));
187 187
188 return sizetocode[code - 1]; 188 return sizetocode[code - 1];
189} 189}
diff --git a/drivers/uio/uio_hv_generic.c b/drivers/uio/uio_hv_generic.c
index f695a7e8c314..c690d100adcd 100644
--- a/drivers/uio/uio_hv_generic.c
+++ b/drivers/uio/uio_hv_generic.c
@@ -19,7 +19,7 @@
19 * # echo -n "ed963694-e847-4b2a-85af-bc9cfc11d6f3" \ 19 * # echo -n "ed963694-e847-4b2a-85af-bc9cfc11d6f3" \
20 * > /sys/bus/vmbus/drivers/uio_hv_generic/bind 20 * > /sys/bus/vmbus/drivers/uio_hv_generic/bind
21 */ 21 */
22 22#define DEBUG 1
23#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 23#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
24 24
25#include <linux/device.h> 25#include <linux/device.h>
@@ -94,10 +94,11 @@ hv_uio_irqcontrol(struct uio_info *info, s32 irq_state)
94 */ 94 */
95static void hv_uio_channel_cb(void *context) 95static void hv_uio_channel_cb(void *context)
96{ 96{
97 struct hv_uio_private_data *pdata = context; 97 struct vmbus_channel *chan = context;
98 struct hv_device *dev = pdata->device; 98 struct hv_device *hv_dev = chan->device_obj;
99 struct hv_uio_private_data *pdata = hv_get_drvdata(hv_dev);
99 100
100 dev->channel->inbound.ring_buffer->interrupt_mask = 1; 101 chan->inbound.ring_buffer->interrupt_mask = 1;
101 virt_mb(); 102 virt_mb();
102 103
103 uio_event_notify(&pdata->info); 104 uio_event_notify(&pdata->info);
@@ -121,78 +122,46 @@ static void hv_uio_rescind(struct vmbus_channel *channel)
121 uio_event_notify(&pdata->info); 122 uio_event_notify(&pdata->info);
122} 123}
123 124
124/* 125/* Sysfs API to allow mmap of the ring buffers
125 * Handle fault when looking for sub channel ring buffer 126 * The ring buffer is allocated as contiguous memory by vmbus_open
126 * Subchannel ring buffer is same as resource 0 which is main ring buffer
127 * This is derived from uio_vma_fault
128 */ 127 */
129static int hv_uio_vma_fault(struct vm_fault *vmf)