Bug 40585

Summary: lightdm: use-after-free, потенциально приводящий к прекращению работы функции запуска "предыдущей сессии"
Product: Sisyphus Reporter: Aleksei Nikiforov <darktemplaralt>
Component: lightdmAssignee: manowar <manowar>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: antohami, ildar, manowar
Version: unstableKeywords: regression
Hardware: x86_64   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=30329
Attachments:
Description Flags
lightdm.gdb.log none

Description Aleksei Nikiforov 2021-07-27 13:45:13 MSK
Created attachment 9538 [details]
lightdm.gdb.log

При попытке запустить lightdm-kde-greeter, адаптированный под qt5/kde5, при запуске с предыдущей сессией, запуск не работает.

Воспроизведение:
1) Взять K Workstation, обновить до Сизифа и поставить lightdm и lightdm-kde-greeter.
Сейчас lightdm-kde-greeter - work in progress, текущее состояние сейчас можно взять отсюда:
http://git.altlinux.org/people/darktemplar/packages/?p=lightdm-kde-greeter.git;a=shortlog;h=refs/heads/sisyphus
2) Выставить в конфиге lightdm-kde-greeter тему classic:
$ cat /etc/lightdm/lightdm-kde-greeter.conf 
[greeter]
theme-name=classic
3) Запустить lightdm, убедиться что в качестве greeter используется lightdm-kde-greeter или же заставить использовать его.
4) Убедиться что в сессии выбран пункт "Previously Used Session". Он обычно выбран по-умолчанию.
5) Залогиниться в сессию. Может потребоваться сделать это несколько раз одним и тем же пользователем для заполнения и использования файла ~/.dmrc.

Результат:
Пользовательская сессию не запускается.
В логе /var/log/lightdm/lightdm.log подобные записи:
[+1139.38s] DEBUG: Greeter requests default session
[+1148.40s] CRITICAL: g_variant_new_string: assertion 'g_utf8_validate (string, -1, NULL)' failed
[+1148.40s] CRITICAL: g_dbus_connection_call_sync_internal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
[+1153.94s] DEBUG: Writing /home/test/.dmrc
[+1424.62s] DEBUG: Seat seat0: Failed to find session configuration �\���U
[+1424.62s] DEBUG: Seat seat0: Can't find session '�\���U'
[+2667.24s] DEBUG: Got signal 15 from process 1

Ожидаемый результат:
Запуск предыдущей пользовательской сессии.


Дополнительная информация:
Покопался с gdb и нашёл проблему. Лог gdb, почищенный от большей части ненужного, прикреплён.

Судя по результатам, патчем lightdm-1.30.0-reread-dmrc-alt.patch внесена ошибка типа "use after free": когда прилетает session_name == NULL, session_name берётся из данных, хранящихся в "user", однако затем из-за форсированного вызова  load_dmrc эти данные освобождаются и выделяются/считываются/наполняются снова, однако в session_name остаётся старый невалидный указатель. Дальше всё работает плохо.

В p9 воспроизвести не удалось. Либо везёт, либо что-то ещё блокирует проявление ошибки.

Прошу откатить патч lightdm-1.30.0-reread-dmrc-alt.patch для исправления проблемы.
Comment 1 Aleksei Nikiforov 2021-08-18 11:45:21 MSK
ping
Comment 2 manowar@altlinux.org 2021-08-18 12:06:37 MSK
А на что откатить-то? На предыдущую версию или совсем его убрать?
Comment 3 Aleksei Nikiforov 2021-08-18 12:17:35 MSK
(Ответ для manowar@altlinux.org на комментарий #2)
> А на что откатить-то? На предыдущую версию или совсем его убрать?

Это как Вы решите, просто отрывать патч или как-то его переделывать/переосмыслять. Просто отрывание патча вернёт связанную багу #30329.

Кстати, lightdm-kde-greeter уже вернулся в Сизиф.
Comment 4 Repository Robot 2021-08-20 03:33:10 MSK
lightdm-1.30.0-alt15 -> sisyphus:

 Fri Aug 20 2021 Paul Wolneykien <manowar@altlinux> 1.30.0-alt15
 - Revoke the "reread-dmrc" patch (closes: 40585).
 - ALTBUG 30329 should now be reopened.