Posted Aug 19, 2010 1:01 UTC (Thu) by airlied (subscriber, #9104)
Posted Aug 19, 2010 1:07 UTC (Thu) by avik (guest, #704)
Sure, the guard page helps mitigate the consequences, but as far as I can see a vulnerability still exists.
Posted Aug 19, 2010 1:08 UTC (Thu) by nybble41 (subscriber, #55106)
You can't exploit this without making Xorg overflow its stack. Even with the changes to the kernel that will cause Xorg to crash. Ergo, it is a bug in Xorg. It's nice that the kernel offers a way to catch stack overflows, but the responsibility lies with Xorg not to do that in the first place. This is no more a kernel security bug than an internal Xorg buffer overflow or the like, which can lead to exactly the same sort of privilege elevation.
If you're the kind to rely on guard pages for security rather than avoiding stack overflow by design, I suppose we can be glad you don't do security development.
Posted Aug 19, 2010 5:35 UTC (Thu) by smurf (subscriber, #17840)
"The application is responsible" is a cop-out because there are zillions of programs out there, but only one kernel. Therefore, fixing the problem once (in the kernel), with a guard page (no need for expensive user-mode checks), is the right solution.
Of course, X should not recursively overrun its stack. It's (probably) still a bug in the X server. So?
"Security by forcing the programmer to write correct code" does not work. As a further example of this principle, witness the large number of PHP-based web sites with SQL injection holes.
Posted Aug 19, 2010 6:20 UTC (Thu) by avik (guest, #704)
The kernel should provide a guard page to prevent against unknown flaws, but known flaws should be corrected.
Posted Aug 19, 2010 16:33 UTC (Thu) by tialaramex (subscriber, #21167)
In some cases the recursive algorithm will be clearer, which makes maintenance easier (and reduces the chance of security relevant bugs). In some cases the iterative algorithm will be faster (particularly if your programming language or compiler suck)
Posted Aug 22, 2010 3:31 UTC (Sun) by jeremiah (subscriber, #1221)
you don't write much XSLT do you...;)
Posted Aug 19, 2010 15:27 UTC (Thu) by nybble41 (subscriber, #55106)
This is not exactly a new problem. There is plenty of software out there (e.g. real-time embedded systems; the Linux kernel itself) which manages not to crash or misbehave when faced with a fixed-size stack and no special VM protection. The tools are simple:
1. Do not permit unbounded stack recursion.
2. Static analysis - know your worst-case stack requirements.
There may be "zillions" of application programs, but most of them don't run as root and simultaneously share memory with untrusted clients. As a privileged server process, Xorg should be designed to be more secure than most, since *any* code-execution vulnerability in Xorg is a (potentially remote) privilege-escalation vulnerability.
> Of course, X should not recursively overrun its stack.... So?
So it's not a kernel bug. It may be easier in this case to block one known exploit vector by changing the VM behavior of the kernel, and I'm not arguing against the patch, but it's not the kernel's job to prevent you from mapping untrusted memory right below your stack, or from overflowing said stack.
Copyright © 2017, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds