<?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>230391</bug_id>
          
          <creation_ts>2021-09-17 00:20:57 -0700</creation_ts>
          <short_desc>DFG strength reduction on % operator should handle an INT_MIN divisor.</short_desc>
          <delta_ts>2021-09-29 22:27:56 -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="wjllz">1214wjllz</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>product-security</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1794360</commentid>
    <comment_count>0</comment_count>
    <who name="wjllz">1214wjllz</who>
    <bug_when>2021-09-17 00:20:57 -0700</bug_when>
    <thetext>Hi, I want to report a bug to u. This is the first time I try to report a bug. So if anything is wrong, I will sorry about this.

The bug at |DFGStrengthReductionPhase|, when it deal ArithMod instruction(https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp#L191):

        case ArithMod:
            // On Integers
            // In: ArithMod(ArithMod(x, const1), const2)
            // Out: Identity(ArithMod(x, const1))
            //     if const1 &lt;= const2.
            if (m_node-&gt;binaryUseKind() == Int32Use
                &amp;&amp; m_node-&gt;child2()-&gt;isInt32Constant()
                &amp;&amp; m_node-&gt;child1()-&gt;op() == ArithMod
                &amp;&amp; m_node-&gt;child1()-&gt;binaryUseKind() == Int32Use
                &amp;&amp; m_node-&gt;child1()-&gt;child2()-&gt;isInt32Constant()
                &amp;&amp; std::abs(m_node-&gt;child1()-&gt;child2()-&gt;asInt32()) &lt;= std::abs(m_node-&gt;child2()-&gt;asInt32())) {
                    convertToIdentityOverChild1();
            }
            break;


the optimize is so simple, like this:

```c++
let x1 = n % 10;   // [+] @a
let x2 = x1 % 14;  // [+] @b
```

at here, @a we could ensure x1 &lt; 10, then we know 10 &lt; 14, so we think we could remove @b.

However, the wrong part is this:
``
std::abs(m_node-&gt;child1()-&gt;child2()-&gt;asInt32())
```

assume |m_node-&gt;child1()-&gt;child2()-&gt;asInt32()| value is |INT_MIN|, |@x: &quot;-2147483648&quot;|, we should got |@y: &quot;2147483648&quot;|, @y &gt; INT_MAX. so interger overflow will happend.

## poc part

My poc like this, It could trigger in safari newest version(14.1.2). 

``` js
let hot_count = 0x1000000;

function jit(num){
    num |= 0;   //  [+] without this, num will be (SpecNonBoolInt32 | SpecNonIntAsDouble), which won&apos;t got this
    
    let x1 = num % -2147483648;
    let x2 = x1 %  5;
    //  [+] here is emmmmm...
    if(x2 &gt; 9){   //  [+] shold be here...
        print(&quot;[+] magic happend, sir!&quot;);
        return x2;  //  [+] I am already calc
    }
    return x1 + x2;
}

for(let i = 0; i &lt; hot_count; i++){
    jit(-(i % 10));
}


let MAGIC_INT = 10;    //  [+] if |0x80000000| be thought as a INT, which should be INT_MIN
let res = jit(MAGIC_INT);
print(&quot;[+] the result is: &quot; + res);    //    [+] should be 0x80000000, error output -2147483648
```

if u run the poc, you could see x2 is |10|, obviously it should be 0(10 % 5 == 0).

## exploit part

I am so sorry, I don&apos;t archive exploit part. I try to use this bug to eliminate boundCheck, but Finally I don&apos;t find a way.

The DFGInterger range analysis part use |executeNode| to determine value&apos;s range, but ArithMod aren&apos;t be here. I did some source code review, and found seems, if we have a code like this:
```js
let x = n % 100;
```

Seems jsc can&apos;t aware that x will be: (x &gt; -100 %% x &lt; 100).

But the bug seems as this two bug(and another v8&apos;s bug), So I decide to report it as a security vulnerablity:

-   @1: https://googleprojectzero.blogspot.com/2020/09/jitsploitation-one.html
-   @2: https://bugs.webkit.org/show_bug.cgi?id=229869

@2 seems is found by apple self, seems It is hard to found it by fuzz, I have no idea How can Convert it to a security issue, maybe the bug report know that. But I have not ability to access it.

## another

I am sorry for my bad English, sorry....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794361</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-17 00:21:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/83229740&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794362</commentid>
    <comment_count>2</comment_count>
    <who name="wjllz">1214wjllz</who>
    <bug_when>2021-09-17 00:28:49 -0700</bug_when>
    <thetext>The js code has some commit in it... which is wrong, I just changed another bug&apos;s poc, and forget delete it. I am so sorry for that part. But the bug is so simple(maybe...), hope it won&apos;t confuse u.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794384</commentid>
    <comment_count>3</comment_count>
    <who name="wjllz">1214wjllz</who>
    <bug_when>2021-09-17 02:32:29 -0700</bug_when>
    <thetext>By the way, the patch for the bug is simple, add a check like this(https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp#L166).

if(m_node-&gt;child1()-&gt;child2()-&gt;asInt32() == INT_MIN){
       break;  // [+] don&apos;t optimize it, otherwise it will trigger integer overflow
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796321</commentid>
    <comment_count>4</comment_count>
    <who name="wjllz">1214wjllz</who>
    <bug_when>2021-09-22 19:07:42 -0700</bug_when>
    <thetext>hi. nobody care about this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796322</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-09-22 19:23:21 -0700</bug_when>
    <thetext>(In reply to wjllz from comment #4)
&gt; hi. nobody care about this?

We are looking into it and will respond soon. I apologize for the delay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796369</commentid>
    <comment_count>6</comment_count>
    <who name="wjllz">1214wjllz</who>
    <bug_when>2021-09-22 22:15:03 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #5)
&gt; (In reply to wjllz from comment #4)
&gt; &gt; hi. nobody care about this?
&gt; 
&gt; We are looking into it and will respond soon. I apologize for the delay.

It&apos;s ok, It&apos;s my wrong. 

This is my first time try to report bug to safari, so I don&apos;t know I find the right way to report it. So I ask this question(comment 4)...

I don&apos;t find any useful information about webkit&apos;s bounty system... so It make me confusion.

Thanks for your reply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797992</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-09-28 12:20:46 -0700</bug_when>
    <thetext>I&apos;m currently investigating this issue.  I&apos;m not sure it&apos;s really a security issue yet, but will find out soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798461</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-09-29 11:12:43 -0700</bug_when>
    <thetext>This is not a security issue because there&apos;s no way to use the resultant integer to access memory.  Any memory access based on the resultant integer thereafter will still do the needed bounds checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798571</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-09-29 14:33:15 -0700</bug_when>
    <thetext>Thanks for the bug report.  Fix coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798574</commentid>
    <comment_count>10</comment_count>
      <attachid>439662</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-09-29 14:40:26 -0700</bug_when>
    <thetext>Created attachment 439662
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798638</commentid>
    <comment_count>11</comment_count>
      <attachid>439674</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-09-29 15:58:51 -0700</bug_when>
    <thetext>Created attachment 439674
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798640</commentid>
    <comment_count>12</comment_count>
      <attachid>439675</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-09-29 16:00:37 -0700</bug_when>
    <thetext>Created attachment 439675
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798645</commentid>
    <comment_count>13</comment_count>
      <attachid>439675</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-09-29 16:02:58 -0700</bug_when>
    <thetext>Comment on attachment 439675
proposed patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798755</commentid>
    <comment_count>14</comment_count>
      <attachid>439675</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-09-29 22:11:23 -0700</bug_when>
    <thetext>Comment on attachment 439675
proposed patch.

Thanks for the review.  Landing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798758</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-29 22:27:54 -0700</bug_when>
    <thetext>Committed r283300 (242325@main): &lt;https://commits.webkit.org/242325@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439675.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439662</attachid>
            <date>2021-09-29 14:40:26 -0700</date>
            <delta_ts>2021-09-29 15:46:16 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-230391.patch</filename>
            <type>text/plain</type>
            <size>3368</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODMyNjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIxLTA5LTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcgc3RyZW5ndGggcmVkdWN0aW9uIG9uICUgb3BlcmF0b3Igc2hvdWxk
IGhhbmRsZSBhbiBJTlRfTUlOIGRpdmlzb3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAzOTEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgzMjI5
NzQwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3RyZXNzL2RmZy1zdHJlbmd0aC1yZWR1Y3Rpb24tb24tbW9kLXNob3VsZC1oYW5kbGUtSU5UX01J
Ti5qczogQWRkZWQuCisKIDIwMjEtMDktMjkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgQ29kZSBpbnNpZGUgc3RyZW5ndGggcmVkdWN0aW9uIGNhbiBpbmNvcnJl
Y3RseSBwcm92ZSB0aGF0IHdlIGtub3cgd2hhdCBsYXN0SW5kZXggaXMKSW5kZXg6IEpTVGVzdHMv
c3RyZXNzL2RmZy1zdHJlbmd0aC1yZWR1Y3Rpb24tb24tbW9kLXNob3VsZC1oYW5kbGUtSU5UX01J
Ti5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctc3RyZW5ndGgtcmVkdWN0aW9u
LW9uLW1vZC1zaG91bGQtaGFuZGxlLUlOVF9NSU4uanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0
cy9zdHJlc3MvZGZnLXN0cmVuZ3RoLXJlZHVjdGlvbi1vbi1tb2Qtc2hvdWxkLWhhbmRsZS1JTlRf
TUlOLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEgQEAKK2Z1bmN0aW9uIGZvbyhudW0p
IHsKKyAgICBudW0gfD0gMDsKKyAgICBsZXQgeDEgPSBudW0gJSAtMjE0NzQ4MzY0ODsKKyAgICBs
ZXQgeDIgPSB4MSAlIDU7CisKKyAgICBpZiAoeDIgPiA1KQorICAgICAgICB0aHJvdyAiRXJyb3Ii
OworfQorCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspCisgICAgZm9vKGkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODMyNjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MjEtMDktMjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBz
dHJlbmd0aCByZWR1Y3Rpb24gb24gJSBvcGVyYXRvciBzaG91bGQgaGFuZGxlIGFuIElOVF9NSU4g
ZGl2aXNvci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMDM5MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODMyMjk3NDA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZTo6aGFuZGxlTm9kZSk6CisKIDIwMjEtMDktMjkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0
ZUNvdW50ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjgzMjYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE5Nyw4ICsxOTcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAm
JiBtX25vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKQogICAgICAgICAgICAgICAgICYm
IG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gQXJpdGhNb2QKICAgICAgICAgICAgICAgICAmJiBt
X25vZGUtPmNoaWxkMSgpLT5iaW5hcnlVc2VLaW5kKCkgPT0gSW50MzJVc2UKLSAgICAgICAgICAg
ICAgICAmJiBtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkKLSAg
ICAgICAgICAgICAgICAmJiBzdGQ6OmFicyhtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+YXNJ
bnQzMigpKSA8PSBzdGQ6OmFicyhtX25vZGUtPmNoaWxkMigpLT5hc0ludDMyKCkpKSB7CisgICAg
ICAgICAgICAgICAgJiYgbV9ub2RlLT5jaGlsZDEoKS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFu
dCgpKSB7CisKKyAgICAgICAgICAgICAgICBpbnQzMl90IGNvbnN0MUFic29sdXRlVmFsdWUgPSBz
dGQ6OmFicyhtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+YXNJbnQzMigpKTsKKyAgICAgICAg
ICAgICAgICBpbnQzMl90IGNvbnN0MkFic29sdXRlVmFsdWUgPSBzdGQ6OmFicyhtX25vZGUtPmNo
aWxkMigpLT5hc0ludDMyKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0MUFic29sdXRl
VmFsdWUgPCAwIHx8IGNvbnN0MkFic29sdXRlVmFsdWUgPCAwKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsgLy8gb3ZlcmZsb3cuCisKKyAgICAgICAgICAgICAgICBpZiAoY29uc3QxQWJzb2x1
dGVWYWx1ZSA8PSBjb25zdDJBYnNvbHV0ZVZhbHVlKQogICAgICAgICAgICAgICAgICAgICBjb252
ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439674</attachid>
            <date>2021-09-29 15:58:51 -0700</date>
            <delta_ts>2021-09-29 15:59:26 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-230391.patch</filename>
            <type>text/plain</type>
            <size>3368</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODMyNjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIxLTA5LTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcgc3RyZW5ndGggcmVkdWN0aW9uIG9uICUgb3BlcmF0b3Igc2hvdWxk
IGhhbmRsZSBhbiBJTlRfTUlOIGRpdmlzb3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAzOTEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgzMjI5
NzQwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3RyZXNzL2RmZy1zdHJlbmd0aC1yZWR1Y3Rpb24tb24tbW9kLXNob3VsZC1oYW5kbGUtSU5UX01J
Ti5qczogQWRkZWQuCisKIDIwMjEtMDktMjkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgQ29kZSBpbnNpZGUgc3RyZW5ndGggcmVkdWN0aW9uIGNhbiBpbmNvcnJl
Y3RseSBwcm92ZSB0aGF0IHdlIGtub3cgd2hhdCBsYXN0SW5kZXggaXMKSW5kZXg6IEpTVGVzdHMv
c3RyZXNzL2RmZy1zdHJlbmd0aC1yZWR1Y3Rpb24tb24tbW9kLXNob3VsZC1oYW5kbGUtSU5UX01J
Ti5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctc3RyZW5ndGgtcmVkdWN0aW9u
LW9uLW1vZC1zaG91bGQtaGFuZGxlLUlOVF9NSU4uanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0
cy9zdHJlc3MvZGZnLXN0cmVuZ3RoLXJlZHVjdGlvbi1vbi1tb2Qtc2hvdWxkLWhhbmRsZS1JTlRf
TUlOLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEgQEAKK2Z1bmN0aW9uIGZvbyhudW0p
IHsKKyAgICBudW0gfD0gMDsKKyAgICBsZXQgeDEgPSBudW0gJSAtMjE0NzQ4MzY0ODsKKyAgICBs
ZXQgeDIgPSB4MSAlIDU7CisKKyAgICBpZiAoeDIgPiA1KQorICAgICAgICB0aHJvdyAiRXJyb3Ii
OworfQorCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspCisgICAgZm9vKGkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODMyNjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MjEtMDktMjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBz
dHJlbmd0aCByZWR1Y3Rpb24gb24gJSBvcGVyYXRvciBzaG91bGQgaGFuZGxlIGFuIElOVF9NSU4g
ZGl2aXNvci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMDM5MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODMyMjk3NDA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZTo6aGFuZGxlTm9kZSk6CisKIDIwMjEtMDktMjkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0
ZUNvdW50ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjgzMjYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE5Nyw4ICsxOTcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAm
JiBtX25vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKQogICAgICAgICAgICAgICAgICYm
IG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gQXJpdGhNb2QKICAgICAgICAgICAgICAgICAmJiBt
X25vZGUtPmNoaWxkMSgpLT5iaW5hcnlVc2VLaW5kKCkgPT0gSW50MzJVc2UKLSAgICAgICAgICAg
ICAgICAmJiBtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkKLSAg
ICAgICAgICAgICAgICAmJiBzdGQ6OmFicyhtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+YXNJ
bnQzMigpKSA8PSBzdGQ6OmFicyhtX25vZGUtPmNoaWxkMigpLT5hc0ludDMyKCkpKSB7CisgICAg
ICAgICAgICAgICAgJiYgbV9ub2RlLT5jaGlsZDEoKS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFu
dCgpKSB7CisKKyAgICAgICAgICAgICAgICBpbnQzMl90IGNvbnN0MUFic29sdXRlVmFsdWUgPSBz
dGQ6OmFicyhtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+YXNJbnQzMigpKTsKKyAgICAgICAg
ICAgICAgICBpbnQzMl90IGNvbnN0MkFic29sdXRlVmFsdWUgPSBzdGQ6OmFicyhtX25vZGUtPmNo
aWxkMigpLT5hc0ludDMyKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0MUFic29sdXRl
VmFsdWUgPCAwIHx8IGNvbnN0MkFic29sdXRlVmFsdWUgPCAwKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsgLy8gb3ZlcmZsb3cuCisKKyAgICAgICAgICAgICAgICBpZiAoY29uc3QxQWJzb2x1
dGVWYWx1ZSA8PSBjb25zdDJBYnNvbHV0ZVZhbHVlKQogICAgICAgICAgICAgICAgICAgICBjb252
ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439675</attachid>
            <date>2021-09-29 16:00:37 -0700</date>
            <delta_ts>2021-09-29 22:27:55 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-230391.patch</filename>
            <type>text/plain</type>
            <size>3326</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODMyNjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIxLTA5LTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcgc3RyZW5ndGggcmVkdWN0aW9uIG9uICUgb3BlcmF0b3Igc2hvdWxk
IGhhbmRsZSBhbiBJTlRfTUlOIGRpdmlzb3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAzOTEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgzMjI5
NzQwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3RyZXNzL2RmZy1zdHJlbmd0aC1yZWR1Y3Rpb24tb24tbW9kLXNob3VsZC1oYW5kbGUtSU5UX01J
Ti5qczogQWRkZWQuCisKIDIwMjEtMDktMjkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgQ29kZSBpbnNpZGUgc3RyZW5ndGggcmVkdWN0aW9uIGNhbiBpbmNvcnJl
Y3RseSBwcm92ZSB0aGF0IHdlIGtub3cgd2hhdCBsYXN0SW5kZXggaXMKSW5kZXg6IEpTVGVzdHMv
c3RyZXNzL2RmZy1zdHJlbmd0aC1yZWR1Y3Rpb24tb24tbW9kLXNob3VsZC1oYW5kbGUtSU5UX01J
Ti5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctc3RyZW5ndGgtcmVkdWN0aW9u
LW9uLW1vZC1zaG91bGQtaGFuZGxlLUlOVF9NSU4uanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0
cy9zdHJlc3MvZGZnLXN0cmVuZ3RoLXJlZHVjdGlvbi1vbi1tb2Qtc2hvdWxkLWhhbmRsZS1JTlRf
TUlOLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEgQEAKK2Z1bmN0aW9uIGZvbyhudW0p
IHsKKyAgICBudW0gfD0gMDsKKyAgICBsZXQgeDEgPSBudW0gJSAtMjE0NzQ4MzY0ODsKKyAgICBs
ZXQgeDIgPSB4MSAlIDU7CisKKyAgICBpZiAoeDIgPiA1KQorICAgICAgICB0aHJvdyAiRXJyb3Ii
OworfQorCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspCisgICAgZm9vKGkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODMyNjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MjEtMDktMjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBz
dHJlbmd0aCByZWR1Y3Rpb24gb24gJSBvcGVyYXRvciBzaG91bGQgaGFuZGxlIGFuIElOVF9NSU4g
ZGl2aXNvci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMDM5MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODMyMjk3NDA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZTo6aGFuZGxlTm9kZSk6CisKIDIwMjEtMDktMjkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0
ZUNvdW50ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjgzMjYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE5Nyw4ICsxOTcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAm
JiBtX25vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKQogICAgICAgICAgICAgICAgICYm
IG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gQXJpdGhNb2QKICAgICAgICAgICAgICAgICAmJiBt
X25vZGUtPmNoaWxkMSgpLT5iaW5hcnlVc2VLaW5kKCkgPT0gSW50MzJVc2UKLSAgICAgICAgICAg
ICAgICAmJiBtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkKLSAg
ICAgICAgICAgICAgICAmJiBzdGQ6OmFicyhtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+YXNJ
bnQzMigpKSA8PSBzdGQ6OmFicyhtX25vZGUtPmNoaWxkMigpLT5hc0ludDMyKCkpKSB7CisgICAg
ICAgICAgICAgICAgJiYgbV9ub2RlLT5jaGlsZDEoKS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFu
dCgpKSB7CisKKyAgICAgICAgICAgICAgICBpbnQzMl90IGNvbnN0MSA9IG1fbm9kZS0+Y2hpbGQx
KCktPmNoaWxkMigpLT5hc0ludDMyKCk7CisgICAgICAgICAgICAgICAgaW50MzJfdCBjb25zdDIg
PSBtX25vZGUtPmNoaWxkMigpLT5hc0ludDMyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoY29u
c3QxID09IElOVF9NSU4gfHwgY29uc3QyID09IElOVF9NSU4pCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOyAvLyBzdGQ6OmFicyhJTlRfTUlOKSBpcyB1bmRlZmluZWQuCisKKyAgICAgICAgICAg
ICAgICBpZiAoc3RkOjphYnMoY29uc3QxKSA8PSBzdGQ6OmFicyhjb25zdDIpKQogICAgICAgICAg
ICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>