Отладка ошибки сегментации в привязках OpenSSL криптографии PythonLinux

Ответить Пред. темаСлед. тема
Anonymous
 Отладка ошибки сегментации в привязках OpenSSL криптографии Python

Сообщение Anonymous »

Мое приложение работает в контейнере Docker и всегда хорошо работает на виртуальных машинах AWS.
При попытке развернуть некоторые виртуальные машины в GCP я заметил, что ошибки сегментации убивали контейнер. в некоторых из них.
Похоже, что здесь не существует очевидной закономерности. Приложение работает хорошо несколько дней, а потом просто умирает. Иногда меньше, иногда больше дней.
Мне удалось создать дампы ядра после сбоев, но мне сложно их понять.
Самое большее, что я сделал, это получить обратную трассировку ниже, используя gdb. Мне удалось получить его после монтирования дампа ядра в тот же контейнер, что и оригинал.
Он содержит некоторые функции OpenSSL, которые вызываются привязками пакета C криптографического. для OpenSSL.
Однако я не могу найти способ определить причину этой ошибки сегментации. У меня уже было несколько случаев, когда виртуальные машины умирали очень похожим образом, и все они указывали на OpenSSL в своих дампах ядра.
Кроме того, мне не удалось заставить символы отладки Python работать в этом контейнере. . Хотя я не уверен, что это будет полезно. Это образ Debian 11, настроенный на использование python3.10 по умолчанию, но не существует подходящей установки python3.10-dbg, только для Python 3.9.
Я также не уверен, как именно хост мешает контейнеру, вызывая это, поскольку даже используемые привязки OpenSSL входят в пакет шифрования.
Я пытался избежать строительство новый образ Docker для отладки этого, потому что боюсь, что могу как-то помешать решению проблемы, поскольку этот же образ очень хорошо работает на AWS. Но это возможно, если это поможет.
Если у кого-нибудь есть какие-либо советы о новых стратегиях отладки, о том, как узнать роль хоста в проблеме или общие предположения о что может произойти, мне бы очень помогло.
Версии:
  • криптография: 38.0.4
    OpenSSL (в комплекте с криптографией): 3.0.7
# gdb /usr/local/bin/python3.10 /core.dump

(gdb) bt full
#0 0x0000f93ee103cd78 in _PyErr_SetObject () from /usr/local/bin/../lib/libpython3.10.so.1.0
No symbol table info available.
#1 0x0000f93ee10c6a24 in _PyErr_SetString () from /usr/local/bin/../lib/libpython3.10.so.1.0
No symbol table info available.
#2 0x0000f93ee1044244 in ?? () from /usr/local/bin/../lib/libpython3.10.so.1.0
No symbol table info available.
#3 0x0000f93ede93d5d8 in OPENSSL_LH_doall_arg ()
from /usr/local/lib/python3.10/site-packages/cryptography/hazmat/bindings/_openssl.abi3.so
No symbol table info available.
#4 0x0000f93ede93f02c in ossl_namemap_doall_names ()
from /usr/local/lib/python3.10/site-packages/cryptography/hazmat/bindings/_openssl.abi3.so
No symbol table info available.
#5 0x0000f93edea58a20 in OSSL_ENCODER_CTX_new_for_pkey ()
from /usr/local/lib/python3.10/site-packages/cryptography/hazmat/bindings/_openssl.abi3.so
No symbol table info available.
#6 0x0000f93ede9a1cac in i2d_PUBKEY () from /usr/local/lib/python3.10/site-packages/cryptography/hazmat/bindings/_openssl.abi3.so
No symbol table info available.
#7 0x0000f93ede8b3390 in ASN1_i2d_bio ()
from /usr/local/lib/python3.10/site-packages/cryptography/hazmat/bindings/_openssl.abi3.so
No symbol table info available.
#8 0x0000f93ede83c524 in _cffi_f_i2d_PUBKEY_bio (self=, args=)
at build/temp.linux-aarch64-3.6/cryptography.hazmat.bindings._openssl.c:43855
_save = 0xbeefaa544190
x0 = 0xbeefcea289d0
x1 = 0xbeefaa605e00
datasize =
large_args_free = 0x0
result =
pyresult =
arg0 = 0xf93afffc2020
arg1 = 0xf93edd594d10
#9 0x0000f93ee10374b4 in ?? () from /usr/local/bin/../lib/libpython3.10.so.1.0
No symbol table info available.
#10 0x0000f93ee104130c in _PyObject_Call () from /usr/local/bin/../lib/libpython3.10.so.1.0
No symbol table info available.

Помимо этого я также включил обработчик ошибок Python для получения трассировки стека при сбое приложения. Полностью не вставляю, но последние 2 строчки тоже указывают на OpenSSL:
Current thread 0x0000f8e17e8bbd40 (most recent call first):
File "/usr/local/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1024 in load_der_public_key
File "/usr/local/lib/python3.10/site-packages/cryptography/hazmat/primitives/serialization/base.py", line 56 in load_der_public_key


Подробнее здесь: https://stackoverflow.com/questions/793 ... l-bindings
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»