segfaults при компиляции на более новой версии glibc (2.3 -> 2.10) - PullRequest
2 голосов
/ 10 ноября 2010

Я пытаюсь изменить патч регистрации сеанса ssh на sshd с сайта kdvelectronics.

Код не сильно изменился с openssh 4.x до 5.x, но теперь sshd вызывает ошибки при вызове функции script_open (как говорит gdb)

Core was generated by `sshd: root [priv]        '.
Program terminated with signal 11, Segmentation fault.
#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 и удалил переменную logname из строки 53.

Я просто хочу знать, что изменилось в glibc с 2.3, что эти функции вызывают segfault или где об этом читать.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2010

Я полагаю, что причиной сбоя вашего кода является то, что (с закомментированной строкой 50) вы оставили logname с неопределенным содержимым при использовании его в строке 60. Вы упомянули, что удалили ссылку logname из строки 53 наряду с комментированием строки 50 - может быть, вы просто забыли удалить ее из строки 60 в этом случае?

0 голосов
/ 11 ноября 2010

Хорошо, все оказалось довольно просто. Я изменил упомянутые строки на

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

Ofc это грязно, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...