[tex-live] omfonts one-byte heap overflow
Tom Kacvinsky
tom.kacvinsky at suse.com
Thu Sep 27 00:55:45 CEST 2018
Tom,
Which compiler are you using? I have seen crashes due to optimizer bugs,
but that was years ago. Just so I am on the right page with respect to
the build environment you have.
The other Tom
> On Sep 26, 2018, at 18:20:27, Tom Kacvinsky <tom.kacvinsky at suse.com> wrote:
>
> I'll poke at this in my free time. Would be interesting to see if it also happens
> on openSUSE/SUSE distributions (though 32-bit development support was dropped from
> SLES 12).
>
>> On Sep 26, 2018, at 16:52:06, Johannes Hielscher <jhielscher at posteo.de> wrote:
>>
>> 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