Bug 510173 - Assertion in AppStream::Component::KindFirmware when accessing programs installed with Discover
Summary: Assertion in AppStream::Component::KindFirmware when accessing programs insta...
Status: RESOLVED FIXED
Alias: None
Product: Discover
Classification: Applications
Component: PackageKit (other bugs)
Version First Reported In: 6.4.5
Platform: Neon Linux
: NOR crash
Target Milestone: ---
Assignee: Plasma Bugs List
URL:
Keywords: drkonqi
Depends on:
Blocks:
 
Reported: 2025-10-02 16:37 UTC by contact
Modified: 2025-10-31 02:22 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In: 6.5.2
Sentry Crash Report:


Attachments
New crash information added by DrKonqi (78.66 KB, text/plain)
2025-10-02 16:37 UTC, contact
Details

Note You need to log in before you can comment on or make changes to this bug.
Description contact 2025-10-02 16:37:22 UTC
Application: plasma-discover (6.4.5)

ApplicationNotResponding [ANR]: false
Qt Version: 6.9.2
Frameworks Version: 6.18.0
Operating System: Linux 6.14.0-33-generic x86_64
Windowing System: X11
Distribution: KDE neon User Edition
DrKonqi: 6.4.5 [CoredumpBackend]

-- Information about the crash:
Je ne me souviens pas si le plantage a commencé après l'ajout/suppression d'un programme en particulier, mais depuis quelques semaines je ne peux plus du tout y accéder.
Ce n'est pas bloquant pour l'usage quotidien et la ligne de commande permet d'obtenir les mêmes réponses quoi que bien moins filtrées.

The crash can be reproduced every time.

-- Backtrace (Reduced):
#6  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44
#7  __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
#8  __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#9  0x00007e78d884527e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#10 0x00007e78d88288ff in __GI_abort () at ./stdlib/abort.c:79
#11 0x00007e78d9272d32 in qAbort () at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qassert.cpp:46
#12 qt_message_fatal<QString&> (message=..., context=...) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qlogging.cpp:2149
[...]
#14 0x00007e78d9273b45 in QMessageLogger::fatal (this=<optimized out>, msg=0x7e78d924b8d0 "ASSERT: \"%s\" in file %s, line %d") at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qlogging.cpp:883
#15 0x00007e78d925d779 in qt_assert (assertion=assertion@entry=0x7e78ac0974e0 "component.kind() != AppStream::Component::KindFirmware", file=file@entry=0x7e78ac097080 "./libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp", line=line@entry=384) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qassert.cpp:105
#16 0x00007e78ac03f9a4 in PackageKitBackend::addComponent (this=0x62cd44485630, component=...) at /usr/src/plasma-discover-6.4.5-0zneon+24.04+noble+release+build41/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp:384
#17 0x00007e78ac05dd7f in PackageKitBackend::loadAllPackages (this=0x62cd44485630) at /usr/src/plasma-discover-6.4.5-0zneon+24.04+noble+release+build41/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp:1194
#18 0x00007e78ac056bd9 in operator() (__closure=0x62cd47e3b700, stream=0x62cd47e47970) at /usr/src/plasma-discover-6.4.5-0zneon+24.04+noble+release+build41/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp:714
#19 0x00007e78ac04ea6e in std::function<void (PKResultsStream*)>::operator()(PKResultsStream*) const (__args#0=<optimized out>, this=0x62cd47e47d90) at /usr/include/c++/13/bits/std_function.h:591
#20 operator()(_ZZN17PackageKitBackend20deferredResultStreamERK7QStringSt8functionIFvP15PKResultsStreamEEENKUlPS_8QPointerIS4_ES7_E_clES8_SA_S7_.Frame *) (frame_ptr=0x62cd47e47d30) at /usr/src/plasma-discover-6.4.5-0zneon+24.04+noble+release+build41/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp:689
#21 0x00007e78ac05e394 in std::__n4861::coroutine_handle<void>::resume (this=0x62cd47e48070) at /usr/include/c++/13/coroutine:135
#22 QCoro::detail::TaskFinalSuspend::await_suspend<QCoro::detail::TaskPromise<void> > (finishedCoroutine=..., this=0x62cd47e47ea8) at /usr/include/qcoro6/qcoro/impl/taskfinalsuspend.h:28


Reported using DrKonqi
Comment 1 contact 2025-10-02 16:37:24 UTC
Created attachment 185460 [details]
New crash information added by DrKonqi

DrKonqi auto-attaching complete backtrace.
Comment 2 TraceyC 2025-10-02 19:28:30 UTC
Translation:
I don't remember if the crash started after adding/removing a particular program, but for a few weeks I can't access it at all. This is not blocking for daily use and the command line allows you to get the same answers although much less filtered.

Searchable backtrace

Thread 1 (Thread 0x7e78d2957240 (LWP 16366)):
[KCrash Handler]
#6  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44
#7  __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
#8  __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#9  0x00007e78d884527e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#10 0x00007e78d88288ff in __GI_abort () at ./stdlib/abort.c:79
#11 0x00007e78d9272d32 in qAbort () at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qassert.cpp:46
#12 qt_message_fatal<QString&> (message=..., context=...) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qlogging.cpp:2149
#13 qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *) (msgType=msgType@entry=QtFatalMsg, context=..., msg=msg@entry=0x7e78d924b8d0 "ASSERT: \"%s\" in file %s, line %d", ap=ap@entry=0x7ffc59c12138) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qlogging.cpp:381
#14 0x00007e78d9273b45 in QMessageLogger::fatal (this=<optimized out>, msg=0x7e78d924b8d0 "ASSERT: \"%s\" in file %s, line %d") at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qlogging.cpp:883
#15 0x00007e78d925d779 in qt_assert (assertion=assertion@entry=0x7e78ac0974e0 "component.kind() != AppStream::Component::KindFirmware", file=file@entry=0x7e78ac097080 "./libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp", line=line@entry=384) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qassert.cpp:105
#16 0x00007e78ac03f9a4 in PackageKitBackend::addComponent (this=0x62cd44485630, component=...) at /usr/src/plasma-discover-6.4.5-0zneon+24.04+noble+release+build41/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp:384
#17 0x00007e78ac05dd7f in PackageKitBackend::loadAllPackages (this=0x62cd44485630) at /usr/src/plasma-discover-6.4.5-0zneon+24.04+noble+release+build41/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp:1194
#18 0x00007e78ac056bd9 in operator() (__closure=0x62cd47e3b700, stream=0x62cd47e47970) at /usr/src/plasma-discover-6.4.5-0zneon+24.04+noble+release+build41/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp:714
#19 0x00007e78ac04ea6e in std::function<void (PKResultsStream*)>::operator()(PKResultsStream*) const (__args#0=<optimized out>, this=0x62cd47e47d90) at /usr/include/c++/13/bits/std_function.h:591
#20 operator()(_ZZN17PackageKitBackend20deferredResultStreamERK7QStringSt8functionIFvP15PKResultsStreamEEENKUlPS_8QPointerIS4_ES7_E_clES8_SA_S7_.Frame *) (frame_ptr=0x62cd47e47d30) at /usr/src/plasma-discover-6.4.5-0zneon+24.04+noble+release+build41/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp:689
#21 0x00007e78ac05e394 in std::__n4861::coroutine_handle<void>::resume (this=0x62cd47e48070) at /usr/include/c++/13/coroutine:135
#22 QCoro::detail::TaskFinalSuspend::await_suspend<QCoro::detail::TaskPromise<void> > (finishedCoroutine=..., this=0x62cd47e47ea8) at /usr/include/qcoro6/qcoro/impl/taskfinalsuspend.h:28
#23 QCoro::sleepFor(_ZN5QCoro8sleepForIlSt5ratioILl1ELl1000EEEENS_4TaskIvEERKNSt6chrono8durationIT_T0_EE.Frame *) (frame_ptr=0x62cd47e47e30) at /usr/include/qcoro6/qcoro/qcorotimer.h:64
#24 0x00007e78d9346e39 in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=<optimized out>, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/kernel/qobjectdefs_impl.h:461
#25 doActivate<false> (sender=0x62cd47e47e80, signal_index=3, argv=0x7ffc59c12950) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/kernel/qobject.cpp:4157
#26 0x00007e78d934cb7d in QMetaObject::activate<void, QTimer::QPrivateSignal> (ret=0x0, local_signal_index=0, mo=<optimized out>, sender=<optimized out>) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/kernel/qobjectdefs.h:306
#27 QTimer::timeout (this=<optimized out>, _t1=...) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/obj-x86_64-linux-gnu/src/corelib/Core_autogen/include/moc_qtimer.cpp:182
#28 0x00007e78d93394be in QObject::event (this=0x62cd47e47e80, e=0x7ffc59c12ae0) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/kernel/qobject.cpp:1407
#29 0x00007e78db4c7dcd in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x62cd47e47e80, e=0x7ffc59c12ae0) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/widgets/kernel/qapplication.cpp:3300
#30 0x00007e78d92e59c0 in QCoreApplication::notifyInternal2 (receiver=0x62cd47e47e80, event=0x7ffc59c12ae0) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/kernel/qcoreapplication.cpp:1106
#31 0x00007e78d946aab7 in QTimerInfoList::activateTimers (this=0x62cd43d31bd0) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/kernel/qtimerinfo_unix.cpp:426
#32 0x00007e78d955f4a9 in timerSourceDispatch (source=<optimized out>) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/kernel/qeventdispatcher_glib.cpp:152
#33 0x00007e78d7ccb5c5 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#34 0x00007e78d7d2a737 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#35 0x00007e78d7ccaa63 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#36 0x00007e78d955cb2f in QEventDispatcherGlib::processEvents (this=0x62cd43d37e00, flags=...) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/kernel/qeventdispatcher_glib.cpp:399
#37 0x00007e78d92edadb in QEventLoop::exec (this=0x7ffc59c12d50, flags=...) at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qflags.h:77
#38 0x00007e78d92e817f in QCoreApplication::exec () at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/corelib/global/qflags.h:77
#39 0x00007e78d98debad in QGuiApplication::exec () at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/gui/kernel/qguiapplication.cpp:1986
#40 0x00007e78db4c3d19 in QApplication::exec () at /usr/src/qt6-base-6.9.2-0zneon+24.04+noble+release+build121/src/widgets/kernel/qapplication.cpp:2567
#41 0x000062cd42d20b32 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/plasma-discover-6.4.5-0zneon+24.04+noble+release+build41/discover/main.cpp:231
Comment 3 TraceyC 2025-10-02 19:31:46 UTC
The backtrace looks very similar to bug 490786 , for a crash in the Flatpak backend, which was fixed
Comment 4 Aleix Pol 2025-10-27 01:08:42 UTC
Hm that other crash you mention is just another assertion but has not much to do.

Here we're seeing a call to load all packages and it seems like one of them it's a firmware. Normally firmwares are in fwupd so we'd need to understand if it's legitimate that there's firmwares here.

Testing with this extra information would help:

diff --git a/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp b/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
index 2ac52e5d1..76036d136 100644
--- a/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
+++ b/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
@@ -393,6 +393,7 @@ AppPackageKitResource *PackageKitBackend::addComponent(const AppStream::Componen
 {
     const QStringList pkgNames = component.packageNames();
     Q_ASSERT(!pkgNames.isEmpty());
+    qWarning() << "BOOM!" << component.id() << component.kind() << component.packageNames();
     Q_ASSERT(component.kind() != AppStream::Component::KindFirmware);
 
     auto appId = makeAppId(component.id());
Comment 5 Matthias Klumpp 2025-10-27 15:48:13 UTC
Oh, there absolutely *will be* firmware components outside of fwupd. Fwupd primarily deals with flashed firmware, but there is also a ton of runtime firmware that is flashed, well, at runtime and distributed by the respective Linux distribution. 

Giving the OS a way to install packages containing it on-demand was one of the ultimate design goals of AppStream (same with drivers, although fortunately most of them are now in the kernel). You can read more at https://www.freedesktop.org/software/appstream/docs/sect-Metadata-Firmware.html

From a quick check at Debian, Debian actually contains a ton of firmware components, and even more apps/components that expose modaliases to advertise enhanced hardware compatibility.
Comment 6 Aleix Pol 2025-10-27 17:54:03 UTC
I would expect these to be distributed with AppStream::Component::KindDriver. It's clearly a problem we are finding anyway and I guess there's little reason to get stuck with it.
Comment 7 Bug Janitor Service 2025-10-27 17:56:28 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/discover/-/merge_requests/1195
Comment 8 contact 2025-10-27 18:08:51 UTC
Hey, I'm thinking while reading your discussion about firmware packages.
I have the same issue on both my work computer and personal. And on both I've installed VMWare.
Because I use secure boot I remember manually sign kernel modules, plus VMWare installed a bunch of stuff. Could it be "the culprit" ?

Don't judge me for using VMWare on Linux, I came from Windows recently haha
Comment 9 Matthias Klumpp 2025-10-27 20:29:36 UTC
@apol
> I would expect these to be distributed with AppStream::Component::KindDriver.

Not necessarily - the drivers are in the kernel (ideally), the firmware is external. And especially on OSes like Debian where non-free firmware is split out, having separate firmware packages makes sense (but it also makes sense in general, to keep the initramfs small).
Comment 10 Matthias Klumpp 2025-10-27 20:32:02 UTC
@contact@hexteckgate.ovh

It is possible that VMWare provides a driver component, but I'd be surprised if it provided metadata for a firmware component - so I think it's unrelated.

Nothing wrong with VMWare, at least in the past, but nowadays it's unbelievably expensive, and having to install out-of-tree kernel modules is always a pain.
Comment 11 Aleix Pol 2025-10-31 00:42:29 UTC
Git commit 3246d814829331e49516cdaa1d6eae9cca85d840 by Aleix Pol Gonzalez, on behalf of Aleix Pol.
Committed on 31/10/2025 at 00:42.
Pushed by apol into branch 'master'.

pk: Some distros distribute firmwares

Allow for the components to be included and looked up under drivers.

M  +15   -7    libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp
M  +0    -2    libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp

https://invent.kde.org/plasma/discover/-/commit/3246d814829331e49516cdaa1d6eae9cca85d840
Comment 12 Aleix Pol 2025-10-31 00:44:20 UTC
Git commit 7b37cecb0a373658274f5ad1471f0864b9d6d503 by Aleix Pol.
Committed on 31/10/2025 at 00:44.
Pushed by apol into branch 'Plasma/6.5'.

pk: Some distros distribute firmwares

Allow for the components to be included and looked up under drivers.
(cherry picked from commit 3246d814829331e49516cdaa1d6eae9cca85d840)

M  +15   -7    libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp
M  +0    -2    libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp

https://invent.kde.org/plasma/discover/-/commit/7b37cecb0a373658274f5ad1471f0864b9d6d503