Subject: Re: setrlimit(RLIMIT_STACK,..) check for limit < stack usage
To: Giles Lean <giles@nemeton.com.au>
From: Jaromir Dolecek <jdolecek@NetBSD.org>
List: tech-kern
Date: 11/18/2001 10:21:52
Giles Lean wrote:
> >  		/*
> > +		 * Return EINVAL if the new limit is lower than current
> > +		 * usage. Otherwise, the process would get SIGSEGV the moment
> > +		 * it would try to access anything on it's current stack.
> > +		 * This is not what the caller intended, unless on crack
> > +		 * or mistaken.
> > +		 */
> > +		if (limp->rlim_cur < p->p_vmspace->vm_dsize * PAGE_SIZE
> > +		    || limp->rlim_max < p->p_vmspace->vm_dsize * PAGE_SIZE)
> > +			return (EINVAL);
> > +
> 
> I'd change the last sentence of the comment to reference the
> standard. :-) The actual code change looks good but I'm not familiar
> with the VM code to be certain.

Right, I will :) Also, the patch should have used vm_ssize, not vm_dsize.
 
> While you're tweaking the function I'd suggest another change as SUSv2
> also requires EINVAL when rlim_cur exceeds rlim_max:
> 
>    [EINVAL] ... in a setrlimit() call, the new rlim_cur exceeds the new
>             rlim_max.
> 
> If this is thought desirable (and worthwhile :-), then the following code:

Yes, I agree with this. Will add that too.

Jaromir 
-- 
Jaromir Dolecek <jdolecek@NetBSD.org> http://www.NetBSD.org/Ports/i386/ps2.html
-=  Those who would give up liberty for a little temporary safety deserve  =-
-=  neither liberty nor safety, and will lose both.  -- Benjamin Franklin  =-