On Thu, Jan 27, 2000 at 11:25:08AM -0700, Greg Haerr wrote:
> Al,
>     I happended to see this bug come across the CVS, and just wanted
> to make sure that you've double checked it.  This was the exact area that
> had to be changed relating to ELK's sys_brk() bug that disallowed
> data segments > 32k...  I can't quite remember the original code.

I have double checked this and I am fairly sure it is right. All I have done
is add a consitional so the same checl as before is only done on binaries
with the old (current) layout.

I think you may be mis-remembering the bug. IIRC the 32K bug was in sys_brk()
and was related to the type of the argument being signed instead of unsigned.

Thanks for keeping a look out. I am glad someone reads the cvs commit messages.

Al

int sys_brk(len)
__pptr len;
{
        register __ptask currentp = current;

        if (len < currentp->t_enddata || 
            (len > (currentp->t_endseg - HEAP_LIMIT))) {
                return -ENOMEM; 
        }

        currentp->t_endbrk = len;
        return 0;
}


> 
> Regards,
> 
> Greg
> 
> :   +/*
> :   + * We only need to do this as long as we support old format binaries
> :   + * that grow stack and heap towards each other
> :   + */
> :    void stack_check()
> :    {
> :    register __ptask currentp = current;
> :   - if (currentp->t_regs.sp < currentp->t_endbrk)
> :   - {
> :   + if ((currentp->t_begstack > currentp->t_enddata) &&
> :   +     (currentp->t_regs.sp < currentp->t_endbrk)) {
> :    printk("STACK (%d) ENTERED BSS (%ld) - PROCESS TERMINATING\n",
> currentp->t_regs.sp, currentp->t_endbrk);
> :    do_exit(SIGSEGV);
> :    }
> :
> :
> :

Reply via email to