Bug 2178625

Summary: Qt V4 JIT engine generates bad JIT code on ARM64 (and potentially all arches)
Product: Red Hat Enterprise Linux 8 Reporter: Neal Gompa <ngompa13>
Component: qt5-qtdeclarativeAssignee: Jan Grulich <jgrulich>
Status: CLOSED ERRATA QA Contact: Tomas Pelka <tpelka>
Severity: high Docs Contact:
Priority: unspecified    
Version: CentOS StreamCC: bstinson, desktop-qa-list, extras-qa, jgrulich, jreznik, jwboyer, kde-sig, marcan, ngompa13, rdieter, than, tpelka
Target Milestone: rcKeywords: Triaged
Target Release: ---   
Hardware: aarch64   
OS: Linux   
Whiteboard:
Fixed In Version: qt5-qtdeclarative-5.15.3-2.el8 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: 2178624 Environment:
Last Closed: 2023-11-14 15:27:02 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Neal Gompa 2023-03-15 13:18:51 UTC
+++ This bug was initially created as a clone of Bug #2178624 +++

Description of problem:

Qt's V4 JIT engine generates bad JIT code that corrupts JS stack slots, causing random garbage collector crashes later on. On a vanilla KDE Plasma setup, this can cause plasmashell to sometimes or consistently crash, depending on the alignment of the stars (sometimes sessions are completely unusable). See below for a consistent repro.

Version-Release number of selected component (if applicable): 

5.15.3-1.el8

How reproducible:

Randomly by default, 100% with QV4_MM_AGGRESSIVE_GC=1, never with QV4_FORCE_INTERPRETER=1.

Steps to Reproduce:
1. Start a KDE Plasma session
2. killall plasmashell
3. QV4_MM_AGGRESSIVE_GC=1 plasmashell

Actual results:

plasmashell instantly segfaults

Expected results:

plasmashell does not segfault

Additional info:

Example of the bad JIT code here:

https://social.treehouse.systems/@marcan/110015722134175810

The issue is a missing accumulator save/restore around a call to PushCallContext.

This is generic code, so this is actually broken on *all architectures* in principle, it's just that ARM64 got unlucky with the register clobbering and value encoding lottery and ended up with actual crashes.

Upstream report: https://bugreports.qt.io/browse/QTBUG-111935

Upstream fix: https://codereview.qt-project.org/c/qt/qtdeclarative/+/466808

Comment 5 errata-xmlrpc 2023-11-14 15:27:02 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (qt5-qtdeclarative bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2023:6934