On Wed, Dec 02, 2020 at 08:29:15AM +0100, Otto Moerbeek wrote:
> On Wed, Dec 02, 2020 at 07:48:07AM +0100, Otto Moerbeek wrote:
> 
> > On Tue, Dec 01, 2020 at 01:14:22PM -0800, [email protected] wrote:
> > 
> > > On Tue, 1 Dec 2020, Otto Moerbeek wrote:
> > > > On Tue, Dec 01, 2020 at 08:00:18PM +0100, Otto Moerbeek wrote:
> > > > > On Tue, Dec 01, 2020 at 10:13:29AM -0800, [email protected] wrote:
> > > ...
> > > > > The man page is lacking or even wrong in this respect. It explicitly
> > > > > talks about how to do deallocation.
> > > 
> > > Yeah, that's a bug in the manpage.
> > > 
> > > 
> > > > And curiously, if I use 4*PTHREAD_STACK_MIN for both the mmap size arg
> > > > and the pthread_attr_setstack size arg, the crash does not appear.
> > > 
> > > Uh, that's like noting that whether a use-after-free crashes depends on 
> > > the size of the allocation: it's the UAF that's wrong, the size is 
> > > irrelevant.
> > 
> > Of course.  I just was curious why it does npt happen with a different size.
> > 
> > > 
> > > pthread_join() returning merely tells you that the target thread has 
> > > gotten far enough into pthread_exit() as to pass its return value to the 
> > > joining thread.  It still has more cleanup to do before finally entering 
> > > the kernel to vanish and there's no standard API to detect when that's 
> > > happened.
> > > 
> > > I suppose a masochists could use kvm_getprocs() to examine the caller's 
> > > own threads, but the real answer is that pthread_attr_setstack() is not 
> > > appropriate for threads that will come and go in a long-lived process 
> > > where cleanup of the stacks is necessary; for those, if you need to set a 
> > > different stack size, use pthread_attr_setstacksize() and let the 
> > > implementation handle the allocation and deallocation.
> > > 
> > > 
> > > Philip
> > > 
> > 
> 
> Quick test was *too* quick.
> 
> Anyway, here's a man page diff
> 
>       -Otto
> 
> Index: pthread_attr_setstack.3
> ===================================================================
> RCS file: /cvs/src/lib/libpthread/man/pthread_attr_setstack.3,v
> retrieving revision 1.5
> diff -u -p -r1.5 pthread_attr_setstack.3
> --- pthread_attr_setstack.3   12 Apr 2018 17:13:34 -0000      1.5
> +++ pthread_attr_setstack.3   2 Dec 2020 07:28:29 -0000
> @@ -46,11 +46,12 @@ the provided stack must be page-aligned.
>  It will be replaced (meaning zeroed) with a new
>  .Ar MAP_ANON | Ar MAP_STACK
>  mapping.
> -It is recommended that the initial mapping be allocated using
> -an allocator which has a matching deallocator that discards whole
> -pages, to clear the
> -.Ar MAP_STACK
> -attribute afterwards.
> +The passed memory object should not be deallocated or reused,
> +even when the thread using it has terminated.
> +If there is no need for a specific memory object as stack,
> +the
> +.Xr pthread_attr_set_stacksize 3

it is pthread_attr_setstacksize

ok semarie@ with that.

> +function should be used.
>  .Sh RETURN VALUES
>  Upon successful completion,
>  .Fn pthread_attr_setstack

-- 
Sebastien Marie

Reply via email to