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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>178298</bug_id>
          
          <creation_ts>2017-10-13 15:29:09 -0700</creation_ts>
          <short_desc>JSRunLoopTimer: reduce likely race when used improperly</short_desc>
          <delta_ts>2017-10-16 09:19:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>aestes</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1360270</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-13 15:29:09 -0700</bug_when>
    <thetext>If an API user sets a timer on JSRunLoopTimer, and then racily destroys the JSRunLoopTimer while the timer is firing then it&apos;s possible for timerDidFire to cause a use-after-free and / or crash because e.g. m_apiLock becomes a nullptr while timerDidFire is executing. That results from an invalid use of JSRunLoopTimer, but we should try to be more resilient for that type of misuse because it&apos;s not necessarily easy to catch by inspection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360272</commentid>
    <comment_count>1</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-13 15:29:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/32899816&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360276</commentid>
    <comment_count>2</comment_count>
      <attachid>323757</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-13 15:35:03 -0700</bug_when>
    <thetext>Created attachment 323757
patch

Just to confirm, the assembly now looks like this:

__ZN3JSC14JSRunLoopTimer12timerDidFireEv:                                                             __ZN3JSC14JSRunLoopTimer12timerDidFireEv:                                                            
        sub     sp, sp, #0x30                                                                                 sub     sp, sp, #0x40                                                                        
                                                                                                              stp     x22, x21, [sp, #0x10]                                                                
        stp     x20, x19, [sp, #0x10]                                                                         stp     x20, x19, [sp, #0x20]                                                                
        stp     x29, x30, [sp, #0x20]                                                                         stp     x29, x30, [sp, #0x30]                                                                
        add     x29, sp, #0x20                                                                                add     x29, sp, #0x30                                                                       
        mov      x20, x0                                                                                      mov      x21, x0                                                                             
        ldr     x0, [x20, #0x18]                                                                              ldr     x19, [x21, #0x18]                                                                    
                                                                                                              cbz     x19, 0x???                                                                           
                                                                                                              mov      x0, x19                                                                             
        bl      0x???                                                                                         bl      0x???                                                                                
        ldr     x0, [x20, #0x18]                                                                                                                                                                           
        ldr     x19, [x0, #0x20]                                                                              ldr     x20, [x19, #0x20]                                                                    
        cbz     x19, 0x???                                                                                    cbz     x20, 0x???                                                                           
        ldaxr   w8, [x19]                                                                                     ldaxr   w8, [x20]                                                                            


The main safeguard is the acquisition of m_apiLock, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360279</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-13 15:36:57 -0700</bug_when>
    <thetext>Attachment 323757 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:11:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: use-after-free, use-after-free  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp:57:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 2 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360281</commentid>
    <comment_count>4</comment_count>
      <attachid>323757</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-13 15:43:21 -0700</bug_when>
    <thetext>Comment on attachment 323757
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=323757&amp;action=review

It doesn&apos;t seem like we actually solve the bug here. Your code implies we may end up reading a field even after it dies. What if we used ref counting to ref the timer when it has a timer scheduled?

&gt; Source/JavaScriptCore/ChangeLog:20
&gt; +        `this` and turns a nullptr deref into âjustâ a use-after-free.

remove unicode

&gt; Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp:52
&gt; +        std::lock_guard&lt;JSLock&gt; lock(*apiLock);

why not holdLock?

&gt; Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp:58
&gt; +            JSLockHolder locker(vm.get());

Why do we need this if we&apos;re holding it up there?

&gt; Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp:94
&gt; +    std::lock_guard&lt;JSLock&gt; lock(*apiLock);

ditto w.r.t holdLock</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360291</commentid>
    <comment_count>5</comment_count>
      <attachid>323761</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-13 16:05:59 -0700</bug_when>
    <thetext>Created attachment 323761
patch

Adress in-person comments from Andy.

&gt; It doesn&apos;t seem like we actually solve the bug here. Your code implies we
&gt; may end up reading a field even after it dies. What if we used ref counting
&gt; to ref the timer when it has a timer scheduled?

I added a comment to that effect in the ChangeLog.

I can explore refcounting separately, but I don&apos;t think it fits the scope of a small and targeted quick fix. At the end of the day we can try to be as robust as we want, but if the API is misused we&apos;ll be in trouble anyways, no? This seems like an easy way to avoid the simplest issues without being invasive.

&gt; &gt; Source/JavaScriptCore/ChangeLog:20
&gt; &gt; +        `this` and turns a nullptr deref into âjustâ a use-after-free.
&gt; 
&gt; remove unicode

Done.

&gt; &gt; Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp:52
&gt; &gt; +        std::lock_guard&lt;JSLock&gt; lock(*apiLock);
&gt; 
&gt; why not holdLock?

lock_guard is used 2:1 in WebKit. Seems weird to duplicate a simple idiomatic thing from C++11 that does exactly the same thing.

&gt; &gt; Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp:58
&gt; &gt; +            JSLockHolder locker(vm.get());
&gt; 
&gt; Why do we need this if we&apos;re holding it up there?

You&apos;re right, I forgot those were the same! Gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360294</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-13 16:07:11 -0700</bug_when>
    <thetext>Attachment 323761 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:11:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: use-after-free, use-after-free  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360296</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-13 16:07:40 -0700</bug_when>
    <thetext>I&apos;m not a fan, but I won&apos;t stop you from landing.

My reason for wanting holdLock is it&apos;s more idiomatic JSC code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360307</commentid>
    <comment_count>8</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-13 16:32:28 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #7)
&gt; I&apos;m not a fan, but I won&apos;t stop you from landing.

Agreed, I&apos;m not a fan either, but it seems like the simplest fix for a frequent crash. Will hold off committing until I hear from Divya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360764</commentid>
    <comment_count>9</comment_count>
      <attachid>323761</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-16 08:49:31 -0700</bug_when>
    <thetext>Comment on attachment 323761
patch

LGTM too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360766</commentid>
    <comment_count>10</comment_count>
      <attachid>323761</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-16 08:51:07 -0700</bug_when>
    <thetext>Comment on attachment 323761
patch

Talked to pizlo, committing to trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360778</commentid>
    <comment_count>11</comment_count>
      <attachid>323761</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-16 09:19:32 -0700</bug_when>
    <thetext>Comment on attachment 323761
patch

Clearing flags on attachment: 323761

Committed r223409: &lt;https://trac.webkit.org/changeset/223409&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360779</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-16 09:19:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323757</attachid>
            <date>2017-10-13 15:35:03 -0700</date>
            <delta_ts>2017-10-13 16:05:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-JSRunLoopTimer-reduce-likely-race-when-used-improper.patch</filename>
            <type>text/plain</type>
            <size>3669</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA0YWE5OTFhMjBiYWEzMTkyZDQ3NDYxNjZlODZmMGY4ODZkMDVlZGU1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDEzIE9jdCAyMDE3IDE1OjMzOjI4IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gSlNSdW5M
b29wVGltZXI6IHJlZHVjZSBsaWtlbHkgcmFjZSB3aGVuIHVzZWQgaW1wcm9wZXJseQoKLS0tCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgfCAyNyArKysr
KysrKysrKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxv
b3BUaW1lci5jcHAgfCAyOSArKysrKysrKysrKystLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdl
ZCwgNDIgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cKaW5kZXggOTY2OWY0ZC4uZTM5MmRhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzAgQEAKKzIwMTctMTAtMTMgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEpTUnVuTG9vcFRpbWVyOiByZWR1Y2UgbGlrZWx5IHJhY2Ugd2hlbiB1c2Vk
IGltcHJvcGVybHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3ODI5OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI4OTk4MTY+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSWYgYW4gQVBJIHVzZXIgc2V0
cyBhIHRpbWVyIG9uIEpTUnVuTG9vcFRpbWVyLCBhbmQgdGhlbiByYWNpbHkKKyAgICAgICAgZGVz
dHJveXMgdGhlIEpTUnVuTG9vcFRpbWVyIHdoaWxlIHRoZSB0aW1lciBpcyBmaXJpbmcgdGhlbiBp
dCdzCisgICAgICAgIHBvc3NpYmxlIGZvciB0aW1lckRpZEZpcmUgdG8gY2F1c2UgYSB1c2UtYWZ0
ZXItZnJlZSBhbmQgLyBvciBjcmFzaAorICAgICAgICBiZWNhdXNlIGUuZy4gbV9hcGlMb2NrIGJl
Y29tZXMgYSBudWxscHRyIHdoaWxlIHRpbWVyRGlkRmlyZSBpcworICAgICAgICBleGVjdXRpbmcu
IFRoYXQgcmVzdWx0cyBmcm9tIGFuIGludmFsaWQgdXNlIG9mIEpTUnVuTG9vcFRpbWVyLCBidXQK
KyAgICAgICAgd2Ugc2hvdWxkIHRyeSB0byBiZSBtb3JlIHJlc2lsaWVudCBmb3IgdGhhdCB0eXBl
IG9mIG1pc3VzZSBiZWNhdXNlCisgICAgICAgIGl0J3Mgbm90IG5lY2Vzc2FyaWx5IGVhc3kgdG8g
Y2F0Y2ggYnkgaW5zcGVjdGlvbi4KKworICAgICAgICAqIHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIu
Y3BwOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlKTogcHV0IG1f
YXBpTG9jayBvbiB0aGUgc3RhY2ssCisgICAgICAgIGFuZCBjaGVja3MgZm9yIG51bGxwdHIuIFRo
aXMgcHJldmVudHMgbG9hZGluZyBpdCB0d2ljZSBvZmYgb2YKKyAgICAgICAgYHRoaXNgIGFuZCB0
dXJucyBhIG51bGxwdHIgZGVyZWYgaW50byDigJxqdXN04oCdIGEgdXNlLWFmdGVyLWZyZWUuCisg
ICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjp+SlNSdW5Mb29wVGltZXIpOiBhY3F1aXJlIG1f
YXBpTG9jayBiZWZvcmUKKyAgICAgICAgY2FsbGluZyBtX3ZtLT51bnJlZ2lzdGVyUnVuTG9vcFRp
bWVyKHRoaXMpLCB3aGljaCBpbiB0dXJuIGRvZXMKKyAgICAgICAgQ0ZSdW5Mb29wUmVtb3ZlVGlt
ZXIgLyBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUuIFRoaXMgcHJldmVudHMKKyAgICAgICAgdGlt
ZXJEaWRGaXJlIGZyb20gZG9pbmcgbXVjaCB3aGlsZSB0aGUgdGltZXJzIGFyZSB1bi1yZWdpc3Rl
cmVkLgorICAgICAgICB+SlNSdW5Mb29wVGltZXIgYWxzbyBuZWVkcyB0byBzZXQgbV9hcGlMb2Nr
IHRvIG51bGxwdHIgYmVmb3JlCisgICAgICAgIHJlbGVhc2luZyB0aGUgbG9jaywgc28gaXQgbmVl
ZHMgaXRzIG93biBsb2NhbCBjb3B5LgorCiAyMDE3LTEwLTExICBDb21taXQgUXVldWUgIDxjb21t
aXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
MjIzMTEzIGFuZCByMjIzMTIxLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNSdW5Mb29wVGltZXIuY3BwCmluZGV4IDY0MjRiNzEuLmNhZjU3ZmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKQEAgLTQwLDI3ICs0
MCwyNSBAQAogI2luY2x1ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3VyY2VQcmlvcml0eS5oPgogI2Vu
ZGlmCiAKKyNpbmNsdWRlIDxtdXRleD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IFNlY29u
ZHMgSlNSdW5Mb29wVGltZXI6OnNfZGVjYWRlIHsgNjAgKiA2MCAqIDI0ICogMzY1ICogMTAgfTsK
IAogdm9pZCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlKCkKIHsKLSAgICBtX2FwaUxvY2st
PmxvY2soKTsKLQotICAgIFJlZlB0cjxWTT4gdm0gPSBtX2FwaUxvY2stPnZtKCk7Ci0gICAgaWYg
KCF2bSkgewotICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91
bGQganVzdCBnaXZlIHVwLgotICAgICAgICBtX2FwaUxvY2stPnVubG9jaygpOwotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKEpTTG9jayogYXBpTG9jayA9IG1fYXBpTG9jay5nZXQoKSkgeworICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8SlNMb2NrPiBsb2NrKCphcGlMb2NrKTsKKworICAgICAgICBS
ZWZQdHI8Vk0+IHZtID0gYXBpTG9jay0+dm0oKTsKKyAgICAgICAgaWYgKCF2bSkgeworICAgICAg
ICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2
ZSB1cC4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
dm0uZ2V0KCkpOworICAgICAgICAgICAgZG9Xb3JrKCk7CisgICAgICAgIH0KICAgICB9Ci0KLSAg
ICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0uZ2V0KCkpOwotICAgICAgICBkb1dv
cmsoKTsKLSAgICB9Ci0KLSAgICBtX2FwaUxvY2stPnVubG9jaygpOwogfQogCiAjaWYgVVNFKENG
KQpAQCAtOTIsNyArOTAsMTAgQEAgdm9pZCBKU1J1bkxvb3BUaW1lcjo6c2V0UnVuTG9vcChDRlJ1
bkxvb3BSZWYgcnVuTG9vcCkKIAogSlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1lcigpCiB7
CisgICAgSlNMb2NrKiBhcGlMb2NrID0gbV9hcGlMb2NrLmdldCgpOworICAgIHN0ZDo6bG9ja19n
dWFyZDxKU0xvY2s+IGxvY2soKmFwaUxvY2spOwogICAgIG1fdm0tPnVucmVnaXN0ZXJSdW5Mb29w
VGltZXIodGhpcyk7CisgICAgbV9hcGlMb2NrID0gbnVsbHB0cjsKIH0KIAogdm9pZCBKU1J1bkxv
b3BUaW1lcjo6dGltZXJEaWRGaXJlQ2FsbGJhY2soQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqIGNv
bnRleHRQdHIpCi0tIAoyLjkuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323761</attachid>
            <date>2017-10-13 16:05:59 -0700</date>
            <delta_ts>2017-10-16 09:19:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-JSRunLoopTimer-reduce-likely-race-when-used-improper.patch</filename>
            <type>text/plain</type>
            <size>3925</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAyODVkZmY5ZmIxOWZmODM2NjVmMzA0ZDg1ODBkNzc5NmNjYjRhMTIzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDEzIE9jdCAyMDE3IDE1OjMzOjI4IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gSlNSdW5M
b29wVGltZXI6IHJlZHVjZSBsaWtlbHkgcmFjZSB3aGVuIHVzZWQgaW1wcm9wZXJseQoKLS0tCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgfCAzNCArKysr
KysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVu
TG9vcFRpbWVyLmNwcCB8IDIyICsrKysrKysrLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA0NyBp
bnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4
IDk2NjlmNGQuLjg3ZjcwYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3
IEBACisyMDE3LTEwLTEzICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAg
ICAgICBKU1J1bkxvb3BUaW1lcjogcmVkdWNlIGxpa2VseSByYWNlIHdoZW4gdXNlZCBpbXByb3Bl
cmx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgy
OTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODk5ODE2PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIGFuIEFQSSB1c2VyIHNldHMgYSB0aW1l
ciBvbiBKU1J1bkxvb3BUaW1lciwgYW5kIHRoZW4gcmFjaWx5CisgICAgICAgIGRlc3Ryb3lzIHRo
ZSBKU1J1bkxvb3BUaW1lciB3aGlsZSB0aGUgdGltZXIgaXMgZmlyaW5nIHRoZW4gaXQncworICAg
ICAgICBwb3NzaWJsZSBmb3IgdGltZXJEaWRGaXJlIHRvIGNhdXNlIGEgdXNlLWFmdGVyLWZyZWUg
YW5kIC8gb3IgY3Jhc2gKKyAgICAgICAgYmVjYXVzZSBlLmcuIG1fYXBpTG9jayBiZWNvbWVzIGEg
bnVsbHB0ciB3aGlsZSB0aW1lckRpZEZpcmUgaXMKKyAgICAgICAgZXhlY3V0aW5nLiBUaGF0IHJl
c3VsdHMgZnJvbSBhbiBpbnZhbGlkIHVzZSBvZiBKU1J1bkxvb3BUaW1lciwgYnV0CisgICAgICAg
IHdlIHNob3VsZCB0cnkgdG8gYmUgbW9yZSByZXNpbGllbnQgZm9yIHRoYXQgdHlwZSBvZiBtaXN1
c2UgYmVjYXVzZQorICAgICAgICBpdCdzIG5vdCBuZWNlc3NhcmlseSBlYXN5IHRvIGNhdGNoIGJ5
IGluc3BlY3Rpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIGNoYW5nZSB0aGUgb25seSByZW1haW5p
bmcgcmFjZSBpcyBpZiB0aGUgdGltZXIgZmlyZXMsCisgICAgICAgIGFuZCB0aGVuIG9ubHkgdGlt
ZXJEaWRGaXJlJ3MgcHJvbG9ndWUgZXhlY3V0ZXMsIGJ1dCBub3QgdGhlIGxvYWQKKyAgICAgICAg
b2YgdGhlIG1fYXBpTG9jayBwb2ludGVyIGZyb20gYHRoaXNgLiBJdCdzIGEgbXVjaCBzbWFsbGVy
IHJhY2UuCisKKyAgICAgICAgU2VwYXJhdGVseSwgSSdsbCByZWFjaCBvdXQgdG8gQVBJIHVzZXJz
IHdobyBhcmUgc2VlbWluZ2x5IG1pc3VzaW5nCisgICAgICAgIHRoZSBBUEkuCisKKyAgICAgICAg
KiBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGlt
ZXI6OnRpbWVyRGlkRmlyZSk6IHB1dCBtX2FwaUxvY2sgb24gdGhlIHN0YWNrLAorICAgICAgICBh
bmQgY2hlY2tzIGZvciBudWxscHRyLiBUaGlzIHByZXZlbnRzIGxvYWRpbmcgaXQgdHdpY2Ugb2Zm
IG9mCisgICAgICAgIGB0aGlzYCBhbmQgdHVybnMgYSBudWxscHRyIGRlcmVmIGludG8gImp1c3Qi
IGEgdXNlLWFmdGVyLWZyZWUuCisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjp+SlNSdW5M
b29wVGltZXIpOiBhY3F1aXJlIG1fYXBpTG9jayBiZWZvcmUKKyAgICAgICAgY2FsbGluZyBtX3Zt
LT51bnJlZ2lzdGVyUnVuTG9vcFRpbWVyKHRoaXMpLCB3aGljaCBpbiB0dXJuIGRvZXMKKyAgICAg
ICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIgLyBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUuIFRoaXMg
cHJldmVudHMKKyAgICAgICAgdGltZXJEaWRGaXJlIGZyb20gZG9pbmcgbXVjaCB3aGlsZSB0aGUg
dGltZXJzIGFyZSB1bi1yZWdpc3RlcmVkLgorICAgICAgICB+SlNSdW5Mb29wVGltZXIgYWxzbyBu
ZWVkcyB0byBzZXQgbV9hcGlMb2NrIHRvIG51bGxwdHIgYmVmb3JlCisgICAgICAgIHJlbGVhc2lu
ZyB0aGUgbG9jaywgc28gaXQgbmVlZHMgaXRzIG93biBsb2NhbCBjb3B5LgorCiAyMDE3LTEwLTEx
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMjIzMTEzIGFuZCByMjIzMTIxLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCmluZGV4IDY0MjRiNzEuLjg5
ZWRiNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9v
cFRpbWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BU
aW1lci5jcHAKQEAgLTQwLDI3ICs0MCwyOCBAQAogI2luY2x1ZGUgPHd0Zi9nbGliL1J1bkxvb3BT
b3VyY2VQcmlvcml0eS5oPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxtdXRleD4KKwogbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IFNlY29uZHMgSlNSdW5Mb29wVGltZXI6OnNfZGVjYWRlIHsgNjAgKiA2
MCAqIDI0ICogMzY1ICogMTAgfTsKIAogdm9pZCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJl
KCkKIHsKLSAgICBtX2FwaUxvY2stPmxvY2soKTsKKyAgICBKU0xvY2sqIGFwaUxvY2sgPSBtX2Fw
aUxvY2suZ2V0KCk7CisgICAgaWYgKCFhcGlMb2NrKSB7CisgICAgICAgIC8vIExpa2VseSBhIGJ1
Z2d5IHVzYWdlOiB0aGUgdGltZXIgZmlyZWQgd2hpbGUgSlNSdW5Mb29wVGltZXIgd2FzIGJlaW5n
IGRlc3Ryb3llZC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIFJlZlB0cjxWTT4gdm0g
PSBtX2FwaUxvY2stPnZtKCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPEpTTG9jaz4gbG9jaygqYXBp
TG9jayk7CisgICAgUmVmUHRyPFZNPiB2bSA9IGFwaUxvY2stPnZtKCk7CiAgICAgaWYgKCF2bSkg
ewogICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVz
dCBnaXZlIHVwLgotICAgICAgICBtX2FwaUxvY2stPnVubG9jaygpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtLmdldCgpKTsK
LSAgICAgICAgZG9Xb3JrKCk7Ci0gICAgfQotCi0gICAgbV9hcGlMb2NrLT51bmxvY2soKTsKKyAg
ICBkb1dvcmsoKTsKIH0KIAogI2lmIFVTRShDRikKQEAgLTkyLDcgKzkzLDEwIEBAIHZvaWQgSlNS
dW5Mb29wVGltZXI6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCiAKIEpTUnVuTG9v
cFRpbWVyOjp+SlNSdW5Mb29wVGltZXIoKQogeworICAgIEpTTG9jayogYXBpTG9jayA9IG1fYXBp
TG9jay5nZXQoKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8SlNMb2NrPiBsb2NrKCphcGlMb2NrKTsK
ICAgICBtX3ZtLT51bnJlZ2lzdGVyUnVuTG9vcFRpbWVyKHRoaXMpOworICAgIG1fYXBpTG9jayA9
IG51bGxwdHI7CiB9CiAKIHZvaWQgSlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZUNhbGxiYWNr
KENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBjb250ZXh0UHRyKQotLSAKMi45LjMKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>