Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Tue, 1 Nov 2016 23:30:25 +0100
From: Szabolcs Nagy <nsz@...t70.net>
To: "LeMay, Michael" <michael.lemay@...el.com>
Cc: "musl@...ts.openwall.com" <musl@...ts.openwall.com>
Subject: Re: [RFC PATCH v2 1/4] disable check for buggy brk
 implementations when SafeStack is enabled

* LeMay, Michael <michael.lemay@...el.com> [2016-10-28 19:56:18 +0000]:
> The check relies on comparing the addresses of stack-allocated objects
> to addresses returned by the brk syscall.  SafeStack moves the
> allocations to the unsafe stack, breaking the check.  This patch
> disables the check when SafeStack is enabled.
> 
> Signed-off-by: Michael LeMay <michael.lemay@...el.com>
> ---
>  src/malloc/expand_heap.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/src/malloc/expand_heap.c b/src/malloc/expand_heap.c
> index d8c0be7..af51451 100644
> --- a/src/malloc/expand_heap.c
> +++ b/src/malloc/expand_heap.c
> @@ -13,6 +13,7 @@
>  
>  static int traverses_stack_p(uintptr_t old, uintptr_t new)
>  {
> +#if !defined(__has_feature) || !__has_feature(safe_stack)

preprocessing this fails on any released version of gcc
https://godbolt.org/g/hHWEzI

if __has_feature is not defined it expands to 0 and 0(safe_stack)
is invalid syntax.

e.g. this works:

#ifdef __has_feature
#if __has_feature(safe_stack)
#define HAS_SAFE_STACK 1
#endif
#endif

>  	const uintptr_t len = 8<<20;
>  	uintptr_t a, b;
>  
> @@ -23,6 +24,7 @@ static int traverses_stack_p(uintptr_t old, uintptr_t new)
>  	b = (uintptr_t)&b;
>  	a = b > len ? b-len : 0;
>  	if (new>a && old<b) return 1;
> +#endif
>  
>  	return 0;
>  }
> -- 
> 2.7.4

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.