[tex-live] omfonts one-byte heap overflow

Johannes Hielscher jhielscher at posteo.de
Wed Sep 26 22:52:06 CEST 2018


So finally, someone else has run into (presumably) the same problem as
me, as I reported in the tlbuild list on 2018-04-08:
https://tug.org/pipermail/tlbuild/2018q2/004207.html

Back then, I didn't find a solution there, so I cannot give some clever
advice here )-:

(Even worse, my tests did succeed when called explicitly from the shell,
instead of by the test suite.)

Am Fri, 21 Sep 2018 14:42:37 -0400
schrieb Tom Callaway <tcallawa at redhat.com>:

> I noticed that the omegafonts test suite from tl2018 was failing in
> Fedora rawhide, despite no code changes since the last build.
> 
> ============================================================================
> Testsuite summary for Web2C 2018
> ============================================================================
> # TOTAL: 16
> # PASS:  15
> # SKIP:  0
> # XFAIL: 0
> # FAIL:  1
> # XPASS: 0
> # ERROR: 0
> ============================================================================
> See omegafonts/test-suite.log
> Please report to tex-k at tug.org
> ============================================================================
> 
> This only seemed to happen on i686 and armv7hl builds. I reproduced it
> locally in an i686 chroot. The test-suite.log says:
> 
> FAIL: check
> ===========
> 
> #! /bin/sh -vx
> # $Id: check.test 45809 2017-11-15 00:36:56Z karl $
> # Copyright 2017 Karl Berry <tex-live at tug.org>
> # Copyright 2014, 2015 Peter Breitenlohner <tex-live at tug.org>
> # You may freely use, modify and/or distribute this file.
> 
> test -d tests || mkdir -p tests
> + test -d tests
> 
> TEXMFCNF=$srcdir/../../kpathsea
> + TEXMFCNF=../../../../texk/web2c/omegafonts/../../kpathsea
> OFMFONTS=".;./tests"
> + OFMFONTS='.;./tests'
> export TEXMFCNF OFMFONTS
> + export TEXMFCNF OFMFONTS
> 
> echo && echo "*** ofm2opl check xcheck"
> + echo
> 
> + echo '*** ofm2opl check xcheck'
> *** ofm2opl check xcheck
> ./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 1
> + ./omfonts -ofm2opl ../../../../texk/web2c/omegafonts/tests/check
> tests/xcheck
> Bad OFM file: Ligature/kern step 2 skips too far;
> I made it stop.
> Bad OFM file: Kern index too large.
> malloc(): invalid next size (unsorted)
> ../../../../texk/web2c/omegafonts/check.test: line 14:  9396 Aborted
>             (core dumped) ./omfonts -ofm2opl $srcdir/tests/check
> tests/xcheck
> + exit 1
> FAIL check.test (exit status: 1)
> 
> *****
> 
> The gdb backtrace looks like this:
> 
> Program received signal SIGABRT, Aborted.
> 0xf7fd2079 in __kernel_vsyscall ()
> (gdb) bt
> #0  0xf7fd2079 in __kernel_vsyscall ()
> #1  0xf7e29b36 in __libc_signal_restore_set (set=0xffffcdcc) at
> ../sysdeps/unix/sysv/linux/internal-signals.h:84
> #2  __GI_raise (sig=6) at ../sysdeps/unix/sysv/linux/raise.c:48
> #3  0xf7e13374 in __GI_abort () at abort.c:79
> #4  0xf7e6e37c in __libc_message (action=<optimized out>,
> fmt=<optimized
> out>) at ../sysdeps/posix/libc_fatal.c:181  
> #5  0xf7e753bf in malloc_printerr (str=str at entry=0xf7f52850 "malloc():
> invalid next size (unsorted)") at malloc.c:5354
> #6  0xf7e7802b in _int_malloc (av=av at entry=0xf7f9f7a0 <main_arena>,
> bytes=bytes at entry=4) at malloc.c:3727
> #7  0xf7e797dd in __GI___libc_malloc (bytes=4) at malloc.c:3041
> #8  0xf7fbd9e8 in xmalloc (size=4)
> at ../../../texk/kpathsea/xmalloc.c:25 #9  0x56559e55 in
> retrieve_exten_table (table=0x565d5f20 "")
> at ../../../../texk/web2c/omegafonts/char_routines.c:837 #10
> 0x56562ce7 in ofm_read_rest ()
> at ../../../../texk/web2c/omegafonts/parse_ofm.c:371 #11 parse_ofm
> (read_ovf=0) at ../../../../texk/web2c/omegafonts/parse_ofm.c:99
> #12 0x565579e1 in main (argc=<optimized out>, argv=<optimized out>) at
> ../../../../texk/web2c/omegafonts/omfonts.c:286
> 
> I thought it might be a malloc bug in the latest glibc, but the glibc
> maintainers advised me to run valgrind. When I did that, it showed:
> 
> =20225== Memcheck, a memory error detector
> ==20225== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et
> al. ==20225== Using Valgrind-3.14.0.GIT and LibVEX; rerun with -h for
> copyright info
> ==20225== Command: .libs/omfonts -ofm2opl
> ../../../../texk/web2c/omegafonts/tests/check tests/xcheck
> ==20225==
> ==20225== Invalid write of size 1
> ==20225==    at 0x10CA60: adjust_labels (char_routines.c:695)
> ==20225==    by 0x115CC1: ofm_read_rest (parse_ofm.c:368)
> ==20225==    by 0x115CC1: parse_ofm (parse_ofm.c:99)
> ==20225==    by 0x10A9E0: main (omfonts.c:286)
> ==20225==  Address 0x4b13ecc is 0 bytes after a block of size 12
> alloc'd ==20225==    at 0x4837717: calloc (vg_replace_malloc.c:752)
> ==20225==    by 0x48555E4: xcalloc (xcalloc.c:25)
> ==20225==    by 0x1137C9: retrieve_ligkern_table
> (ligkern_routines.c:652) ==20225==    by 0x115CB5: ofm_read_rest
> (parse_ofm.c:367) ==20225==    by 0x115CB5: parse_ofm (parse_ofm.c:99)
> ==20225==    by 0x10A9E0: main (omfonts.c:286)
> ==20225==
> 
> Turns out that the latest glibc code (as found in the latest revisions
> of Fedora) is much better at catching malloc heap corruption. I
> thought at first it was a glibc issue, but the Fedora glibc
> maintainers helped me to confirm that it was not.
> 
> It looks like there is a one-byte heap overflow, maybe in the
> FOR_ALL_CHARACTERS macro in char_routines.c?
> 
> I'm learning a lot as I go on this one, but I think I've gone as far
> as I can. Any and all help in fixing this would be greatly
> appreciated.
> 
> Thanks in advance,
> 
> ~tom
> 


More information about the tex-live mailing list