diff options
author | Siddhesh Poyarekar <siddhesh@sourceware.org> | 2017-02-08 11:18:23 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@sourceware.org> | 2017-02-08 14:17:17 +0530 |
commit | 8cbc826c37c0221ada65a7a622fe079b4e89a4b0 (patch) | |
tree | 598314eb1d2c9bb8da92f7c7f4cc25caf2cc31b4 /malloc/arena.c | |
parent | 3f67d1a7021ed3184830511636a0867faec730fe (diff) | |
download | glibc-8cbc826c37c0221ada65a7a622fe079b4e89a4b0.tar.gz glibc-8cbc826c37c0221ada65a7a622fe079b4e89a4b0.tar.xz glibc-8cbc826c37c0221ada65a7a622fe079b4e89a4b0.zip |
Fix getting tunable values on big-endian (BZ #21109)
The code to set value passed a tunable_val_t, which when cast to int32_t on big-endian gives the wrong value. Instead, use tunable_val_t.numval instead, which can then be safely cast into int32_t.
Diffstat (limited to 'malloc/arena.c')
-rw-r--r-- | malloc/arena.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/malloc/arena.c b/malloc/arena.c index b91d7d6b16..d49e4a21c8 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -212,9 +212,9 @@ __malloc_fork_unlock_child (void) #if HAVE_TUNABLES static inline int do_set_mallopt_check (int32_t value); void -DL_TUNABLE_CALLBACK (set_mallopt_check) (void *valp) +DL_TUNABLE_CALLBACK (set_mallopt_check) (tunable_val_t *valp) { - int32_t value = *(int32_t *) valp; + int32_t value = (int32_t) valp->numval; do_set_mallopt_check (value); if (check_action != 0) __malloc_check_init (); @@ -223,9 +223,9 @@ DL_TUNABLE_CALLBACK (set_mallopt_check) (void *valp) # define DL_TUNABLE_CALLBACK_FNDECL(__name, __type) \ static inline int do_ ## __name (__type value); \ void \ -DL_TUNABLE_CALLBACK (__name) (void *valp) \ +DL_TUNABLE_CALLBACK (__name) (tunable_val_t *valp) \ { \ - __type value = *(__type *) valp; \ + __type value = (__type) (valp)->numval; \ do_ ## __name (value); \ } |