Re: Syscall changes registers beyond %eax, on linux-i386

Richard B. Johnson
2002-09-19T19:45:38Z

On Thu, 19 Sep 2002, Richard Henderson wrote:

> On Thu, Sep 19, 2002 at 03:40:52PM -0400, Richard B. Johnson wrote:
> > Well it's not modifying those values.
>
> It's not modifying "a", true, but it _is_ modifying the parameter
> area. Which is exactly the kernel bug in question.
>

Yep. This can't be found by the compiler. The parameter area is
writable so it looks like somebody needs to do some 'code inspection'
and some additional testing.

> > It's really bad code because it could have done:
> >
> > incl $0x04(%esp)
> > incl $0x08(%esp)
> > incl $0x1c(%esp)
> > jmp bar
>
> Yes, I know.
>

It's a problem with a 'general purpose' compiler that wants to
be "all things" to all people. If somebody made a gcc-compatible
compiler, tuned to the ix86 characteristics, I think we could
cut the extra instructions by at least 1/2, maybe more.

Cheers,
Dick Johnson
Penguin : Linux version 2.4.18 on an i686 machine (797.90 BogoMips).
The US military has given us many words, FUBAR, SNAFU, now ENRON.
Yes, top management were graduates of West Point and Annapolis.