【发布时间】:2011-05-07 23:05:43
【问题描述】:
我尝试从 kdvelectronics 站点将 ssh 会话记录补丁修改为 sshd。
从 openssh 4.x 到 5.x 的代码没有太大变化,但现在 sshd 段错误在 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 中发生了什么变化,这些函数导致了段错误或在哪里阅读它。
【问题讨论】:
-
glibc 内部的段错误并不意味着它是 glibc 的错。如果你传入一个无效的指针/字符串,就会发生不好的事情。
-
是的,我明白了,似乎有些地方发生了变化,但很难找到,因为 glibc 更改日志至少可以说是巨大的。