]> xenbits.xensource.com Git - people/royger/xen.git/commitdiff
x86emul: correct DECLARE_ALIGNED()
authorJan Beulich <jbeulich@suse.com>
Fri, 17 Mar 2017 08:33:45 +0000 (09:33 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 17 Mar 2017 08:33:45 +0000 (09:33 +0100)
Stop creating an excessively large array on the stack, by properly
taking into account the array element size when establishing its
element count (and of course also when calculating the pointer to
be actually used to access the memory).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/x86_emulate/x86_emulate.c

index 4872f19c5dd61e366a4756092a24ff43dbd32a45..038f5587c74f21cb718f09bfe02fd3344411009e 100644 (file)
@@ -553,10 +553,10 @@ typedef union {
  * the compiler for automatic variables. Use this helper to instantiate a
  * suitably aligned variable, producing a pointer to access it.
  */
-#define DECLARE_ALIGNED(type, var)                                   \
-    long __##var[sizeof(type) + __alignof(type) - __alignof(long)];  \
-    type *const var##p =                                             \
-        (void *)((long)(__##var + __alignof(type) - __alignof(long)) \
+#define DECLARE_ALIGNED(type, var)                                        \
+    long __##var[(sizeof(type) + __alignof(type)) / __alignof(long) - 1]; \
+    type *const var##p =                                                  \
+        (void *)(((long)__##var + __alignof(type) - __alignof(__##var))   \
                  & -__alignof(type))
 
 #ifdef __GCC_ASM_FLAG_OUTPUTS__