summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Vrabel <david.vrabel@citrix.com>2014-07-31 16:22:25 +0100
committerDavid Vrabel <david.vrabel@citrix.com>2014-07-31 17:58:38 +0100
commitdcecb8fd93a65787130a74e61fdf29932c8d85eb (patch)
tree77bd673bc723fc2ed1155002b38cf5ad5d9c8cd5
parentc12784c3d14a2110468ec4d1383f60cfd2665576 (diff)
downloadlinux-rpi-dcecb8fd93a65787130a74e61fdf29932c8d85eb.tar.gz
linux-rpi-dcecb8fd93a65787130a74e61fdf29932c8d85eb.tar.bz2
linux-rpi-dcecb8fd93a65787130a74e61fdf29932c8d85eb.zip
xen/events/fifo: ensure all bitops are properly aligned even on x86
When using the FIFO-based ABI on x86_64, if the last port is at the end of an event array page then sync_test_bit() on this port's event word will read beyond the end of the page and in certain circumstances this may fault. The fault requires the following page in the kernel's direct mapping to be not present, which would mean: a) the array page is the last page of RAM; or b) the following page is ballooned out /and/ it has been used for a foreign mapping by a kernel driver (such as netback or blkback) /and/ the grant has been unmapped. Use the infrastructure added for arm64 to ensure that all bitops operating on event words are unsigned long aligned. Signed-off-by: David Vrabel <david.vrabel@citrix.com> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: stable@vger.kernel.org
-rw-r--r--drivers/xen/events/events_fifo.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/xen/events/events_fifo.c b/drivers/xen/events/events_fifo.c
index c7ff2035b98e..48dcb2e97b90 100644
--- a/drivers/xen/events/events_fifo.c
+++ b/drivers/xen/events/events_fifo.c
@@ -67,10 +67,9 @@ static event_word_t *event_array[MAX_EVENT_ARRAY_PAGES] __read_mostly;
static unsigned event_array_pages __read_mostly;
/*
- * sync_set_bit() and friends must be unsigned long aligned on non-x86
- * platforms.
+ * sync_set_bit() and friends must be unsigned long aligned.
*/
-#if !defined(CONFIG_X86) && BITS_PER_LONG > 32
+#if BITS_PER_LONG > 32
#define BM(w) (unsigned long *)((unsigned long)w & ~0x7UL)
#define EVTCHN_FIFO_BIT(b, w) \