Well, three points.
1. I don't see why "heap at the bottom, stack at the top" is an irrevocable architectural design.
2. Limiting stack size is actually a fairly common practice.
3. Buffer overflows are usually system I/O calls (which can't "underflow" unless you're doing some bizarre arithmetic on the starting address) or memory copies (which are pointless to write backwards unless you're worried about self-overwrites).
Well, three points. 1. I don't see why "heap at the bottom, stack at the top" is an irrevocable architectural design. 2. Limiting stack size is actually a fairly common practice. 3. Buffer overflows are usually system I/O calls (which can't "underflow" unless you're doing some bizarre arithmetic on the starting address) or memory copies (which are pointless to write backwards unless you're worried about self-overwrites).