на счет хвоста данных и процессорного стека: в Си локальные переменные всегда размещаются в стеке, и выделяемая память под них берется из стекового пространства (если, конечно, программист не ЗАСТАВИТ компилятор поступать иначе)... если не ошибаюсь, конечно...
в этом случае переполнение локального буфера в функции прекрасно портит стек ВСЕЙ ПРОГРАММЫ... и если удачно подобрано все, при очередном возврате из функции произойдет передача управления в кусочек этого "переполнения"... а уж что там будет делаться - известно лишь хакеру...