Public bug reported:
Affects: fontconfig (Ubuntu 26.04 LTS)
Package Version: libfontconfig1 2.17.1-3ubuntu1
Architecture: amd64
Severity: High (Causes unhandled crash in kscreenlocker_greet resulting in
emergency lock / local DoS)
=== SUMMARY ===
Fontconfig crashes with a General Protection Fault (Signal 11 SIGSEGV) inside
libfontconfig.so.1.16.1 when performing font fallback character matching via
FcCharSetHasChar().
When Qt/QML attempts to resolve fallback fonts for glyph U+25CF (Black
Circle '●', standard password masking bullet), Fontconfig iterates
through indexed system fonts. If an indexed font contains compressed
tables or unexpected table boundaries (specifically KaTeX_AMS-
Regular.woff), FcCharSetHasChar() reads an invalid memory offset,
setting register %rax to 0xfefefefefefefefe and attempting an invalid
read at 0x10(%rax).
=== ENVIRONMENT ===
- OS: Ubuntu 26.04 (Kubuntu)
- Kernel: 7.0.0-34-generic x86_64
- libfontconfig1: 2.17.1-3ubuntu1
- libqt6gui6: 6.10.2+dfsg-7
- Offending font file: /usr/share/fonts/truetype/katex/KaTeX_AMS-Regular.woff
(provided by fonts-katex 0.16.10+~cs6.1.0-5ubuntu1)
=== REPRODUCTION STEPS ===
1. Install fonts-katex (which places .woff files into
/usr/share/fonts/truetype/katex/).
2. Rebuild font cache: `fc-cache -f`
3. Execute font matching for Unicode character U+25CF:
$ fc-match ":charset=25cf"
(Outputs: KaTeX_AMS-Regular.woff: "Noto Sans" "<unknown style>")
4. Trigger fallback query in an application (e.g. kscreenlocker_greet --testing
or any Qt Quick TextInput in password mode).
=== EXPECTED BEHAVIOR ===
Fontconfig should validate font table bounds, gracefully reject or skip
incompatible/compressed WOFF tables, and continue traversal to valid native
TrueType/OpenType fonts (such as DejaVuSans.ttf).
=== ACTUAL BEHAVIOR ===
Process terminates immediately with SIGSEGV (GPF, error:0 in kernel logs). When
this occurs inside kscreenlocker_greet, KWin marks the greeter as unstable
after retry exhaustion and places the screen locker into unrecoverable
emergency mode.
=== GDB REGISTER & DISASSEMBLY DUMP ===
Faulting instruction:
0x000073f197cdc4fc: add 0x10(%rax), %r8
Register state at crash:
rax: 0xfefefefefefefefe (-72340172838076674)
rbx: 0x0
rcx: 0xfffffff8
rdx: 0x25
rsi: 0x0
rdi: 0x25
r8: 0xfefefefefefefefe
r11: 0x25cf (Target Unicode character: U+25CF)
rip: 0x73f197cdc4fc
=== STACK TRACE ===
#0 0x000073f197cdc4fc in ?? () from
/usr/lib/x86_64-linux-gnu/libfontconfig.so.1
#1 0x000073f197cdcf79 in FcCharSetHasChar () from
/usr/lib/x86_64-linux-gnu/libfontconfig.so.1
#2 0x000073f19a21065c in
QFontEngineMultiFontConfig::shouldLoadFontEngineForCharacter(int, unsigned int)
const () from /usr/lib/x86_64-linux-gnu/libQt6Gui.so.6
#3 0x000073f19a046323 in QFontEngineMulti::stringToCMap(QChar const*, int,
QGlyphLayout*, int*, QFlags<QFontEngine::ShaperFlag>) const () from
/usr/lib/x86_64-linux-gnu/libQt6Gui.so.6
#4 0x000073f19a0b20bd in QTextEngine::shapeText(int) const () from
/usr/lib/x86_64-linux-gnu/libQt6Gui.so.6
#5 0x000073f19a0dd5de in QTextLine::layout_helper(int) () from
/usr/lib/x86_64-linux-gnu/libQt6Gui.so.6
#6 0x000073f19b275775 in QQuickTextPrivate::setLineGeometry(...) from
/usr/lib/x86_64-linux-gnu/libQt6Quick.so.6
#7 0x000073f19b27664b in QQuickTextPrivate::setupTextLayout(...) from
/usr/lib/x86_64-linux-gnu/libQt6Quick.so.6
#8 0x000073f19b278b71 in QQuickTextPrivate::updateSize() () from
/usr/lib/x86_64-linux-gnu/libQt6Quick.so.6
#9 0x000073f19b279811 in QQuickTextPrivate::updateLayout() () from
/usr/lib/x86_64-linux-gnu/libQt6Quick.so.6
#10 0x000073f19072c347 in QQuickLabel::componentComplete() () from
/usr/lib/x86_64-linux-gnu/libQt6QuickTemplates2.so.6
=== WORKAROUND / VERIFICATION ===
Purging fonts-katex and running `fc-cache -r -v` immediately resolves the
crash; character 0x25cf cleanly falls back to DejaVuSans.ttf.
** Affects: fontconfig (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2168514
Title:
SIGSEGV in FcCharSetHasChar() at offset 0xc4fc during character
fallback traversal (dereference of 0xfefefefefefefefe)
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/fontconfig/+bug/2168514/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs