Debian Stretch: falha de segurança do gnome-software em libgs_plugin_systemd-updates.so

Debian Stretch: falha de segurança do gnome-software em libgs_plugin_systemd-updates.so

Na última saga de atualização, o gnome-software começou a falhar seg. É claro que meus pais não percebem isso. Significa apenas que eles não receberão notificações de atualizações de segurança e que o PC ficará horrível e inseguro.[1] A primeira página do Google não mostra nada para explicar por que este Debian Desktop não está conseguindo entregar notificações de atualização de segurança (de novo, suspirar).

Os seguintes sintomas foram observados por outras pessoas? Podemos fornecer uma explicação? Admite uma solução permanente?

(A falta da causa raiz: recursos inadequados para o Debian Desktop, em comparação com outros desktops).

sudo journalctlsugere que esta é uma desreferência de ponteiro NULL em libgs_plugin_systemd-updates.so. (Os últimos três dígitos do Ponteiro de Instrução são iguais em cada caso).

Nov 22 14:59:39 drystone kernel: pool[2781]: segfault at 0 ip 00007f86c4d6f6d6 sp 00007f86b92249d0 error 4 in libgs_plugin_systemd-updates.so[7f86c4d6e000+2000]

O diário mostra que ele travou 66 vezes antes de hoje, a partir de 18/10/2017. A versão atual do software gnome foi atualizada para 23/09/2017. Isso teria acontecido quando atualizei a máquina do Debian Wheezy para o Stretch. Eu sei que consegui abrir o software gnome imediatamente após a atualização.

Hoje ele travava sempre que eu o iniciava, até que executei as etapas para instalar o gnome-software-dbgsym. A remoção do pacote -dbgsym não fez com que ele travasse novamente. Deve ter sido algo sobre o estado do apt. Para o futuro, habilitei a captura de backtraces instalando o systemd-coredump.

O mais próximo que posso encontrar é umcorrespondente ao segfault do gnome-softwareque por acaso estava logado em umrelatóriocontra um programa completamente diferente. Isso apareceu nos resultados para "libgs_plugin_systemd-updates segfault". (Suponho que a versão Kali em questão incluía o mesmo binário do Debian Stretch). Pesquisando mais especificamente por esta mensagem segfault, o índice do Google atualmente inclui apenas o relatório Kali e minha pergunta aqui.


$ apt-cache policy gnome-software
gnome-software:
  Installed: 3.22.5-1
  Candidate: 3.22.5-1
  Version table:
 *** 3.22.5-1 500
        500 http://ftp.uk.debian.org/debian stretch/main amd64 Packages
        100 /var/lib/dpkg/status

e apt-get upgradenão mostrou atualizações pendentes para gnome-software (ou packagekit).

$ gnome-software 
14:59:38:0408 Gs  failed to call gs_plugin_add_updates_historical on packagekit-offline: The package id's 'curl;7.52.1-5+deb9u2;amd64;debian-stable-main&

[recorte. este aviso acontece de qualquer maneira quando não trava]

&xwayland;2:1.19.2-1+deb9u2;amd64;debian-stable-main' are not valid
Segmentation fault

[1] O Debian Desktop não vem com nenhum pop-up para travamentos.

Meus pais estão acostumados com ele como um sistema multiusuário e é possível que eles saiam do gdm antes de desligar, o que não mostraria a bela caixa de seleção para reiniciar e instalar atualizações. Aparentemente, meus pais tendem a desligar diretamente, sem sair primeiro. Então, isso é bom, pelo menos eles ainda devem ver “reiniciar e instalar atualizações” quando desligarem. (Aparece como uma caixa de seleção marcada por padrão).

Responder1

DR PackageKit apresenta bugs (especificamente as atualizações offline - as várias referências ao systemd são porque as atualizações offline são implementadas usando-o). Ele engasga com o pacote Google Chrome para Debian. Eu relatei isso no upstream.

Você pode tentar contornar isso instalando pk-update-icone comentando/removendo/editando a linha NotShowIn=KDE;GNOME;em /etc/xdg/autostart/pk-update-icon.desktop. Observe que se você quiser testar rapidamente pk-update-icon, você pode querer executá-lo com pk-update-icon --delay=0. Pessoalmente, eu combinaria isso com a extensão TopIcons Plus do Gnome, devido a problemas com as notificações do ícone.


As falhas recomeçaram depois de um mês, então consegui capturar o seguinte backtrace.

Thread 9 "pool" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffcffff700 (LWP 2689)]
gs_plugin_add_updates (plugin=0x555555885d00, list=0x555557735af0, cancellable=<optimized out>, error=<optimized out>)
    at gs-plugin-systemd-updates.c:122
(gdb) bt full 3
#0  gs_plugin_add_updates (plugin=0x555555885d00, list=0x555557735af0, cancellable=<optimized out>, error=<optimized out>) at gs-plugin-systemd-updates.c:122
        app = 0x5555558af7c0
        split = 0x0
        i = 1
        error_local = 0x0
        package_ids = 0x7fffc0073d00
#1  0x00005555555ad795 in gs_plugin_loader_run_results (plugin_loader=plugin_loader@entry=0x555555849c30, function_name=0x5555555ca453 "gs_plugin_add_updates", flags=2228800, cancellable=cancellable@entry=0x555557764b60, error=error@entry=0x7fffcfffeaf0) at gs-plugin-loader.c:723
        error_local = 0x0
        ptask2 = 0x7fffc006c030
        list = 0x555557735af0
        plugin_func = 0x7fffe405d600 <gs_plugin_add_updates>
        plugin = 0x555555885d00
        exists = <optimized out>
        ret = <optimized out>
        i = 8
        ptask = 0x7fffc00757f0
        __func__ = "gs_plugin_loader_run_results"
#2  0x00005555555ad9b7 in gs_plugin_loader_get_updates_thread_cb (task=0x555558116a70, object=0x555555849c30, task_data=0x7fffc40bd520, cancellable=0x555557764b60) at gs-plugin-loader.c:1171
        method_name = <optimized out>
        state = 0x7fffc40bd520
        error = 0x0
        ret = <optimized out>
(More stack frames follow...)

Código fontegs-plugin-systemd-updates.c:

121     split = pk_package_id_split (package_ids[i]);
122     gs_app_add_source (app, split[PK_PACKAGE_ID_NAME]);

Temos split = 0x0 (ponteiro NULL) acima. pk_package_id_split()retorna NULL somente quando o id é inválido.

(gdb) p package_ids[0]
$1 = (gchar *) 0x7fffc407f720 "google-chrome-stable;63.0.3239.84-1;amd64;google"
(gdb) p package_ids[1]
$2 = (gchar *) 0x7fffc4087e20 "_inc.-stable-main"
(gdb) p package_ids[2]
$3 = (gchar *) 0x0
(gdb) p i
$5 = 1

Parece que o ID inválido é _inc.-stable-main. pkcon get-updatesmostra apenas um pacote contendo o texto de ambos os ids. No entanto, pkcon get-offline-updatesparece ilustrar o mesmo bug. ( apt-get --dry-run upgrademostra que há apenas um pacote atualizável).

$ pkcon get-updates      
Normal          google-chrome-stable-63.0.3239.84-1.amd64 (google,_inc.-stable-main)    The web browser from Google
$ pkcon offline-get-prepared
Prepared updates:
google-chrome-stable-63.0.3239.84-1.amd64
(null)

lol. pk-offline.c:

/* return raw package ids */
return g_strsplit (prepared_ids, ",", -1);

informação relacionada