最初の例ではもうひとつおまじないをしていました。
( '-') gcc -Wl,-zexecstack buffer_overflow.c -m32
今時の CPU は page に executable かどうかのビットを立てれるので、わざわざスタックを意識的に実行可能にしなければ問題なかったんです