Bug 51645 - Segfault при запуске функции ssh2_auth_pubkey_file
Summary: Segfault при запуске функции ssh2_auth_pubkey_file
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: php8.2-ssh2 (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Anton Farygin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-10-06 17:37 MSK by Evgeny Shesteperov
Modified: 2024-10-10 19:55 MSK (History)
2 users (show)

See Also:


Attachments
Backtrace (6.05 KB, text/x-log)
2024-10-06 17:37 MSK, Evgeny Shesteperov
no flags Details
Исправление Segmentation fault (917 bytes, patch)
2024-10-10 15:33 MSK, krasovskiyai
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Evgeny Shesteperov 2024-10-06 17:37:39 MSK
Created attachment 16959 [details]
Backtrace

Версия

-   php8.2-ssh2-1.3.1-alt3.24

Шаги воспроизведения

root:

    # apt-get install -y php8.2 php8.2-fpm-fcgi apache2-mod_php8.2 php8.2-ssh2

test (первый системный пользователь):

    $ export LANG="en_US.UTF-8"
    $ export LC_ALL="en_US.UTF-8"
    $ echo y | ssh-keygen -f '/home/test/.ssh/id_rsa' -t rsa -N '' && cat /home/test/.ssh/id_rsa.pub > /home/test/.ssh/authorized_keys && \
    tmpdir=$(mktemp -d) && \
    cd $tmpdir && \
    cat <<'EOF' > ssh-test.php 
    <?php
    $conn = ssh2_connect($argv[1], 22);
    ssh2_auth_pubkey_file($conn, 'test', '/home/test/.ssh/id_rsa.pub', '/home/test/.ssh/id_rsa');
    $sftp = ssh2_sftp($conn);
    ssh2_sftp_mkdir($sftp, $argv[2]);
    ?>
    EOF
    $ php8.2 ssh-test.php $(hostname -i) $(pwd)/my-ssh-test &&
    stat $(pwd)/my-ssh-test

Ожидаемый результат: создана папка my-ssh-test

Фактический результат: Segfault при выполнении команды
ssh2_auth_pubkey_file.

Не воспроизводится с php8.3-ssh2-1:1.3.1-alt3.12.

Воспроизводится в P11.

Не воспроизводится в P10.

В backtrace характерное:

    #2  0x00007f222795ba3b in _libssh2_rsa_new_openssh_private (passphrase=0x18 <error: Cannot access memory at address 0x18>, filename=0x7f2227a02228 "/home/test/.ssh/id_rsa", session=0x7f2227a90000, rsa=0x7ffd797e52d0) at /usr/src/debug/libssh2-1.11.0/src/openssl.c:1049
Comment 1 Evgeny Shesteperov 2024-10-07 17:03:57 MSK
Воспроизводится и с php8.1-ssh2-1.3.1-alt3.30
Comment 2 krasovskiyai 2024-10-09 19:31:41 MSK
Обнаружил, что ранее метод ssh2_auth_pubkey_file получал passphrase по ходу выполнения программы, теперь он где то теряется по пути.
Как временное решение можно явно передать любую строку в поле для passphrase например так: 
ssh2_auth_pubkey_file($conn, 'test', '/home/test/.ssh/id_rsa.pub', '/home/test/.ssh/id_rsa','some phrase');
Comment 3 krasovskiyai 2024-10-10 15:33:07 MSK
Created attachment 16996 [details]
Исправление Segmentation fault

Патч добавляет проверку на passphrase.
Решение отсюда: https://bugs.php.net/bug.php?id=79702
Comment 4 Anton Farygin 2024-10-10 18:38:14 MSK
Спасибо.
Comment 5 Repository Robot 2024-10-10 19:55:37 MSK
php8.3-ssh2-1:1.4.1-alt1.12 -> sisyphus:

 Thu Oct 10 2024 Anton Farygin <rider@altlinux> 1:1.4.1-alt1.12
 - Rebuild with php-devel = 8.3.12-alt1
 Thu Oct 10 2024 Anton Farygin <rider@altlinux.ru> 1:1.4.1-alt1
 - 1.3.1 -> 1.4.1
 - added patch from php bugtracker 79702 (closes: #51645)