Bug 35305 - Qt5Network динамически подгружает случайные библиотеки libssl/libcrypto
Summary: Qt5Network динамически подгружает случайные библиотеки libssl/libcrypto
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: libqt5-network (show other bugs)
Version: unstable
Hardware: all Linux
: P3 blocker
Assignee: Sergey V Turchin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 35303
  Show dependency tree
 
Reported: 2018-08-29 13:28 MSK by Vitaly Lipatov
Modified: 2018-08-30 11:31 MSK (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Lipatov 2018-08-29 13:28:36 MSK
Возможно, это не совсем так, но судя по бинарнику, Qt5Network динамически подгружает любую библиотеку libcrypto, которую найдёт:

$ strings /usr/lib64/libQt5Network.so.5.11.1 | grep libssl
libssl.*
$ strings /usr/lib64/libQt5Network.so.5.11.1 | grep libcrypto
libcrypto.*

libqt5-network-5.11.1-alt2.S1.x86_64
Comment 1 Vitaly Lipatov 2018-08-29 13:33:06 MSK
При запуске программы получаем в консоли
qt.network.ssl: QSslSocket: cannot resolve SSLv23_client_method
qt.network.ssl: QSslSocket: cannot resolve SSLv2_server_method
qt.network.ssl: QSslSocket: cannot resolve SSLv3_server_method
qt.network.ssl: QSslSocket: cannot resolve SSLv23_server_method
qt.network.ssl: QSslSocket: cannot resolve X509_STORE_CTX_get_chain
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf
qt.network.ssl: QSslSocket: cannot resolve SSLeay
qt.network.ssl: Incompatible version of OpenSSL
Comment 2 Sergey V Turchin 2018-08-29 14:36:59 MSK
Как вариант: имена файлов подгружаемых библиотек сделаны так, что только у нас такое поведение.
Comment 3 Gleb F-Malinovskiy 2018-08-29 14:40:02 MSK
(In reply to comment #2)
> Как вариант: имена файлов подгружаемых библиотек сделаны так, что только у нас
> такое поведение.

Ну, у 1.0 у нас, вроде, было другое название.  А у 1.1 у нас такое же как в апстриме.  А что там за логика?
Comment 4 Sergey V Turchin 2018-08-29 14:41:31 MSK
Например
[zerg@zerg ~]$ rpmvercmp libcrypto.so.10 libcrypto.so.1.1
1
[zerg@zerg ~]$ rpmvercmp libcrypto.so.10 libcrypto.so.1.0.2p
1
Comment 5 Sergey V Turchin 2018-08-29 14:42:57 MSK
[zerg@zerg ~]$ rpmvercmp libcrypto.so.10 libcrypto.so.0
1
Comment 6 Gleb F-Malinovskiy 2018-08-29 14:52:23 MSK
(In reply to comment #5)
> [zerg@zerg ~]$ rpmvercmp libcrypto.so.10 libcrypto.so.0
> 1

qt использует rpmvercmp для выбора libcrypto?
Comment 7 Sergey V Turchin 2018-08-29 14:56:07 MSK
"Вполне возможно". Надо посмотреть.
Comment 8 Sergey V Turchin 2018-08-29 15:02:05 MSK
(В ответ на комментарий №6)
> qt использует rpmvercmp для выбора libcrypto?
Видимо, да. Используется функтор LibGreaterThan из
http://git.altlinux.org/people/zerg/packages/qt5-base.git?p=qt5-base.git;a=blob;f=src/network/ssl/qsslsocket_openssl_symbols.cpp
Comment 9 Sergey V Turchin 2018-08-29 15:04:44 MSK
(В ответ на комментарий №8)
> Используется функтор LibGreaterThan
через NumericallyLess в том же файле
Comment 10 Gleb F-Malinovskiy 2018-08-29 15:06:26 MSK
А нельзя просто слинковать библиотеку с openssl?
Comment 11 Sergey V Turchin 2018-08-29 15:14:22 MSK
(В ответ на комментарий №10)
> А нельзя просто слинковать библиотеку с openssl?
Можно, но я уже отказался от этой затеи.
Comment 12 Gleb F-Malinovskiy 2018-08-29 15:16:58 MSK
(In reply to comment #11)
> (В ответ на комментарий №10)
> > А нельзя просто слинковать библиотеку с openssl?
> Можно, но я уже отказался от этой затеи.

Расскажешь почему?
Comment 13 Sergey V Turchin 2018-08-29 15:23:21 MSK
(В ответ на комментарий №12)
> Расскажешь почему?
Чтобы зря не пересобирать.
Comment 14 Gleb F-Malinovskiy 2018-08-29 15:28:41 MSK
(In reply to comment #13)
> (В ответ на комментарий №12)
> > Расскажешь почему?
> Чтобы зря не пересобирать.

Один раз в openssl ABI?  Думаешь, отказ от одной пересборки раз в много лет стоит тех проблем, которые мы имеем сейчас?
Comment 15 Sergey V Turchin 2018-08-29 15:36:45 MSK
(В ответ на комментарий №14)
> Один раз в openssl ABI?  Думаешь, отказ от одной пересборки раз в много лет
> стоит тех проблем, которые мы имеем сейчас?
Не стоит, конечно. Пересоберите openssl.
Достаточно добавить симлинки
libcrypto.so.11 -> libcrypto.so.1.1
libcrypto.so.11 -> libcrypto.so.1.1
Comment 16 Sergey V Turchin 2018-08-29 15:37:29 MSK
(В ответ на комментарий №15)
> Достаточно добавить симлинки
> libcrypto.so.11 -> libcrypto.so.1.1
и
libssl.so.11 -> libssl.so.1.1
Comment 17 Gleb F-Malinovskiy 2018-08-29 15:48:29 MSK
(In reply to comment #15)
> (В ответ на комментарий №14)
> > Один раз в openssl ABI?  Думаешь, отказ от одной пересборки раз в много лет
> > стоит тех проблем, которые мы имеем сейчас?
> Не стоит, конечно. Пересоберите openssl.
> Достаточно добавить симлинки
> libcrypto.so.11 -> libcrypto.so.1.1
> libcrypto.so.11 -> libcrypto.so.1.1

Объясни, пожалуйста, чем этот хак лучше, чем просто честно собрать qt5 с библиотекой, которую он использует?
Очевидно, что дополнительная пересборка один раз в новый openssl ABI не может перевесить преимущества линковки.
Comment 18 Sergey V Turchin 2018-08-29 16:03:51 MSK
(В ответ на комментарий №17)
> Объясни, пожалуйста, чем этот хак лучше, чем просто честно собрать qt5 с
> библиотекой, которую он использует?
Потому, что openssl сломал, его и чинить.

> Очевидно, что дополнительная пересборка один раз
Не один раз, а каждый раз. И у нас не один Qt.
Comment 19 AEN 2018-08-29 16:08:16 MSK
(В ответ на комментарий №18)
> (В ответ на комментарий №17)
> > Объясни, пожалуйста, чем этот хак лучше, чем просто честно собрать qt5 с
> > библиотекой, которую он использует?
> Потому, что openssl сломал, его и чинить.
> 
Сергей, но openssl не сломан.
Comment 20 Gleb F-Malinovskiy 2018-08-29 16:09:53 MSK
(In reply to comment #18)
> (В ответ на комментарий №17)
> > Объясни, пожалуйста, чем этот хак лучше, чем просто честно собрать qt5 с
> > библиотекой, которую он использует?
> Потому, что openssl сломал, его и чинить.
> 
> > Очевидно, что дополнительная пересборка один раз
> Не один раз, а каждый раз. И у нас не один Qt.
Comment 21 Gleb F-Malinovskiy 2018-08-29 16:13:40 MSK
(In reply to comment #18)
> (В ответ на комментарий №17)
> > Объясни, пожалуйста, чем этот хак лучше, чем просто честно собрать qt5 с
> > библиотекой, которую он использует?
> Потому, что openssl сломал, его и чинить.

openssl обновился и показал нам багу в qt.

> > Очевидно, что дополнительная пересборка один раз
> Не один раз, а каждый раз. И у нас не один Qt.

Раз в 8 лет?  У qt есть зависимости которые обновляются гораздо чаще.
Comment 22 Sergey V Turchin 2018-08-29 16:20:25 MSK
(В ответ на комментарий №21)
> openssl обновился и показал нам багу в qt.
Если криво обновляться, кого угодно можно сломать.

(В ответ на комментарий №19)
> Сергей, но openssl не сломан.
Это как раз Qt не сломан.

Т.к. openssl "починился" с его soname-ом, то ему и разгребать.
Comment 23 AEN 2018-08-29 16:25:29 MSK
Сергей, openssl библиотека более низкого уровня. И мы пересобираем другие пакеты под изменения в ней.
Пожалуйста, не надо спорить попусту. Изменения были анонсированы и надо было обсуждать их раньше. А сейчас уже идёт пересборка.
Comment 24 AEN 2018-08-29 16:29:30 MSK
Ладно, давайте спросим мнение главного конструктора.
Comment 25 Gleb F-Malinovskiy 2018-08-29 16:31:09 MSK
qt5 в Сизифе собран таким образом, чтобы нельзя было отследить его разлом до того как этот разлом произойдёт.
Я считаю, что это ошибка сборки, которую следует исправить.  openssl только позволил увидеть эту проблему, в остальном он совершенно не при чём.
Comment 26 Sergey V Turchin 2018-08-29 16:33:13 MSK
Текущая схема ДО СИХ ПОР не ломалась.

И я предложил простое решение. В будущем можно его легко выкинуть.
Comment 27 Sergey V Turchin 2018-08-29 16:36:10 MSK
(В ответ на комментарий №23)
> Изменения были анонсированы
Изменения наименования soname анонсировано не было.
Comment 28 Gleb F-Malinovskiy 2018-08-29 16:38:07 MSK
И всё же, почему нельзя просто слинковать qt5 с openssl?  Ответь, пожалуйста,
на этот вопрос.
Comment 29 Dmitry V. Levin 2018-08-29 16:38:48 MSK
qt5 ОБЯЗАНА быть слинкована с теми libcrypto/libssl, которые использует,
чтобы все статические проверки ABI, которые у нас реализованы, работали, и пользователи не страдали от таких ошибок, как эта.

Сергей, исправь qt5 НЕЗАМЕДЛИТЕЛЬНО!
Comment 30 Sergey V Turchin 2018-08-29 17:11:19 MSK
(В ответ на комментарий №28)
> И всё же, почему нельзя просто слинковать qt5 с openssl?
Кто сказал "нельзя"? Я считаю более удобным не линковать.
Comment 31 Sergey V Turchin 2018-08-29 17:16:02 MSK
(В ответ на комментарий №29)
> qt5 ОБЯЗАНА быть слинкована с теми libcrypto/libssl, которые использует,
> чтобы все статические проверки ABI, которые у нас реализованы, работали
Ну, хоть аргумент появился.

>, и пользователи не страдали от таких ошибок, как эта.
От таких больше не будут, только во всех местах, где "не как у всех", вылазили, вылазят и будут вылазить другие.

> Сергей, исправь qt5 НЕЗАМЕДЛИТЕЛЬНО!
Ok.
Comment 32 Sergey V Turchin 2018-08-29 18:36:55 MSK
http://webery.altlinux.org/task/212070
Comment 33 AEN 2018-08-30 11:31:26 MSK
Сергей, спасибо!