2

kdvelectronics サイトから ssh セッション ログ パッチを sshd に変更しようとしています。

コードは openssh 4.x から 5.x にあまり変更されていませんが、script_open 関数が呼び出されると sshd segfaults が発生するようになりました (gdb によると)。

コアは「sshd: root [priv]」によって生成されました。
プログラムはシグナル 11、セグメンテーション違反で終了しました。
#0 0x00007f687910ae69 in vfprintf () from /lib/libc.so.6
(gdb) ところで
#0 0x00007f687910ae69 in vfprintf () from /lib/libc.so.6
#1 /lib/libc.so.6 の __fprintf_chk() 内の 0x00007f68791a98c2
#2 script_open()で0x000000000044ed03
#3 メインの 0x000000000040ad2c ()

クラッシュするコードは次のとおりです。

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 変数を削除しました。

これらの関数が segfault を引き起こす 2.3 以降の glibc の変更点や、それについてどこで読むべきかを知りたいだけです。

4

2 に答える 2

0

わかりました、それはかなり単純であることがわかりました。言及された文字列をに変更しました

strftime(logname、FILENAME_MAX + 1、 "%F。%T"、gmtime(&tvec));
snprintf(fname、FILENAME_MAX + 1、 "%s / openssh。%s。%08x.typescript"、SCRIPTDIR、username、rnd);

多くの場合、それは汚れていますが、機能します。

于 2010-11-11T13:38:14.727 に答える
0

あなたのコードがクラッシュする理由は、(50 行目をコメントアウトして) logname60 行目で使用したときに未定義の内容が残っているためだと思いますlogname。その場合、60行目からも削除するのを忘れただけですか?

于 2010-11-11T17:03:33.643 に答える