From 3c372c384a94db23fdaf9fe64a4beb86159cf6d3 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Tue, 24 Oct 2017 13:53:56 -0700 Subject: [PATCH] arm: fix a level of indirection issue Rather than relying on the stack being 0'ed out always, do it manually. The stack generally happened to be zero, and because the compiler realizes that the tests are dealing with chars truncates the read value. However, the top 3 nibbles of the value are undefined and may be non-zero. The indirection level caused a null-pointer dereference. Explicitly scribbling on the stack during the allocation causes test failures without the original zexting behaviour. --- src/arm/ffi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/arm/ffi.c b/src/arm/ffi.c index 12ce04ac..d8382710 100644 --- a/src/arm/ffi.c +++ b/src/arm/ffi.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include "internal.h" @@ -422,7 +423,7 @@ ffi_prep_incoming_args_SYSV (ffi_cif *cif, void *rvalue, else { if (cif->rtype->size && cif->rtype->size < 4) - **(int32_t **) rvalue = 0; + *(uint32_t *) rvalue = 0; } for (i = 0, n = cif->nargs; i < n; i++)