<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://sourceware.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="4.4+"
          urlbase="http://sourceware.org/bugzilla/"
          
          maintainer="overseers@sourceware.org"
>

    <bug>
          <bug_id>13506</bug_id>
          
          <creation_ts>2011-12-15 20:44:00 +0000</creation_ts>
          <short_desc>tzfile.c heap overrun/corruption</short_desc>
          <delta_ts>2011-12-21 23:58:14 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>glibc</product>
          <component>libc</component>
          <version>2.14</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Paul Eggert">eggert</reporter>
          <assigned_to name="Ulrich Drepper">drepper.fsp</assigned_to>
          <cc>allan</cc>
    
    <cc>law</cc>
    
    <cc>polacek</cc>
    
    <cc>rguenth</cc>
    
    <cc>toolchain</cc>
    
    <cc>vapier</cc>
          <cf_gcchost></cf_gcchost>
          <cf_gcctarget></cf_gcctarget>
          <cf_gccbuild></cf_gccbuild>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>52165</commentid>
    <comment_count>0</comment_count>
      <attachid>6113</attachid>
    <who name="Paul Eggert">eggert</who>
    <bug_when>2011-12-15 20:44:55 +0000</bug_when>
    <thetext>Created attachment 6113
Jeff Law work-in-progress patch

In &lt;http://cygwin.com/ml/libc-alpha/2011-12/msg00037.html&gt;
Jeff Law writes:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

As y&apos;all may be aware, there&apos;s an integer overflow which can be used
to trigger a heap overrun/corruption in time/tzfile.c

http://dividead.wordpress.com/2009/06/01/glibc-timezone-integer-overflow/


http://rcvalle.com/post/14169476482/exploiting-glibc-tzfile-read-integer-overflow-to


I&apos;m not terribly familiar with the code in question, but ISTM we have
to verify the intermediate computations to determine the amount of
memory to malloc don&apos;t overflow/wrap.

Here&apos;s a WIP.  It catches the cases I&apos;ve been made aware of
(overflowing total_size to 0 by creating a tzfile with a very large
tzh_charcnt).  But there may be further overflows I&apos;ve missed.

Obviously it&apos;s not commented and it&apos;s unclear to me if we also want to
put in some kind of sanity checks on total_size to prevent it from
trying to malloc unreasoanble amounts of memory.

Your feedback would be greatly appreciated.




-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJO6k6gAAoJEBRtltQi2kC7ASQH/0UmQm0wqk3NRmlsVr5M1r3f
fUelY55y8OQssaFCLDZ9LX1vybam9j85gmvGtRJUU4MJ3134hn/v73k8TYCd3rHJ
/QIQY10zPBHkmEwp8G56+3l9QRl418C+ajTq0W4NAzM1rIHtPUgrqZ3AkNJgFVYU
OAF+2afFDGE5vJ3HR7LSL62tuxjDf7m66r4tHHkbhkSSZgkyW/YxfFUPDupZnlz8
Wl87JU/RWHdMJ+RR+fB1ofgFKrNZnGpIsD3sAc07KWTp63S358DSRpZ1IaF2o3vh
N93z28eCQQKIVciOKgAE5q/qYr1KmcyU/6M4xPk+Pqv5YFdKOz8uNiw5NQu2rv0=
=RKgA
-----END PGP SIGNATURE-----</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52166</commentid>
    <comment_count>1</comment_count>
      <attachid>6114</attachid>
    <who name="Paul Eggert">eggert</who>
    <bug_when>2011-12-15 21:00:49 +0000</bug_when>
    <thetext>Created attachment 6114
catch multiplication as well as addition overflows

Jeff Law&apos;s work-in-progress patch misses some problematic overflows.  This is
because the integer multiplications may overflow too.  Attached is an
untested patch that catches the problematic overflows that I found
by inspection.  This patch does not attempt to catch all overflows, only
those that might corrupt memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52205</commentid>
    <comment_count>2</comment_count>
    <who name="Ulrich Drepper">drepper.fsp</who>
    <bug_when>2011-12-18 01:19:35 +0000</bug_when>
    <thetext>I added a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52223</commentid>
    <comment_count>3</comment_count>
    <who name="Mike Frysinger">vapier</who>
    <bug_when>2011-12-19 05:35:35 +0000</bug_when>
    <thetext>http://sourceware.org/git/?p=glibc.git;a=commit;h=97ac2654b2d831acaa18a2b018b0736245903fd2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52224</commentid>
    <comment_count>4</comment_count>
    <who name="Allan McRae">allan</who>
    <bug_when>2011-12-19 05:50:57 +0000</bug_when>
    <thetext>Note that there is a typo in that patch. The &quot;tzspec == 0&quot;  should be &quot;tzspec_len == 0&quot;.  I sent the trivial patch to the mailing list (awaiting moderation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52225</commentid>
    <comment_count>5</comment_count>
    <who name="">law</who>
    <bug_when>2011-12-19 07:57:44 +0000</bug_when>
    <thetext>Also looks like s390 won&apos;t build because SIZE_MAX is not defined.  Guessing stdint.h needs to be included in tzfile.c</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52296</commentid>
    <comment_count>6</comment_count>
    <who name="Ulrich Drepper">drepper.fsp</who>
    <bug_when>2011-12-21 23:58:14 +0000</bug_when>
    <thetext>(In reply to comment #5)
&gt; Also looks like s390 won&apos;t build because SIZE_MAX is not defined.  Guessing
&gt; stdint.h needs to be included in tzfile.c

The correct change is to make the s390 header look like the x86-64 headers.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6113</attachid>
            <date>2011-12-15 20:44:00 +0000</date>
            <delta_ts>2011-12-15 21:00:49 +0000</delta_ts>
            <desc>Jeff Law work-in-progress patch</desc>
            <filename>glibc-rh767696.patch</filename>
            <type>text/plain</type>
            <size>1751</size>
            <attacher name="Paul Eggert">eggert</attacher>
            
              <data encoding="base64">ZGlmZiAtcnVwIGEvdGltZS90emZpbGUuYyBiL3RpbWUvdHpmaWxlLmMKLS0tIGEvdGltZS90emZp
bGUuYwkyMDExLTEwLTE5IDA1OjAzOjMxLjAwMDAwMDAwMCAtMDYwMAorKysgYi90aW1lL3R6Zmls
ZS5jCTIwMTEtMTItMTUgMTE6NDk6MjYuNzYzMTIxNDU5IC0wNzAwCkBAIC0xMDcsNyArMTA3LDcg
QEAgX190emZpbGVfcmVhZCAoY29uc3QgY2hhciAqZmlsZSwgc2l6ZV90CiAgIHNpemVfdCBudW1f
aXNzdGQsIG51bV9pc2dtdDsKICAgcmVnaXN0ZXIgRklMRSAqZjsKICAgc3RydWN0IHR6aGVhZCB0
emhlYWQ7Ci0gIHNpemVfdCBjaGFyczsKKyAgc2l6ZV90IGNoYXJzLCB0bXA7CiAgIHJlZ2lzdGVy
IHNpemVfdCBpOwogICBzaXplX3QgdG90YWxfc2l6ZTsKICAgc2l6ZV90IHR5cGVzX2lkeDsKQEAg
LTIzOCwxMSArMjM4LDI1IEBAIF9fdHpmaWxlX3JlYWQgKGNvbnN0IGNoYXIgKmZpbGUsIHNpemVf
dAogICB0b3RhbF9zaXplID0gKCh0b3RhbF9zaXplICsgX19hbGlnbm9mX18gKHN0cnVjdCB0dGlu
Zm8pIC0gMSkKIAkJJiB+KF9fYWxpZ25vZl9fIChzdHJ1Y3QgdHRpbmZvKSAtIDEpKTsKICAgdHlw
ZXNfaWR4ID0gdG90YWxfc2l6ZTsKLSAgdG90YWxfc2l6ZSArPSBudW1fdHlwZXMgKiBzaXplb2Yg
KHN0cnVjdCB0dGluZm8pICsgY2hhcnM7CisKKyAgdG1wID0gbnVtX3R5cGVzICogc2l6ZW9mIChz
dHJ1Y3QgdHRpbmZvKTsKKyAgaWYgKHRvdGFsX3NpemUgKyB0bXAgPCB0bXApCisgICAgZ290byBs
b3NlOworICB0b3RhbF9zaXplICs9IHRtcDsKKworICBpZiAodG90YWxfc2l6ZSArIGNoYXJzIDwg
Y2hhcnMpCisgICAgZ290byBsb3NlOworICB0b3RhbF9zaXplICs9IGNoYXJzOworCiAgIHRvdGFs
X3NpemUgPSAoKHRvdGFsX3NpemUgKyBfX2FsaWdub2ZfXyAoc3RydWN0IGxlYXApIC0gMSkKIAkJ
JiB+KF9fYWxpZ25vZl9fIChzdHJ1Y3QgbGVhcCkgLSAxKSk7CiAgIGxlYXBzX2lkeCA9IHRvdGFs
X3NpemU7Ci0gIHRvdGFsX3NpemUgKz0gbnVtX2xlYXBzICogc2l6ZW9mIChzdHJ1Y3QgbGVhcCk7
CisKKyAgdG1wID0gbnVtX2xlYXBzICogc2l6ZW9mIChzdHJ1Y3QgbGVhcCk7CisgIGlmICh0b3Rh
bF9zaXplICsgdG1wIDwgdG1wKQorICAgIGdvdG8gbG9zZTsKKyAgdG90YWxfc2l6ZSArPSB0bXA7
CisKICAgdHpzcGVjX2xlbiA9IChzaXplb2YgKHRpbWVfdCkgPT0gOCAmJiB0cmFuc193aWR0aCA9
PSA4CiAJCT8gc3Quc3Rfc2l6ZSAtIChmdGVsbG8gKGYpCiAJCQkJKyBudW1fdHJhbnNpdGlvbnMg
KiAoOCArIDEpCkBAIC0yNTQsNyArMjY4LDE1IEBAIF9fdHpmaWxlX3JlYWQgKGNvbnN0IGNoYXIg
KmZpbGUsIHNpemVfdAogCiAgIC8qIEFsbG9jYXRlIGVub3VnaCBtZW1vcnkgaW5jbHVkaW5nIHRo
ZSBleHRyYSBibG9jayByZXF1ZXN0ZWQgYnkgdGhlCiAgICAgIGNhbGxlci4gICovCi0gIHRyYW5z
aXRpb25zID0gKHRpbWVfdCAqKSBtYWxsb2MgKHRvdGFsX3NpemUgKyB0enNwZWNfbGVuICsgZXh0
cmEpOworICBpZiAodG90YWxfc2l6ZSArIHR6c3BlY19sZW4gPCB0b3RhbF9zaXplKQorICAgIGdv
dG8gbG9zZTsKKyAgdG90YWxfc2l6ZSArPSB0enNwZWNfbGVuOworCisgIGlmICh0b3RhbF9zaXpl
ICsgZXh0cmEgPCBleHRyYSkKKyAgICBnb3RvIGxvc2U7CisgIHRvdGFsX3NpemUgKz0gZXh0cmE7
CisKKyAgdHJhbnNpdGlvbnMgPSAodGltZV90ICopIG1hbGxvYyAodG90YWxfc2l6ZSk7CiAgIGlm
ICh0cmFuc2l0aW9ucyA9PSBOVUxMKQogICAgIGdvdG8gbG9zZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6114</attachid>
            <date>2011-12-15 21:00:00 +0000</date>
            <delta_ts>2011-12-15 21:00:49 +0000</delta_ts>
            <desc>catch multiplication as well as addition overflows</desc>
            <filename>tzfile.c.diff</filename>
            <type>text/plain</type>
            <size>1718</size>
            <attacher name="Paul Eggert">eggert</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3RpbWUvdHpmaWxlLmMgYi90aW1lL3R6ZmlsZS5jCmluZGV4IDE0NGUyMGIu
LjUxNzcxNDggMTAwNjQ0Ci0tLSBhL3RpbWUvdHpmaWxlLmMKKysrIGIvdGltZS90emZpbGUuYwpA
QCAtMjM0LDE0ICsyMzQsMjcgQEAgX190emZpbGVfcmVhZCAoY29uc3QgY2hhciAqZmlsZSwgc2l6
ZV90IGV4dHJhLCBjaGFyICoqZXh0cmFwKQogICAgICAgZ290byByZWFkX2FnYWluOwogICAgIH0K
IAorICBpZiAobnVtX3RyYW5zaXRpb25zCisgICAgICA+ICgoU0laRV9NQVggLSAoX19hbGlnbm9m
X18gKHN0cnVjdCB0dGluZm8pIC0gMSkpIC8gKHNpemVvZiAodGltZV90KSArIDEpKSkKKyAgICBn
b3RvIGxvc2U7CiAgIHRvdGFsX3NpemUgPSBudW1fdHJhbnNpdGlvbnMgKiAoc2l6ZW9mICh0aW1l
X3QpICsgMSk7CiAgIHRvdGFsX3NpemUgPSAoKHRvdGFsX3NpemUgKyBfX2FsaWdub2ZfXyAoc3Ry
dWN0IHR0aW5mbykgLSAxKQogCQkmIH4oX19hbGlnbm9mX18gKHN0cnVjdCB0dGluZm8pIC0gMSkp
OwogICB0eXBlc19pZHggPSB0b3RhbF9zaXplOworICBpZiAobnVtX3R5cGVzID4gU0laRV9NQVgg
LyBzaXplb2YgKHN0cnVjdCB0dGluZm8pCisgICAgICB8fCB0b3RhbF9zaXplICsgbnVtX3R5cGVz
ICogc2l6ZW9mIChzdHJ1Y3QgdHRpbmZvKSA8IHRvdGFsX3NpemUKKyAgICAgIHx8IHRvdGFsX3Np
emUgKyBudW1fdHlwZXMgKiBzaXplb2YgKHN0cnVjdCB0dGluZm8pICsgY2hhcnMgPCBjaGFycwor
ICAgICAgfHwgKCh0b3RhbF9zaXplICsgbnVtX3R5cGVzICogc2l6ZW9mIChzdHJ1Y3QgdHRpbmZv
KSArIGNoYXJzCisJICAgKyBfX2FsaWdub2ZfXyAoc3RydWN0IGxlYXApIC0gMSkKKwkgIDwgX19h
bGlnbm9mX18gKHN0cnVjdCBsZWFwKSAtIDEpKQorICAgIGdvdG8gbG9zZTsKICAgdG90YWxfc2l6
ZSArPSBudW1fdHlwZXMgKiBzaXplb2YgKHN0cnVjdCB0dGluZm8pICsgY2hhcnM7CiAgIHRvdGFs
X3NpemUgPSAoKHRvdGFsX3NpemUgKyBfX2FsaWdub2ZfXyAoc3RydWN0IGxlYXApIC0gMSkKIAkJ
JiB+KF9fYWxpZ25vZl9fIChzdHJ1Y3QgbGVhcCkgLSAxKSk7CiAgIGxlYXBzX2lkeCA9IHRvdGFs
X3NpemU7CisgIGlmIChudW1fbGVhcHMgPiBTSVpFX01BWCAvIHNpemVvZiAoc3RydWN0IGxlYXAp
CisgICAgICB8fCB0b3RhbF9zaXplICsgbnVtX2xlYXBzICogc2l6ZW9mIChzdHJ1Y3QgbGVhcCkg
PCB0b3RhbF9zaXplKQorICAgIGdvdG8gbG9zZTsKICAgdG90YWxfc2l6ZSArPSBudW1fbGVhcHMg
KiBzaXplb2YgKHN0cnVjdCBsZWFwKTsKICAgdHpzcGVjX2xlbiA9IChzaXplb2YgKHRpbWVfdCkg
PT0gOCAmJiB0cmFuc193aWR0aCA9PSA4CiAJCT8gc3Quc3Rfc2l6ZSAtIChmdGVsbG8gKGYpCkBA
IC0yNTEsNiArMjY0LDkgQEAgX190emZpbGVfcmVhZCAoY29uc3QgY2hhciAqZmlsZSwgc2l6ZV90
IGV4dHJhLCBjaGFyICoqZXh0cmFwKQogCQkJCSsgbnVtX2xlYXBzICogMTIKIAkJCQkrIG51bV9p
c3N0ZAogCQkJCSsgbnVtX2lzZ210KSAtIDEgOiAwKTsKKyAgaWYgKHRvdGFsX3NpemUgKyB0enNw
ZWNfbGVuIDwgdHpzcGVjX2xlbgorICAgICAgfHwgdG90YWxfc2l6ZSArIHR6c3BlY19sZW4gKyBl
eHRyYSA8IGV4dHJhKQorICAgIGdvdG8gbG9zZTsKIAogICAvKiBBbGxvY2F0ZSBlbm91Z2ggbWVt
b3J5IGluY2x1ZGluZyB0aGUgZXh0cmEgYmxvY2sgcmVxdWVzdGVkIGJ5IHRoZQogICAgICBjYWxs
ZXIuICAqLwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>