On 07/11/2016 03:07 AM, Peter Lieven wrote: > the allocated stack will be adjusted to the minimum supported stack size > by the OS and rounded up to be a multiple of the system pagesize. > Additionally an architecture dependent guard page is added to the stack > to catch stack overflows. > > Signed-off-by: Peter Lieven <p...@kamp.de> > --- > include/sysemu/os-posix.h | 23 +++++++++++++++++++++++ > util/oslib-posix.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 67 insertions(+) >
> + > +static size_t adjust_stack_size(size_t sz) > +{ > + /* avoid stacks smaller than _SC_THREAD_STACK_MIN */ > + sz = MAX(sz, sysconf(_SC_THREAD_STACK_MIN)); sz is unsigned, but sysconf() is signed. Furthermore, sysconf() is permitted to return -1 if there is no such minimum. MAX() would then operate on the common integral promotion between the two arguments, which may treat (unsigned)(-1) as the larger of the two values, and give you the wrong results. I think it is theoretical (all platforms that we compile on have a working sysconf(_SC_THREAD_STACK_MIN), right?), but still may be worth being sure that sysconf() returned a positive value before computing MAX(). -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature