<?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>230776</bug_id>
          
          <creation_ts>2021-09-24 16:03:59 -0700</creation_ts>
          <short_desc>IPC::Encoder::grow and IPC::Decoder::alignBufferPosition are incompatible when alignment != 8</short_desc>
          <delta_ts>2021-10-01 16:04:20 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=230714</see_also>
          <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="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1797064</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-24 16:03:59 -0700</bug_when>
    <thetext>IPC::Encoder rounds the buffer size to the given alignment, whereas IPC::Decoder rounds the buffer offset (a pointer) to the given alignment.

For instance, if the alignment is 16 bytes, then it is possible for IPC::Encoder to add more padding to adjust for alignment, which IPC::Decoder may not add if the buffer pointer offset (`m_bufferPos`) just so happens to land on a 16-byte-aligned address.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797071</commentid>
    <comment_count>1</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-24 16:18:47 -0700</bug_when>
    <thetext>Note: this fix would allow us to encode/decode WebCore::TransformationMatrix using SimpleArgumentCoder.

The 16-byte alignment of TransformationMatrix currently prevents us from doing so — see https://bugs.webkit.org/show_bug.cgi?id=230714 for additional information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797090</commentid>
    <comment_count>2</comment_count>
      <attachid>439215</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-24 17:04:36 -0700</bug_when>
    <thetext>Created attachment 439215
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797143</commentid>
    <comment_count>3</comment_count>
      <attachid>439241</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-24 23:56:38 -0700</bug_when>
    <thetext>Created attachment 439241
With ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797319</commentid>
    <comment_count>4</comment_count>
      <attachid>439241</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-26 17:16:45 -0700</bug_when>
    <thetext>Comment on attachment 439241
With ChangeLog

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

&gt; Source/WebKit/Platform/IPC/Encoder.cpp:189
&gt; +    size_t alignedSize = roundUpToMultipleOf(alignment, m_bufferSize);

I just realized that if we go this route, StreamConnectionEncoder is going to also need this adjustment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797394</commentid>
    <comment_count>5</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-27 01:18:44 -0700</bug_when>
    <thetext>Good catch.
I remember something about the discrepancy, but IIRC I didn&apos;t dare to touch it.
I can understand if it does fail, I just didn&apos;t understand how.

This is how I interpreted the original design:
- We want to have memcpy&apos;s to aligned addresses (encoding) and from aligned addresses (decoding) due to getting memcpy fast path

- We want to have decoded data in aligned addresses for the option of in-place interpretation of the data

- Hence the buffer pointer needs to have the same address alignment in both sides, 
encoder and decoder, with the alignment defined as the maximum value used, which is std::max_align_t.

In normal IPC case, the buffer is mapped via mmap in allocation side and via the mach message machinery in the receive side, and I&apos;m assuming both have the contract that it&apos;s mapped page aligned.

So for the example, if we have page alignment 4096 and max alignment 128.
So base addresses:
  e = map()
  d = receive()
  e % 4096 == d % 4096 (== 0)
  e_ptr = e
  d_ptr = d
  e_sz = 0
  d_sz = 0

My intuition is that following are still producing same alignment bumps at the same positions:

  e_ptr = e + ((e_sz + alignof(T) - 1) % alignof(T))
  d_ptr = (d_ptr + alignof(T) - 1) % alignof(T)

  ...
  e_sz = e_ptr + sizeof(T) - e;
  d_sz = d_ptr + sizeof(T) - d;


I think the align based on the size is superior, but it has one slight problem: the requirement is not to align the size, it is to align the pointer, mostly the decode pointer.

&gt; &gt; Source/WebKit/Platform/IPC/Encoder.cpp:189
&gt; &gt; +    size_t alignedSize = roundUpToMultipleOf(alignment, m_bufferSize);
&gt; 
&gt; I just realized that if we go this route, StreamConnectionEncoder is going
&gt; to also need this adjustment.

I think StreamConnectionEncoder might be already covered, but it&apos;s better if you check.

The extra complication is that for IPC streams, there is no strict requirement of e % 4096 == d % 4096. The encoding / decoding base pointer moves according to the position in the ring buffer. However, the buffer is a SHM buffer, so by accident the base alignment is the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797399</commentid>
    <comment_count>6</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-27 01:27:11 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #0)
&gt; For instance, if the alignment is 16 bytes, then it is possible for
&gt; IPC::Encoder to add more padding to adjust for alignment, which IPC::Decoder
&gt; may not add if the buffer pointer offset (`m_bufferPos`) just so happens to
&gt; land on a 16-byte-aligned address.

So in concrete terms:
If both start at `address % 4096` and are at size sz, then how is it possible that
`sz % 16 != m_bufferPos % 16`?

Where `m_bufferPos == ((decodeAddress % 4096) + sz`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797400</commentid>
    <comment_count>7</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-27 01:28:12 -0700</bug_when>
    <thetext>Maybe decode buffer is not % 4096 for some reason?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797455</commentid>
    <comment_count>8</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-27 07:57:43 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #7)
&gt; Maybe decode buffer is not % 4096 for some reason?

To clarify — what guarantees that the decode buffer is aligned to 4096? (Is it that the decode buffer is expected to be aligned to the start of a page?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797566</commentid>
    <comment_count>9</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-27 10:59:22 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #8)
&gt; (In reply to Kimmo Kinnunen from comment #7)
&gt; &gt; Maybe decode buffer is not % 4096 for some reason?
&gt; 
&gt; To clarify — what guarantees that the decode buffer is aligned to 4096? (Is
&gt; it that the decode buffer is expected to be aligned to the start of a page?)

I guess it is just me rationalising why the code can be like that.

It seems obvious it&apos;s not -- for inline data it&apos;s the Vector allocation in readFromMachPort in ConnectionCocoa.mm. For out of line data, it might hold true, though.

Maybe the assumption was like that when inline data wasn&apos;t used, and then inline was added but the code stayed like that? I don&apos;t know..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799596</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-01 16:04:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/83786333&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439215</attachid>
            <date>2021-09-24 17:04:36 -0700</date>
            <delta_ts>2021-09-24 23:44:06 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-230776-20210924170435.patch</filename>
            <type>text/plain</type>
            <size>4533</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRmZGQ1ZDk4NTIzOWRhNmE2
YWY0ZTdiZjZlNjMwMTYwMGFlMmM5M2MuLjA1ODQzNzFiZDczYzFmNDQ4Y2NiOGU2Yzg1NWM0MmQy
NzA3Njk4YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDktMjQgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgSVBDOjpFbmNvZGVyOjpn
cm93IGFuZCBJUEM6OkRlY29kZXI6OmFsaWduQnVmZmVyUG9zaXRpb24gYXJlIGluY29tcGF0aWJs
ZSB3aGVuIGFsaWdubWVudCAhPSA4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzA3NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0IHBhdGNoIGZvciBFV1MuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9J
UEMvRGVjb2Rlci5jcHA6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmFsaWduQnVmZmVyUG9zaXRp
b24pOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
IGNvbnN0KToKKyAgICAgICAgKElQQzo6cm91bmRVcFRvQWxpZ25tZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHA6CisgICAgICAgIChJUEM6OkVuY29kZXI6
OnJlc2VydmUpOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjpncm93KToKKyAgICAgICAgKElQQzo6
cm91bmRVcFRvQWxpZ25tZW50KTogRGVsZXRlZC4KKwogMjAyMS0wOS0yMyAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViS2l0Ml0gUmVmYWN0b3Ig
c29tZSBJUEMgYXJndW1lbnQgZW5jb2RlciBsb2dpYyB0byB3b3JrIHdpdGggU3RyZWFtQ29ubmVj
dGlvbkVuY29kZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29k
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAKaW5kZXggNzQz
Y2I0ODE1NjFiMjEzZDBmODkyYmJhMzk4YjViMzViMzJiNmMwYy4uMWZkMWU3M2EyYWQzNWNhMDIw
ZTE1ODNhMWM5MWYzZDM5M2IwMDM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rl
ci5jcHAKQEAgLTE3MCwxMyArMTcwLDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBEZWNv
ZGVyOjp1bndyYXBGb3JUZXN0aW5nKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIERlY29k
ZXI6OmNyZWF0ZSh3cmFwcGVkTWVzc2FnZS5kYXRhKCksIHdyYXBwZWRNZXNzYWdlLnNpemUoKSwg
bnVsbHB0ciwgV1RGTW92ZShhdHRhY2htZW50cykpOwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0
IHVpbnQ4X3QqIHJvdW5kVXBUb0FsaWdubWVudChjb25zdCB1aW50OF90KiBwdHIsIHNpemVfdCBh
bGlnbm1lbnQpCitzdGF0aWMgaW5saW5lIGNvbnN0IHVpbnQ4X3QqIHJvdW5kVXBUb0FsaWdubWVu
dChjb25zdCB1aW50OF90KiBidWZmZXJTdGFydCwgY29uc3QgdWludDhfdCogYnVmZmVyUG9zaXRp
b24sIHNpemVfdCBhbGlnbm1lbnQpCiB7CiAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGFsaWdubWVu
dCBpcyBhIHBvd2VyIG9mIDIuCiAgICAgQVNTRVJUKGFsaWdubWVudCAmJiAhKGFsaWdubWVudCAm
IChhbGlnbm1lbnQgLSAxKSkpOwogCi0gICAgdWludHB0cl90IGFsaWdubWVudE1hc2sgPSBhbGln
bm1lbnQgLSAxOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRN
YXNrKTsKKyAgICByZXR1cm4gYnVmZmVyU3RhcnQgKyByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdu
bWVudCwgYnVmZmVyUG9zaXRpb24gLSBidWZmZXJTdGFydCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBhbGlnbmVkQnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihjb25zdCB1aW50OF90KiBh
bGlnbmVkUG9zaXRpb24sIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlclN0YXJ0LCBjb25zdCB1aW50OF90
KiBidWZmZXJFbmQsIHNpemVfdCBzaXplKQpAQCAtMTkwLDcgKzE4OSw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBhbGlnbmVkQnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihjb25zdCB1aW50OF90
KiBhbGlnbmVkUG9zCiAKIGJvb2wgRGVjb2Rlcjo6YWxpZ25CdWZmZXJQb3NpdGlvbihzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBjb25zdCB1aW50OF90KiBhbGlnbmVkUG9z
aXRpb24gPSByb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXJQb3MsIGFsaWdubWVudCk7CisgICAg
YXV0byogYWxpZ25lZFBvc2l0aW9uID0gcm91bmRVcFRvQWxpZ25tZW50KG1fYnVmZmVyLCBtX2J1
ZmZlclBvcywgYWxpZ25tZW50KTsKICAgICBpZiAoVU5MSUtFTFkoIWFsaWduZWRCdWZmZXJJc0xh
cmdlRW5vdWdoVG9Db250YWluKGFsaWduZWRQb3NpdGlvbiwgbV9idWZmZXIsIG1fYnVmZmVyRW5k
LCBzaXplKSkpIHsKICAgICAgICAgLy8gV2UndmUgd2Fsa2VkIG9mZiB0aGUgZW5kIG9mIHRoaXMg
YnVmZmVyLgogICAgICAgICBtYXJrSW52YWxpZCgpOwpAQCAtMjAzLDcgKzIwMiw3IEBAIGJvb2wg
RGVjb2Rlcjo6YWxpZ25CdWZmZXJQb3NpdGlvbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkKIAogYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKSBjb25zdAogewotICAgIHJldHVybiBhbGlnbmVkQnVmZmVy
SXNMYXJnZUVub3VnaFRvQ29udGFpbihyb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXJQb3MsIGFs
aWdubWVudCksIG1fYnVmZmVyLCBtX2J1ZmZlckVuZCwgc2l6ZSk7CisgICAgcmV0dXJuIGFsaWdu
ZWRCdWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZl
ciwgbV9idWZmZXJQb3MsIGFsaWdubWVudCksIG1fYnVmZmVyLCBtX2J1ZmZlckVuZCwgc2l6ZSk7
CiB9CiAKIGJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9F
bmNvZGVyLmNwcAppbmRleCA5ZjM2YWU3NTJjNzg3ZTQ5NmFlOWY3MDI0NDkyZTk2NTU5NmY5NTk4
Li41YWM4NmViNWI1MGE3ZWE1MDU4N2Y0YjQ0NTI1MzM3ZDg3MGY4NDc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcApAQCAtMTQzLDE3ICsxNDMsMTIgQEAgdm9pZCBFbmNv
ZGVyOjp3cmFwRm9yVGVzdGluZyhVbmlxdWVSZWY8RW5jb2Rlcj4mJiBvcmlnaW5hbCkKICAgICAg
ICAgYWRkQXR0YWNobWVudChXVEZNb3ZlKGF0dGFjaG1lbnQpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBzaXplX3Qgcm91bmRVcFRvQWxpZ25tZW50KHNpemVfdCB2YWx1ZSwgc2l6ZV90IGFsaWdubWVu
dCkKLXsKLSAgICByZXR1cm4gKCh2YWx1ZSArIGFsaWdubWVudCAtIDEpIC8gYWxpZ25tZW50KSAq
IGFsaWdubWVudDsKLX0KLQogdm9pZCBFbmNvZGVyOjpyZXNlcnZlKHNpemVfdCBzaXplKQogewog
ICAgIGlmIChzaXplIDw9IG1fYnVmZmVyQ2FwYWNpdHkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHNpemVfdCBuZXdDYXBhY2l0eSA9IHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZlckNhcGFjaXR5
ICogMiwgNDA5Nik7CisgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gcm91bmRVcFRvTXVsdGlwbGVP
Zjw0MDk2PihtX2J1ZmZlckNhcGFjaXR5ICogMik7CiAgICAgd2hpbGUgKG5ld0NhcGFjaXR5IDwg
c2l6ZSkKICAgICAgICAgbmV3Q2FwYWNpdHkgKj0gMjsKIApAQCAtMTkxLDcgKzE4Niw3IEBAIGNv
bnN0IE9wdGlvblNldDxNZXNzYWdlRmxhZ3M+JiBFbmNvZGVyOjptZXNzYWdlRmxhZ3MoKSBjb25z
dAogCiB1aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KQogewotICAgIHNpemVfdCBhbGlnbmVkU2l6ZSA9IHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZl
clNpemUsIGFsaWdubWVudCk7CisgICAgc2l6ZV90IGFsaWduZWRTaXplID0gcm91bmRVcFRvTXVs
dGlwbGVPZihhbGlnbm1lbnQsIG1fYnVmZmVyU2l6ZSk7CiAgICAgcmVzZXJ2ZShhbGlnbmVkU2l6
ZSArIHNpemUpOwogCiAgICAgc3RkOjptZW1zZXQobV9idWZmZXIgKyBtX2J1ZmZlclNpemUsIDAs
IGFsaWduZWRTaXplIC0gbV9idWZmZXJTaXplKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439241</attachid>
            <date>2021-09-24 23:56:38 -0700</date>
            <delta_ts>2021-09-26 17:31:20 -0700</delta_ts>
            <desc>With ChangeLog</desc>
            <filename>bug-230776-20210924235637.patch</filename>
            <type>text/plain</type>
            <size>5435</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMDcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGY4ZjAzZmU4YWNkOTc0NWNi
OGZlZDcyMDM3NzM5Y2E3MmEzMmFhMDYuLjZlNDhjM2U0ZjVjOTQ4ZmU3NzIzYTdkMzc2NGViMmNk
MzVmZGE5MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjEtMDktMjQgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgSVBDOjpFbmNvZGVyOjpn
cm93IGFuZCBJUEM6OkRlY29kZXI6OmFsaWduQnVmZmVyUG9zaXRpb24gYXJlIGluY29tcGF0aWJs
ZSB3aGVuIGFsaWdubWVudCAhPSA4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzA3NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGVuY29kZSBhbmQgZGVjb2RlIG5vbi04
LWJ5dGUtYWxpZ25lZCBkYXRhIHdoZW4gc2VuZGluZyBJUEMgYXJndW1lbnRzLiBDdXJyZW50bHks
IEVuY29kZXIKKyAgICAgICAgcm91bmRzIHRoZSBvZmZzZXQgb2YgZWFjaCBlbmNvZGVkIGRhdGEg
dG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgdGhlIGRhdGEncyBhbGlnbm1lbnQsIHJlbGF0aXZl
IHRvIHRoZSBzdGFydAorICAgICAgICBvZiB0aGUgYnVmZmVyLiBIb3dldmVyLCBEZWNvZGVyIHJv
dW5kcyB0aGUgcG9pbnRlciBsb2NhdGlvbiBvZiBlYWNoIHBpZWNlIG9mIGRlY29kZWQgZGF0YSB0
byB0aGUgbmVhcmVzdAorICAgICAgICBtdWx0aXBsZSBvZiB0aGUgYWxpZ25tZW50LgorCisgICAg
ICAgIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHBvc3NpYmxlIGZvciBhID44LWJ5dGUgYWxpZ25lZCBw
aWVjZSBvZiBkYXRhIHRvIGJlIHByZWNlZGVkIGJ5IGFsaWdubWVudCBwYWRkaW5nIGR1cmluZwor
ICAgICAgICBlbmNvZGluZywgYnV0ICpub3QqIHByZWNlZGVkIGJ5IGFueSBwYWRkaW5nIGR1cmlu
ZyBkZWNvZGluZyBiZWNhdXNlIHRoZSBwb2ludCBvZmZzZXQgaW4gdGhlIGRlY29kZWQgYnVmZmVy
IG1heQorICAgICAgICBoYXBwZW4gdG8gZmFsbCBvbiBhbiBhZGRyZXNzIHRoYXQgaXMgYSBtdWx0
aXBsZSBvZiB0aGUgYWxpZ25tZW50LgorCisgICAgICAgIEZpeCB0aGlzIGRpc2NyZXBlbmN5IGJ5
IG1ha2luZyBib3RoIHRoZSBlbmNvZGVyIGFuZCBkZWNvZGVyIGNvbXB1dGUgYWRkaXRpb25hbCBh
bGlnbm1lbnQgcGFkZGluZyBiYXNlZCBvbiB0aGUKKyAgICAgICAgb2Zmc2V0IHJlbGF0aXZlIHRv
IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLCByYXRoZXIgdGhhbiB0aGUgY3VycmVudCBwb2ludGVy
IGFkZHJlc3MgaW4gdGhlIGJ1ZmZlci4KKworICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVy
LmNwcDoKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6YWxpZ25CdWZmZXJQb3NpdGlvbik6CisgICAg
ICAgIChJUEM6OkRlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4gY29uc3QpOgor
ICAgICAgICAoSVBDOjpyb3VuZFVwVG9BbGlnbm1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFBs
YXRmb3JtL0lQQy9FbmNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6RW5jb2Rlcjo6cmVzZXJ2ZSk6
CisgICAgICAgIChJUEM6OkVuY29kZXI6Omdyb3cpOgorICAgICAgICAoSVBDOjpyb3VuZFVwVG9B
bGlnbm1lbnQpOiBEZWxldGVkLgorCiAyMDIxLTA5LTI0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25f
aHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJLaXQyXSBSZWZhY3RvciBzb21lIElQQyBh
cmd1bWVudCBlbmNvZGVyIGxvZ2ljIHRvIHdvcmsgd2l0aCBTdHJlYW1Db25uZWN0aW9uRW5jb2Rl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAppbmRleCA3NDNjYjQ4MTU2MWIy
MTNkMGY4OTJiYmEzOThiNWIzNWIzMmI2YzBjLi4xZmQxZTczYTJhZDM1Y2EwMjBlMTU4M2ExYzkx
ZjNkMzkzYjAwMzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNv
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcApAQCAt
MTcwLDEzICsxNzAsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IERlY29kZXI6OnVud3Jh
cEZvclRlc3RpbmcoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1cm4gRGVjb2Rlcjo6Y3JlYXRl
KHdyYXBwZWRNZXNzYWdlLmRhdGEoKSwgd3JhcHBlZE1lc3NhZ2Uuc2l6ZSgpLCBudWxscHRyLCBX
VEZNb3ZlKGF0dGFjaG1lbnRzKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3QgdWludDhfdCog
cm91bmRVcFRvQWxpZ25tZW50KGNvbnN0IHVpbnQ4X3QqIHB0ciwgc2l6ZV90IGFsaWdubWVudCkK
K3N0YXRpYyBpbmxpbmUgY29uc3QgdWludDhfdCogcm91bmRVcFRvQWxpZ25tZW50KGNvbnN0IHVp
bnQ4X3QqIGJ1ZmZlclN0YXJ0LCBjb25zdCB1aW50OF90KiBidWZmZXJQb3NpdGlvbiwgc2l6ZV90
IGFsaWdubWVudCkKIHsKICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgYWxpZ25tZW50IGlzIGEgcG93
ZXIgb2YgMi4KICAgICBBU1NFUlQoYWxpZ25tZW50ICYmICEoYWxpZ25tZW50ICYgKGFsaWdubWVu
dCAtIDEpKSk7CiAKLSAgICB1aW50cHRyX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KChyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ocHRyKSArIGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2spOworICAg
IHJldHVybiBidWZmZXJTdGFydCArIHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBidWZm
ZXJQb3NpdGlvbiAtIGJ1ZmZlclN0YXJ0KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGFsaWdu
ZWRCdWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKGNvbnN0IHVpbnQ4X3QqIGFsaWduZWRQb3Np
dGlvbiwgY29uc3QgdWludDhfdCogYnVmZmVyU3RhcnQsIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlckVu
ZCwgc2l6ZV90IHNpemUpCkBAIC0xOTAsNyArMTg5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFs
aWduZWRCdWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKGNvbnN0IHVpbnQ4X3QqIGFsaWduZWRQ
b3MKIAogYm9vbCBEZWNvZGVyOjphbGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCBzaXplKQogewotICAgIGNvbnN0IHVpbnQ4X3QqIGFsaWduZWRQb3NpdGlvbiA9IHJv
dW5kVXBUb0FsaWdubWVudChtX2J1ZmZlclBvcywgYWxpZ25tZW50KTsKKyAgICBhdXRvKiBhbGln
bmVkUG9zaXRpb24gPSByb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXIsIG1fYnVmZmVyUG9zLCBh
bGlnbm1lbnQpOwogICAgIGlmIChVTkxJS0VMWSghYWxpZ25lZEJ1ZmZlcklzTGFyZ2VFbm91Z2hU
b0NvbnRhaW4oYWxpZ25lZFBvc2l0aW9uLCBtX2J1ZmZlciwgbV9idWZmZXJFbmQsIHNpemUpKSkg
ewogICAgICAgICAvLyBXZSd2ZSB3YWxrZWQgb2ZmIHRoZSBlbmQgb2YgdGhpcyBidWZmZXIuCiAg
ICAgICAgIG1hcmtJbnZhbGlkKCk7CkBAIC0yMDMsNyArMjAyLDcgQEAgYm9vbCBEZWNvZGVyOjph
bGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogCiBib29s
IERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IHNpemUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFsaWduZWRCdWZmZXJJc0xhcmdlRW5v
dWdoVG9Db250YWluKHJvdW5kVXBUb0FsaWdubWVudChtX2J1ZmZlclBvcywgYWxpZ25tZW50KSwg
bV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKKyAgICByZXR1cm4gYWxpZ25lZEJ1ZmZlcklz
TGFyZ2VFbm91Z2hUb0NvbnRhaW4ocm91bmRVcFRvQWxpZ25tZW50KG1fYnVmZmVyLCBtX2J1ZmZl
clBvcywgYWxpZ25tZW50KSwgbV9idWZmZXIsIG1fYnVmZmVyRW5kLCBzaXplKTsKIH0KIAogYm9v
bCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUsIHNpemVfdCBhbGlnbm1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9FbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3Bw
CmluZGV4IDlmMzZhZTc1MmM3ODdlNDk2YWU5ZjcwMjQ0OTJlOTY1NTk2Zjk1OTguLjVhYzg2ZWI1
YjUwYTdlYTUwNTg3ZjRiNDQ1MjUzMzdkODcwZjg0NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0VuY29kZXIuY3BwCkBAIC0xNDMsMTcgKzE0MywxMiBAQCB2b2lkIEVuY29kZXI6OndyYXBG
b3JUZXN0aW5nKFVuaXF1ZVJlZjxFbmNvZGVyPiYmIG9yaWdpbmFsKQogICAgICAgICBhZGRBdHRh
Y2htZW50KFdURk1vdmUoYXR0YWNobWVudCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHNpemVfdCBy
b3VuZFVwVG9BbGlnbm1lbnQoc2l6ZV90IHZhbHVlLCBzaXplX3QgYWxpZ25tZW50KQotewotICAg
IHJldHVybiAoKHZhbHVlICsgYWxpZ25tZW50IC0gMSkgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50
OwotfQotCiB2b2lkIEVuY29kZXI6OnJlc2VydmUoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKHNp
emUgPD0gbV9idWZmZXJDYXBhY2l0eSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2l6ZV90IG5l
d0NhcGFjaXR5ID0gcm91bmRVcFRvQWxpZ25tZW50KG1fYnVmZmVyQ2FwYWNpdHkgKiAyLCA0MDk2
KTsKKyAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSByb3VuZFVwVG9NdWx0aXBsZU9mPDQwOTY+KG1f
YnVmZmVyQ2FwYWNpdHkgKiAyKTsKICAgICB3aGlsZSAobmV3Q2FwYWNpdHkgPCBzaXplKQogICAg
ICAgICBuZXdDYXBhY2l0eSAqPSAyOwogCkBAIC0xOTEsNyArMTg2LDcgQEAgY29uc3QgT3B0aW9u
U2V0PE1lc3NhZ2VGbGFncz4mIEVuY29kZXI6Om1lc3NhZ2VGbGFncygpIGNvbnN0CiAKIHVpbnQ4
X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7Ci0gICAg
c2l6ZV90IGFsaWduZWRTaXplID0gcm91bmRVcFRvQWxpZ25tZW50KG1fYnVmZmVyU2l6ZSwgYWxp
Z25tZW50KTsKKyAgICBzaXplX3QgYWxpZ25lZFNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFs
aWdubWVudCwgbV9idWZmZXJTaXplKTsKICAgICByZXNlcnZlKGFsaWduZWRTaXplICsgc2l6ZSk7
CiAKICAgICBzdGQ6Om1lbXNldChtX2J1ZmZlciArIG1fYnVmZmVyU2l6ZSwgMCwgYWxpZ25lZFNp
emUgLSBtX2J1ZmZlclNpemUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>