Maybe just a stack change?
One of the biggest problem I have seen is copying data on the stack and not checking the size. Because the stack goes from Higher to lower address, but the data copying goes from lower to higher, any overrun corrupts data on the stack from programs that called you.
A technically simple solution is have stack space be assigned the other direction (from lower to higher address) thus any overruns does not impact prior functions on the stack. This would prevent MANY crashes and actually avoid the security holes caused by stack overruns.
For most applications it would only mean a re-compile assuming you could work out the hardware requirements.