• Linus Torvalds's avatar
    x86: don't allow tail-calls in sys_ftruncate[64]() · 0a489cb3
    Linus Torvalds authored
    Gcc thinks it owns the incoming argument stack, but that's not true for
    "asmlinkage" functions, and it corrupts the caller-set-up argument stack
    when it pushes the third argument onto the stack.  Which can result in
    %ebx getting corrupted in user space.
    
    Now, normally nobody sane would ever notice, since libc will save and
    restore %ebx anyway over the system call, but it's still wrong.
    
    I'd much rather have "asmlinkage" tell gcc directly that it doesn't own
    the stack, but no such attribute exists, so we're stuck with our hacky
    manual "prevent_tail_call()" macro once more (we've had the same issue
    before with sys_waitpid() and sys_wait4()).
    
    Thanks to Hans-Werner Hilse <hilse@sub.uni-goettingen.de> for reporting
    the issue and testing the fix.
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    0a489cb3
open.c 27.3 KB