Bug 457738

Summary: Hangs on "Requesting passphrase" step of generating new key
Product: [Applications] kgpg Reporter: gabe <cheery.idea2032>
Component: generalAssignee: Rolf Eike Beer <kde>
Status: RESOLVED FIXED    
Severity: crash CC: bugs-kde, jrtonmac, kitt997
Priority: NOR Keywords: drkonqi
Version First Reported In: 22.04.3   
Target Milestone: ---   
Platform: openSUSE   
OS: Linux   
Latest Commit: Version Fixed/Implemented In: 22.12.1
Sentry Crash Report:

Description gabe 2022-08-10 21:51:43 UTC
Application: kgpg (22.04.3)

Qt Version: 5.15.5
Frameworks Version: 5.96.0
Operating System: Linux 5.18.15-1-default x86_64
Windowing System: X11
Distribution: "openSUSE Tumbleweed"
DrKonqi: 5.25.4 [KCrashBackend]

-- Information about the crash:
I am unable to generate a new key, as the application hangs on the "Requesting passphrase" step of creation (as seen in the desktop notification)

Steps to reproduce:
* Launch kgpg (either through command line or KDE desktop)
* Keys > New Keypair     * Follow all prompts and enter options (non expert)      * Enter passphrase, hit next       * Notification continues to spin, no progress is made

The crash can be reproduced every time.

-- Backtrace:
Application: KGpg (kgpg), signal: Segmentation fault

[KCrash Handler]
#4  0x0000000000000040 in ?? ()
#5  0x00007f3351356186 in QMainWindowLayout::statusBar (this=<optimized out>) at widgets/qmainwindowlayout.cpp:2363
#6  0x00007f3351350e89 in QMainWindow::statusBar (this=this@entry=0x555d6fb5e120) at widgets/qmainwindow.cpp:586
#7  0x0000555d6f738a42 in KeysManager::changeMessage (keep=false, msg=..., this=0x555d6fb5e120) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/keysmanager.cpp:558
#8  KeysManager::slotGenerateKeyDone (this=0x555d6fb5e120, job=0x555d700319e0) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/keysmanager.cpp:568
#9  0x00007f3350681e6f in QtPrivate::QSlotObjectBase::call (a=0x7ffd3a56d190, r=0x555d6fb5e120, this=0x555d6fdea210) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#10 doActivate<false> (sender=0x555d700319e0, signal_index=6, argv=0x7ffd3a56d190) at kernel/qobject.cpp:3886
#11 0x00007f335067b22f in QMetaObject::activate (sender=sender@entry=0x555d700319e0, m=<optimized out>, local_signal_index=local_signal_index@entry=3, argv=argv@entry=0x7ffd3a56d190) at kernel/qobject.cpp:3946
#12 0x00007f3351a51615 in KJob::result (this=this@entry=0x555d700319e0, _t1=<optimized out>, _t1@entry=0x555d700319e0, _t2=...) at /usr/src/debug/kcoreaddons-5.96.0-1.1.x86_64/build/src/lib/KF5CoreAddons_autogen/include/moc_kjob.cpp:633
#13 0x00007f3351a557cb in KJob::finishJob (this=0x555d700319e0, emitResult=<optimized out>) at /usr/src/debug/kcoreaddons-5.96.0-1.1.x86_64/src/lib/jobs/kjob.cpp:98
#14 0x00007f3350681e6f in QtPrivate::QSlotObjectBase::call (a=0x7ffd3a56d2c0, r=0x555d700319e0, this=0x555d700355a0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#15 doActivate<false> (sender=0x555d6fe004b0, signal_index=3, argv=0x7ffd3a56d2c0) at kernel/qobject.cpp:3886
#16 0x00007f335067b22f in QMetaObject::activate (sender=<optimized out>, m=m@entry=0x555d6f7b2e20 <KGpgTransaction::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffd3a56d2c0) at kernel/qobject.cpp:3946
#17 0x0000555d6f712b21 in KGpgTransaction::done (_t1=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/build/kgpg_lib_autogen/HHLLV3HBLL/moc_kgpgtransaction.cpp:159
#18 KGpgTransactionPrivate::processDone (this=0x555d6ffe59d0) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/transactions/kgpgtransactionprivate.cpp:308
#19 0x00007f3350681e6f in QtPrivate::QSlotObjectBase::call (a=0x7ffd3a56d380, r=0x555d6ffe59d0, this=0x555d6ffe6590) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#20 doActivate<false> (sender=0x555d7002d990, signal_index=20, argv=0x7ffd3a56d380) at kernel/qobject.cpp:3886
#21 0x00007f3350681e6f in QtPrivate::QSlotObjectBase::call (a=0x7ffd3a56d4a0, r=0x555d7002d990, this=0x555d70035870) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#22 doActivate<false> (sender=0x555d7002d990, signal_index=11, argv=0x7ffd3a56d4a0) at kernel/qobject.cpp:3886
#23 0x00007f335067b22f in QMetaObject::activate (sender=sender@entry=0x555d7002d990, m=m@entry=0x7f3350920480, local_signal_index=local_signal_index@entry=2, argv=argv@entry=0x7ffd3a56d4a0) at kernel/qobject.cpp:3946
#24 0x00007f33505b6758 in QProcess::finished (this=this@entry=0x555d7002d990, _t1=<optimized out>, _t2=<optimized out>) at .moc/moc_qprocess.cpp:339
#25 0x00007f33505bc1a3 in QProcessPrivate::_q_processDied (this=this@entry=0x7f334400e270) at io/qprocess.cpp:1184
#26 0x00007f33505c0ac5 in QProcessPrivate::waitForFinished (this=0x7f334400e270, msecs=30000) at io/qprocess_unix.cpp:878
#27 0x00007f33505b7db5 in QProcess::waitForFinished (this=this@entry=0x555d7002d990, msecs=<optimized out>, msecs@entry=30000) at io/qprocess.cpp:1930
#28 0x00007f33505b86ed in QProcess::~QProcess (this=this@entry=0x555d7002d990, __in_chrg=<optimized out>) at io/qprocess.cpp:1266
#29 0x00007f3351a569ac in KProcess::~KProcess (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kcoreaddons-5.96.0-1.1.x86_64/src/lib/io/kprocess.cpp:41
#30 0x0000555d6f7174c2 in KLineBufferedProcess::~KLineBufferedProcess (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/klinebufferedprocess.cpp:18
#31 GPGProc::~GPGProc (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/gpgproc.cpp:157
#32 GPGProc::~GPGProc (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/gpgproc.cpp:157
#33 KGpgTransactionPrivate::~KGpgTransactionPrivate (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/transactions/kgpgtransactionprivate.cpp:47
#34 0x0000555d6f71eed4 in KGpgTransactionPrivate::~KGpgTransactionPrivate (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/transactions/kgpgtransactionprivate.cpp:48
#35 KGpgTransaction::~KGpgTransaction (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/transactions/kgpgtransaction.cpp:33
#36 KGpgGenerateKey::~KGpgGenerateKey (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/transactions/kgpggeneratekey.cpp:42
#37 KGpgGenerateKey::~KGpgGenerateKey (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/transactions/kgpggeneratekey.cpp:42
#38 0x00007f335067432e in QObjectPrivate::deleteChildren (this=this@entry=0x555d6fb0a220) at kernel/qobject.cpp:2104
#39 0x00007f3351238666 in QWidget::~QWidget (this=0x555d6fb5e120, __in_chrg=<optimized out>) at kernel/qwidget.cpp:1522
#40 0x0000555d6f7355d3 in KeysManager::~KeysManager (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/keysmanager.cpp:483
#41 0x0000555d6f6e0208 in KeysManager::~KeysManager (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/keysmanager.cpp:481
#42 KGpgApp::~KGpgApp (this=<optimized out>, this=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/kgpg.cpp:41
#43 0x0000555d6f6df2fb in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/kgpg-22.04.3-1.1.x86_64/main.cpp:75
[Inferior 1 (process 10321) detached]

Reported using DrKonqi
Comment 1 Lisa Rushworth 2022-10-07 21:44:19 UTC
We experience the same issue in Fedora 36
Comment 2 Rolf Eike Beer 2022-11-04 09:31:08 UTC
*** Bug 461373 has been marked as a duplicate of this bug. ***
Comment 3 Rolf Eike Beer 2022-11-04 11:01:19 UTC
It can be fixed when closing the write channel of the transaction after the %commit. This works for GnuPG 2.3, but I can't test it with 2.2 at the moment because of an unrelated library breakage by my distro.
Comment 4 Rolf Eike Beer 2022-12-14 14:56:28 UTC
*** Bug 451569 has been marked as a duplicate of this bug. ***
Comment 5 Rolf Eike Beer 2022-12-14 16:32:47 UTC
Git commit c11dadfb46b63563c70e1d33834a549c1de077e7 by Rolf Eike Beer.
Committed on 14/12/2022 at 16:27.
Pushed by dakon into branch 'master'.

close write channel after sending new password when generating new key

This fixes a hang with GnuPG 2.3
Related: bug 451569
FIXED-IN: 22.12.1

M  +6    -0    tests/CMakeLists.txt
A  +74   -0    tests/kgpggeneratekey.cpp     [License: GPL(v2.0+)]
A  +23   -0    tests/kgpggeneratekey.h     [License: GPL(v2.0+)]
A  +20   -0    tests/kgpggeneratekeytesttransaction.cpp     [License: GPL(v2.0+)]
A  +28   -0    tests/kgpggeneratekeytesttransaction.h     [License: GPL(v2.0+)]
M  +3    -2    transactions/kgpggeneratekey.cpp
M  +2    -2    transactions/kgpggeneratekey.h
M  +4    -2    transactions/kgpgtransaction.h

https://invent.kde.org/utilities/kgpg/commit/c11dadfb46b63563c70e1d33834a549c1de077e7
Comment 6 Rolf Eike Beer 2022-12-14 16:33:58 UTC
Git commit 9fc74c0d1d3db89998d9e995dfad2500d6e857de by Rolf Eike Beer.
Committed on 14/12/2022 at 16:33.
Pushed by dakon into branch 'release/22.12'.

close write channel after sending new password when generating new key

This fixes a hang with GnuPG 2.3
FIXED-IN: 22.12.1
(cherry picked from commit c11dadfb46b63563c70e1d33834a549c1de077e7)

M  +6    -0    tests/CMakeLists.txt
A  +74   -0    tests/kgpggeneratekey.cpp     [License: GPL(v2.0+)]
A  +23   -0    tests/kgpggeneratekey.h     [License: GPL(v2.0+)]
A  +20   -0    tests/kgpggeneratekeytesttransaction.cpp     [License: GPL(v2.0+)]
A  +28   -0    tests/kgpggeneratekeytesttransaction.h     [License: GPL(v2.0+)]
M  +3    -2    transactions/kgpggeneratekey.cpp
M  +2    -2    transactions/kgpggeneratekey.h
M  +4    -2    transactions/kgpgtransaction.h

https://invent.kde.org/utilities/kgpg/commit/9fc74c0d1d3db89998d9e995dfad2500d6e857de