From 4e308361bf730ef3d288db5b71489ecf442f738c Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 8 Mar 2017 22:59:44 +0100 Subject: Fix overly restrictive range calculation in mcode allocation. Contributed by Alexey Kopytov. --- src/lj_mcode.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lj_mcode.c b/src/lj_mcode.c index b363136d..f0cf22ca 100644 --- a/src/lj_mcode.c +++ b/src/lj_mcode.c @@ -239,11 +239,11 @@ static void *mcode_alloc(jit_State *J, size_t sz) return p; if (p) mcode_free(J, p, sz); /* Free badly placed area. */ } - /* Next try probing pseudo-random addresses. */ + /* Next try probing 64K-aligned pseudo-random addresses. */ do { - hint = (0x78fb ^ LJ_PRNG_BITS(J, 15)) << 16; /* 64K aligned. */ - } while (!(hint + sz < range)); - hint = target + hint - (range>>1); + hint = LJ_PRNG_BITS(J, LJ_TARGET_JUMPRANGE-16) << 16; + } while (!(hint + sz < range+range)); + hint = target + hint - range; } lj_trace_err(J, LJ_TRERR_MCODEAL); /* Give up. OS probably ignores hints? */ return NULL; -- cgit v1.2.1