[PATCH] tests/tcg: fix out-of-bounds access in test-avx

Paolo Bonzini posted 1 patch 1 year, 1 month ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20231020072135.450301-1-pbonzini@redhat.com
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, Richard Henderson <richard.henderson@linaro.org>, Eduardo Habkost <eduardo@habkost.net>
tests/tcg/i386/test-avx.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
[PATCH] tests/tcg: fix out-of-bounds access in test-avx
Posted by Paolo Bonzini 1 year, 1 month ago
This can cause differences between native and QEMU execution, due
to ASLR.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 tests/tcg/i386/test-avx.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/tests/tcg/i386/test-avx.c b/tests/tcg/i386/test-avx.c
index c39c0e5bce8..910b0673535 100644
--- a/tests/tcg/i386/test-avx.c
+++ b/tests/tcg/i386/test-avx.c
@@ -236,12 +236,15 @@ v4di val_i64[] = {
 
 v4di deadbeef = {0xa5a5a5a5deadbeefull, 0xa5a5a5a5deadbeefull,
                  0xa5a5a5a5deadbeefull, 0xa5a5a5a5deadbeefull};
-v4di indexq = {0x000000000000001full, 0x000000000000008full,
-               0xffffffffffffffffull, 0xffffffffffffff5full};
-v4di indexd = {0x00000002000000efull, 0xfffffff500000010ull,
-               0x0000000afffffff0ull, 0x000000000000000eull};
+/* &gather_mem[0x10] is 512 bytes from the base; indices must be >=-64, <64
+ * to account for scaling by 8 */
+v4di indexq = {0x000000000000001full, 0x000000000000003dull,
+               0xffffffffffffffffull, 0xffffffffffffffdfull};
+v4di indexd = {0x00000002ffffffcdull, 0xfffffff500000010ull,
+               0x0000003afffffff0ull, 0x000000000000000eull};
 
 v4di gather_mem[0x20];
+_Static_assert(sizeof(gather_mem) == 1024);
 
 void init_f16reg(v4di *r)
 {
-- 
2.41.0
Re: [PATCH] tests/tcg: fix out-of-bounds access in test-avx
Posted by Richard Henderson 1 year, 1 month ago
On 10/20/23 00:21, Paolo Bonzini wrote:
> This can cause differences between native and QEMU execution, due
> to ASLR.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>   tests/tcg/i386/test-avx.c | 11 +++++++----
>   1 file changed, 7 insertions(+), 4 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> 
> diff --git a/tests/tcg/i386/test-avx.c b/tests/tcg/i386/test-avx.c
> index c39c0e5bce8..910b0673535 100644
> --- a/tests/tcg/i386/test-avx.c
> +++ b/tests/tcg/i386/test-avx.c
> @@ -236,12 +236,15 @@ v4di val_i64[] = {
>   
>   v4di deadbeef = {0xa5a5a5a5deadbeefull, 0xa5a5a5a5deadbeefull,
>                    0xa5a5a5a5deadbeefull, 0xa5a5a5a5deadbeefull};
> -v4di indexq = {0x000000000000001full, 0x000000000000008full,
> -               0xffffffffffffffffull, 0xffffffffffffff5full};
> -v4di indexd = {0x00000002000000efull, 0xfffffff500000010ull,
> -               0x0000000afffffff0ull, 0x000000000000000eull};
> +/* &gather_mem[0x10] is 512 bytes from the base; indices must be >=-64, <64
> + * to account for scaling by 8 */
> +v4di indexq = {0x000000000000001full, 0x000000000000003dull,
> +               0xffffffffffffffffull, 0xffffffffffffffdfull};
> +v4di indexd = {0x00000002ffffffcdull, 0xfffffff500000010ull,
> +               0x0000003afffffff0ull, 0x000000000000000eull};
>   
>   v4di gather_mem[0x20];
> +_Static_assert(sizeof(gather_mem) == 1024);
>   
>   void init_f16reg(v4di *r)
>   {