id summary reporter owner description type status milestone component version severity resolution keywords cc 9734 Wrong check of mmap() return value in coroutine stack allocator Tianlong Wu olli "In boost source /libs/coroutine/detail/standard_stack_allocator_posix.cpp:120, it has the following snippet: {{{#!c void * limit = # if defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) ::mmap( 0, size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); # else ::mmap( 0, size_, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); # endif ::close( fd); if ( ! limit) throw std::bad_alloc(); }}} It assumes that mmap() returns 0 on fail. However when mmap() fails, the return value is NOT 0, but (void*)-1 instead. This wrong check will bypass the throw and let the error pass down, leading to confusing error message seen by the user." Bugs closed To Be Determined coroutine Boost 1.55.0 Problem fixed