我尝试从 kdvelectronics 站点将 ssh 会话记录补丁修改为 sshd。
从 openssh 4.x 到 5.x 的代码没有太大变化,但是现在 sshd segfaults 当 script_open 函数调用时(如 gdb 所说)
核心是由 `sshd: root [priv] '生成的。 程序以信号 11 终止,分段错误。 #0 0x00007f687910ae69 in vfprintf () from /lib/libc.so.6 (gdb) BT #0 0x00007f687910ae69 in vfprintf () from /lib/libc.so.6 #1 0x00007f68791a98c2 in __fprintf_chk () from /lib/libc.so.6 #2 0x000000000044ed03 in script_open() #3 0x000000000040ad2c in main ()
崩溃的代码是:
strftime(logname, sizeof(logname), "%F.%T", gmtime(&tvec));
或者
snprintf(fname, sizeof(fname), "%s/openssh.%s.%08x.typescript", SCRIPTDIR, username, rnd);
完整的 script.c 清单在这里http://pastebin.com/48B39K8s,我已经评论了第 50 行并从第 53 行删除了 logname 变量。
我只是想知道,自 2.3 以来 glibc 发生了什么变化,这些函数会导致段错误或在哪里阅读它。