Bram Moolenaar wrote: > Karsten Hopp wrote: > >> We've rebuilt all Fedora-12 packages and vim was one of the programs >> that failed to >> run with enhanced glibc fortify features: >> >> vi >> *** buffer overflow detected ***: vim terminated >> ======= Backtrace: ========= >> /lib64/libc.so.6(__fortify_fail+0x37)[0x7f780f90df47] >> /lib64/libc.so.6[0x7f780f90bee0] >> vim(eval_init+0x6f)[0x45a5cf] >> vim(main+0x82)[0x4ac952] >> /lib64/libc.so.6(__libc_start_main+0xfd)[0x7f780f835aed] >> vim[0x422069] >> >> >> >> https://bugzilla.redhat.com/show_bug.cgi?id=514717 has all the details >> and 2 suggested fixes. > > What Vim does is completely fine. So your library is broken. I > understand that it's intentionally broken to find buffer overflows. > > Now, we could work around the broken library. The diff shows one > solution. But this would actually be needed in many more places, it > just fixes the one found on startup. When running Vim there are more. > Takes a long time to find them all. > > A proper fix would be: > - Add configure check for the broken library. > - When the library is broken use another function instead of STRCPY() to > avoid using the broken strcpy(). It's slower but should work. > > A better solution would be to tell the library not to have this check > for what it guessed the destination size would be. Is there an option > or #define for this?
There is such a compilation option: -D_FORTIFY_SOURCE=0 Patch 7.2.044 already fixed crash which happened because of the Fortify feature. It was fixed by compiling Vim with -D_FORTIFY_SOURCE=1. Some versions of gcc compile by default with -D_FORTIFY_SOURCE=2 (that's the case for Ubuntu at least). -D_FORTIFY_SOURCE=2 can in some cases cause valid programs to crash, which is the case for Vim. As far as I understand, -D_FORTIFY_SOURCE=1 still has some checks but they are relaxed a bit from -D_FORTIFY_SOURCE=2. Compiling with -D_FORTIFY_SOURCE=1 should not break Vim. I never see any problem with Vim using -D_FORTIFY_SOURCE=1. But if you want to completely disable the Fortify feature, you can compile with -D_FORTIFY_SOURCE=0 (or -U_FORTIFY_SOURCE) This is the Patch in which introduces -D_FORTIFY_SOURCE=1: =============== Patch 7.2.044 Problem: Crash because of STRCPY() being over protective of the destination size. (Dominique Pelle) Solution: Add -D_FORTIFY_SOURCE=1 to CFLAGS. Use an intermediate variable for the pointer to avoid a warning. Files: src/auto/configure, src/configure.in, src/eval.c =============== Is Fedora compiling Vim with -D_FORTIFY_SOURCE=1 or -D_FORTIFY_SOURCE=2? In the absense of -D_FORTIFY_SOURCE compilation option, gcc might using -D_FORTIFY_SOURCE=2 by default (as it is the case on Ubuntu) which is known to break vim and was fixed in patch 7.2.044. The configure script checks whether to add -D_FORTIFY_SOURCE=1 to the compilation options. Perhaps this is not happing on Fedora? Can you give the compilation log to see what compilation options were used? -- Dominique --~--~---------~--~----~------------~-------~--~----~ You received this message from the "vim_dev" maillist. For more information, visit http://www.vim.org/maillist.php -~----------~----~----~----~------~----~------~--~---