RFC: Using openat()

"Craig Small" <[email protected]> ("csmall") Fri, 20 Jan 2023 22:01:07 +1100
Newsgroups gmane.linux.procps.devel
Message-ID <CALy8Cw4uP_P-4uA-B-B9RTnkrLxJiQviO5HZ2wEy_6v1ZW=Cmg@mail.gmail.com>
--00000000000022a0b105f2aff874
Content-Type: multipart/alternative; boundary="00000000000022a0af05f2aff872"

--00000000000022a0af05f2aff872
Content-Type: text/plain; charset="UTF-8"

Hi All,
  I have a proposed patch where the library uses openat() for all open
files below
/proc/<PID>.  I think this is a reasonable idea as it means if a PID is
reused you're not using half the old process and half the new process
information.

It's all internal so invisible to the calling programs, so its not an API
change but it is a reasonably large patch.  The work is largely based upon
https://gitlab.com/procps-ng/procps/-/merge_requests/120

Let me know what you think.

 - Craig
-- 

Craig Small             https://dropbear.xyz/  csmall at : dropbear.xyz
Debian GNU/Linux        https://www.debian.org/
<http://www.debian.org/>  csmall at : debian.org
GPG fingerprint:     5D2F B320 B825 D939 04D2  0519 3938 F96B DF50 FEA5

--00000000000022a0af05f2aff872
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Hi All,</div><div>=C2=A0 I have a proposed patch wher=
e the library uses openat() for all open files below</div><div>/proc/&lt;PI=
D&gt;.=C2=A0 I think this is a reasonable idea as it means if a PID is reus=
ed you&#39;re not using half the old process and half the new process infor=
mation.</div><div><br></div><div>It&#39;s all internal so invisible to the =
calling programs, so its not an API change but it is a reasonably large pat=
ch.=C2=A0 The work is largely based upon <a href=3D"https://gitlab.com/proc=
ps-ng/procps/-/merge_requests/120">https://gitlab.com/procps-ng/procps/-/me=
rge_requests/120</a>=C2=A0</div><div><br></div><div>Let me know what you th=
ink.</div><div><br></div><div>=C2=A0- Craig</div>-- <br><div dir=3D"ltr" cl=
ass=3D"gmail_signature" data-smartmail=3D"gmail_signature"><div dir=3D"ltr"=
><pre>Craig Small             <a href=3D"https://dropbear.xyz" target=3D"_b=
lank">https://dropbear.xyz/</a>  csmall at : <a href=3D"http://dropbear.xyz=
" target=3D"_blank">dropbear.xyz</a>
Debian GNU/Linux        <a href=3D"http://www.debian.org/" target=3D"_blank=
">https://www.debian.org/</a>  csmall at : <a href=3D"http://debian.org" ta=
rget=3D"_blank">debian.org</a>
GPG fingerprint:     5D2F B320 B825 D939 04D2  0519 3938 F96B DF50 FEA5</pr=
e></div></div></div>

--00000000000022a0af05f2aff872--
--00000000000022a0b105f2aff874
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0001-library-Use-openat-to-read-procfs.patch"
Content-Disposition: attachment; 
	filename="0001-library-Use-openat-to-read-procfs.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_ld4evcli0>
X-Attachment-Id: f_ld4evcli0

RnJvbSBjYWE5MDk2YmFjMmE5N2FlMzdmY2NkNzhlMDJkZWU5MDJiODJjMjQ3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDcmFpZyBTbWFsbCA8Y3NtYWxsQGRyb3BiZWFyLnh5ej4KRGF0
ZTogRnJpLCAyMCBKYW4gMjAyMyAyMTo1MDo0MCArMTEwMApTdWJqZWN0OiBbUEFUQ0hdIGxpYnJh
cnk6IFVzZSBvcGVuYXQoKSB0byByZWFkIHByb2NmcwoKUmVzb2x2ZXMgaXNzdWVzIHdpdGggcmFj
ZSBjb25kaXRpb25zIHdoZXJlIHRoZSBQSUQgaXMgYmVpbmcgcmV1c2VkLgpVc2luZyB0aGlzIG1l
dGhvZCB3ZSBrbm93IHRoYXQgYWxsIHRoZSBzdWJkaXJlY3RvcmllcyBhbmQgZmlsZXMKdW5kZXIg
L3Byb2MvPFBJRD4gYXJlIG93bmVkIGJ5IHRoZSBzYW1lIHByb2Nlc3MgYW5kIG5vdCBvbmUgdGhh
dCBoYXMKdGhlIHNhbWUgUElELgoKVGhlIGlzIGxhcmdlbHkgdGhlIHdvcmsgb2YgQHp4emF4IGlu
ICExMjAgYnV0IHJlZmFjdG9yZWQgZm9yIHRoZQpuZXcgbGlicmFyeSBhcnJhbmdlbWVudCBhbmQg
b25seSBpbmNsdWRpbmcgdGhlIGxpYnJhcnkgY29tcG9uZW50LgoKSSBkb24ndCBzZWUgYSB3YXkg
b2YgYWxsb3dpbmcgdGhlIHByb2dyYW1zIHRoZW1zZWx2ZXMgdXNlIHRoaXMKbWV0aG9kLCBhcyB0
aGUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIHdoZW4gdGhlIEFQSSBjYWxscwpyZXR1cm4u
IEluIGZhY3QgdGhlIGZkIGlzIGNsb3NlZCBmb3IgZWFjaCBQSUQgc28gaXQncyBhbHdheXMKZmQ9
My4KClRoaXMgYWxzbyBtZWFucyB3ZSBjYW5ub3QgdXNlIGl0IGZvciBwcm9jcHNfbnNfcmVhZF9w
aWQoKQphcyB0aGlzIGlzIGFuIGV4dGVybmFsIGZ1bmN0aW9uLiBJbiB0aGUgb2xkIGxpYnJhcnkg
bnMycHJvYygpCndhcyBpbnRlcm5hbC4KClJlZmVyZW5jZXM6CiBwcm9jcHMtbmcvcHJvY3BzITEy
MAotLS0KIE5FV1MgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICsKIGxpYnJhcnkvaW5jbHVk
ZS9yZWFkcHJvYy5oIHwgICA2ICstCiBsaWJyYXJ5L3JlYWRwcm9jLmMgICAgICAgICB8IDE3NiAr
KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDEy
NyBpbnNlcnRpb25zKCspLCA1OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ORVdTIGIvTkVX
UwppbmRleCA0MGEzOWU5Li43NWY0OTRlIDEwMDY0NAotLS0gYS9ORVdTCisrKyBiL05FV1MKQEAg
LTEsNSArMSw4IEBACiBwcm9jcHMtbmctTkVYVAogLS0tLS0tLS0tLS0tLS0tCisgICogbGlicmFy
eQorICAgIFVzZSBvcGVuYXQoKSB3aGVyZSBwb3NzaWJsZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtZXJnZSAjMTIwCisgICAgKGludGVybmFsIGNoYW5nZXMgb25seSkgICAgICAgICAgIAog
ICAqIGRvY3M6IERvbid0IGluc3RhbGwgRW5nbGlzaCBtYW5wYWdlcyB0d2ljZQogICAqIHBncmVw
OiBBZGQgLUggbWF0Y2ggb24gdXNlcnNwYWNlIHNpZ25hbCBoYW5kbGVyICAgICAgICBtZXJnZSAj
MTY1CiAgICogcHM6IGMgZmxhZyBzaG93cyBjb21tYW5kIG5hbWUgYWdhaW4gICAgICAgICAgICAg
ICAgICAgIERlYmlhbiAjMTAyNjMyNgpkaWZmIC0tZ2l0IGEvbGlicmFyeS9pbmNsdWRlL3JlYWRw
cm9jLmggYi9saWJyYXJ5L2luY2x1ZGUvcmVhZHByb2MuaAppbmRleCBlNWZlMWU3Li4zN2E1MjMz
IDEwMDY0NAotLS0gYS9saWJyYXJ5L2luY2x1ZGUvcmVhZHByb2MuaAorKysgYi9saWJyYXJ5L2lu
Y2x1ZGUvcmVhZHByb2MuaApAQCAtMzIsNyArMzIsOSBAQAogdHlwZWRlZiBzdHJ1Y3QgcHJvY190
IHsKICAgICBpbnQKICAgICAgICAgdGlkLCAgICAgICAgICAgIC8vIChzcGVjaWFsKSAgICAgICB0
YXNrIGlkLCB0aGUgUE9TSVggdGhyZWFkIElEIChzZWUgYWxzbzogdGdpZCkKLSAgICAgICAgcHBp
ZDsgICAgICAgICAgIC8vIHN0YXQsc3RhdHVzICAgICBwaWQgb2YgcGFyZW50IHByb2Nlc3MKKyAg
ICAgICAgcHBpZCwgICAgICAgICAgIC8vIHN0YXQsc3RhdHVzICAgICBwaWQgb2YgcGFyZW50IHBy
b2Nlc3MKKwlkZmQ7IAkJLy8gKHNwZWNpYWwpICAgICAgIGZkIG9mIHRoZSBwcm9jZXNzIGRpcmVj
dG9yeSBpbiAvcHJvYworCiAgICAgY2hhcgogICAgICAgICBzdGF0ZSwgICAgICAgICAgLy8gc3Rh
dCxzdGF0dXMgICAgIHNpbmdsZS1jaGFyIGNvZGUgZm9yIHByb2Nlc3Mgc3RhdGUgKFM9c2xlZXBp
bmcpCiAgICAgICAgIHBhZF8xLCAgICAgICAgICAvLyBuL2EgICAgICAgICAgICAgcGFkZGluZwpA
QCAtMTkxLDggKzE5MywxMCBAQCB0eXBlZGVmIHN0cnVjdCBwcm9jX3QgewogCiB0eXBlZGVmIHN0
cnVjdCBQUk9DVEFCIHsKICAgICBESVIgICAgICAgICpwcm9jZnM7CisgICAgaW50ICAgICAgICAg
cHJvY2ZzX2ZkOwogLy8gICAgY2hhciBkZUJ1ZzBbNjRdOwogICAgIERJUiAgICAgICAgKnRhc2tk
aXI7ICAvLyBmb3IgdGhyZWFkcworICAgIGludCAgICAgICAgIHRhc2tkaXJfZmQ7CiAvLyAgICBj
aGFyIGRlQnVnMVs2NF07CiAgICAgcGlkX3QgICAgICAgdGFza2Rpcl91c2VyOyAgLy8gZm9yIHRo
cmVhZHMKICAgICBpbnQoKmZpbmRlcikoc3RydWN0IFBST0NUQUIgKl9fcmVzdHJpY3QgY29uc3Qs
IHByb2NfdCAqX19yZXN0cmljdCBjb25zdCk7CmRpZmYgLS1naXQgYS9saWJyYXJ5L3JlYWRwcm9j
LmMgYi9saWJyYXJ5L3JlYWRwcm9jLmMKaW5kZXggNGJjOWQ5Ni4uNTJkYWFjNSAxMDA2NDQKLS0t
IGEvbGlicmFyeS9yZWFkcHJvYy5jCisrKyBiL2xpYnJhcnkvcmVhZHByb2MuYwpAQCAtODEsNiAr
ODEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9hY3F1aXJlZCAocHJvY190ICpwKSB7CiAg
ICAgICogaGVyZSB3ZSBmcmVlIHRob3NlIGl0ZW1zIHRoYXQgbWlnaHQgZXhpc3QgZXZlbiB3aGVu
IG5vdCBleHBsaWNpdGx5IHwKICAgICAgKiByZXF1ZXN0ZWQgYnkgb3VyIGNhbGxlci4gIGl0IGlz
IGV4cGVjdGVkIHRoYXQgcGlkLmMgd2lsbCB0aGVuIGZyZWUgfAogICAgICAqIGFueSByZW1haW5p
bmcgZHluYW1pYyBtZW1vcnkgd2hpY2ggbWlnaHQgYmUgZGFuZ2xpbmcgb2ZmIGEgcHJvY190LiB8
ICovCisgICAgaWYgKHAtPmRmZCA+PSAwKSBjbG9zZShwLT5kZmQpOwogICAgIGlmIChwLT5jZ25h
bWUpICAgZnJlZShwLT5jZ25hbWUpOwogICAgIGlmIChwLT5jZ3JvdXApICAgZnJlZShwLT5jZ3Jv
dXApOwogICAgIGlmIChwLT5jbWQpICAgICAgZnJlZShwLT5jbWQpOwpAQCAtOTQsNiArOTUsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9hY3F1aXJlZCAocHJvY190ICpwKSB7CiAgICAgaWYg
KHAtPnN1cGdpZCkgICBmcmVlKHAtPnN1cGdpZCk7CiAKICAgICBtZW1zZXQocCwgJ1wwJywgc2l6
ZW9mKHByb2NfdCkpOworICAgIHAtPmRmZCA9IC0xOwogfQogCiAKQEAgLTcxNSw5ICs3MTcsMjUg
QEAgc3RhdGljIHZvaWQgc21hcHMycHJvYyAoY29uc3QgY2hhciAqcywgcHJvY190ICpyZXN0cmlj
dCBQKSB7CiAgICN1bmRlZiBta09CSgogfQogCi1zdGF0aWMgaW50IGZpbGUyc3RyKGNvbnN0IGNo
YXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IHV0bGJ1Zl9zICp1Yikgewot
ICNkZWZpbmUgYnVmZkdSVyAxMDI0CitzdGF0aWMgaW50IG9wZW5hdF9vcl9vcGVuKGNvbnN0IGNo
YXIgKmRpcmVjdG9yeSwgY29uc3QgaW50IGRmZCwgY29uc3QgY2hhciAqd2hhdCkgeworICAgIGlu
dCByZXM7CiAgICAgY2hhciBwYXRoW1BST0NQQVRITEVOXTsKKyAgICBpbnQgbGVuOworCisgICAg
aWYgKGRmZCA+PSAwKSB7CisgICAgICAgIHJlcyA9IG9wZW5hdChkZmQsIHdoYXQsIE9fUkRPTkxZ
KTsKKyAgICAgICAgaWYgKHJlcyA+PSAwIHx8IGVycm5vICE9IEVOT1NZUykKKyAgICAgICAgICAg
IHJldHVybiByZXM7CisgICAgfQorCisgICAgbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mIHBh
dGgsICIlcy8lcyIsIGRpcmVjdG9yeSwgd2hhdCk7CisgICAgaWYgKGxlbiA8PSAwIHx8IChzaXpl
X3QpbGVuID49IHNpemVvZiBwYXRoKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIG9wZW4ocGF0aCwg
T19SRE9OTFkpOworfQorCisKK3N0YXRpYyBpbnQgZmlsZTJzdHIoY29uc3QgY2hhciAqZGlyZWN0
b3J5LCBjb25zdCBpbnQgZGZkLCBjb25zdCBjaGFyICp3aGF0LCBzdHJ1Y3QgdXRsYnVmX3MgKnVi
KSB7CisgI2RlZmluZSBidWZmR1JXIDEwMjQKICAgICBpbnQgZmQsIG51bSwgdG90X3JlYWQgPSAw
LCBsZW47CiAKICAgICAvKiBvbiBmaXJzdCB1c2Ugd2UgcHJlYWxsb2NhdGUgYSBidWZmZXIgb2Yg
bWluaW11bSBzaXplIHRvIGVtdWxhdGUKQEAgLTcyOSw5ICs3NDcsNyBAQCBzdGF0aWMgaW50IGZp
bGUyc3RyKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IHV0
bGJ1Zl9zICp1YgogICAgICAgICB1Yi0+YnVmID0gY2FsbG9jKDEsICh1Yi0+c2l6ID0gYnVmZkdS
VykpOwogICAgICAgICBpZiAoIXViLT5idWYpIHJldHVybiAtMTsKICAgICB9Ci0gICAgbGVuID0g
c25wcmludGYocGF0aCwgc2l6ZW9mIHBhdGgsICIlcy8lcyIsIGRpcmVjdG9yeSwgd2hhdCk7Ci0g
ICAgaWYgKGxlbiA8PSAwIHx8IChzaXplX3QpbGVuID49IHNpemVvZiBwYXRoKSByZXR1cm4gLTE7
Ci0gICAgaWYgKC0xID09IChmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFksIDApKSkgcmV0dXJuIC0x
OworICAgIGlmICgtMSA9PSAoZmQgPSBvcGVuYXRfb3Jfb3BlbihkaXJlY3RvcnksIGRmZCwgd2hh
dCkpKSByZXR1cm4gLTE7CiAgICAgd2hpbGUgKDAgPCAobnVtID0gcmVhZChmZCwgdWItPmJ1ZiAr
IHRvdF9yZWFkLCB1Yi0+c2l6IC0gdG90X3JlYWQpKSkgewogICAgICAgICB0b3RfcmVhZCArPSBu
dW07CiAgICAgICAgIGlmICh0b3RfcmVhZCA8IHViLT5zaXopIGJyZWFrOwpAQCAtNzUyLDE1ICs3
NjgsMTMgQEAgc3RhdGljIGludCBmaWxlMnN0cihjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0
IGNoYXIgKndoYXQsIHN0cnVjdCB1dGxidWZfcyAqdWIKIH0KIAogCi1zdGF0aWMgY2hhciAqKmZp
bGUyc3RydmVjKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqd2hhdCkgeworc3Rh
dGljIGNoYXIgKipmaWxlMnN0cnZlYyhjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGludCBk
ZmQsIGNvbnN0IGNoYXIgKndoYXQpIHsKICAgICBjaGFyIGJ1ZlsyMDQ4XTsgICAgIC8qIHJlYWQg
YnVmIGJ5dGVzIGF0IGEgdGltZSAqLwogICAgIGNoYXIgKnAsICpyYnVmID0gMCwgKmVuZGJ1Ziwg
KipxLCAqKnJldCwgKnN0cnA7CiAgICAgaW50IGZkLCB0b3QgPSAwLCBuLCBjLCBlbmRfb2ZfZmls
ZSA9IDA7CiAgICAgaW50IGFsaWduOwogCi0gICAgY29uc3QgaW50IGxlbiA9IHNucHJpbnRmKGJ1
Ziwgc2l6ZW9mIGJ1ZiwgIiVzLyVzIiwgZGlyZWN0b3J5LCB3aGF0KTsKLSAgICBpZihsZW4gPD0g
MCB8fCAoc2l6ZV90KWxlbiA+PSBzaXplb2YgYnVmKSByZXR1cm4gTlVMTDsKLSAgICBmZCA9IG9w
ZW4oYnVmLCBPX1JET05MWSwgMCk7CisgICAgZmQgPSBvcGVuYXRfb3Jfb3BlbihkaXJlY3Rvcnks
IGRmZCwgd2hhdCk7CiAgICAgaWYoZmQ9PS0xKSByZXR1cm4gTlVMTDsKIAogICAgIC8qIHJlYWQg
d2hvbGUgZmlsZSBpbnRvIGEgbWVtb3J5IGJ1ZmZlciwgYWxsb2NhdGluZyBhcyB3ZSBnbyAqLwpA
QCAtODM0LDE4ICs4NDgsMTUgQEAgc3RhdGljIGNoYXIgKipmaWxlMnN0cnZlYyhjb25zdCBjaGFy
ICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKndoYXQpIHsKICAgICAvLyB0aGlzIGlzIHRoZSBmb3Jt
ZXIgdW5kZXIgdXRpbGl6ZWQgJ3JlYWRfY21kbGluZScsIHdoaWNoIGhhcyBiZWVuCiAgICAgLy8g
Z2VuZXJhbGl6ZWQgaW4gc3VwcG9ydCBvZiB0aGVzZSBuZXcgbGlicHJvYyBmbGFnczoKICAgICAv
LyAgICAgUFJPQ19FRElUQ0dSUENWVCwgUFJPQ19FRElUQ01ETENWVCBhbmQgUFJPQ19FRElURU5W
UkNWVAotc3RhdGljIGludCByZWFkX3VudmVjdG9yZWQoY2hhciAqcmVzdHJpY3QgY29uc3QgZHN0
LCB1bnNpZ25lZCBzeiwgY29uc3QgY2hhciAqd2hvbSwgY29uc3QgY2hhciAqd2hhdCwgY2hhciBz
ZXApIHsKLSAgICBjaGFyIHBhdGhbUFJPQ1BBVEhMRU5dOwotICAgIGludCBmZCwgbGVuOworc3Rh
dGljIGludCByZWFkX3VudmVjdG9yZWQoY2hhciAqcmVzdHJpY3QgY29uc3QgZHN0LCB1bnNpZ25l
ZCBzeiwgY29uc3QgY2hhciAqd2hvbSwgY29uc3QgaW50IGRmZCwgY29uc3QgY2hhciAqd2hhdCwg
Y2hhciBzZXApIHsKKyAgICBpbnQgZmQ7CiAgICAgdW5zaWduZWQgbiA9IDA7CiAKICAgICBpZihz
eiA8PSAwKSByZXR1cm4gMDsKICAgICBpZihzeiA+PSBJTlRfTUFYKSBzeiA9IElOVF9NQVgtMTsK
ICAgICBkc3RbMF0gPSAnXDAnOwogCi0gICAgbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBh
dGgpLCAiJXMvJXMiLCB3aG9tLCB3aGF0KTsKLSAgICBpZihsZW4gPD0gMCB8fCAoc2l6ZV90KWxl
biA+PSBzaXplb2YocGF0aCkpIHJldHVybiAwOwotICAgIGZkID0gb3BlbihwYXRoLCBPX1JET05M
WSk7CisgICAgZmQgPSBvcGVuYXRfb3Jfb3Blbih3aG9tLCBkZmQsIHdoYXQpOwogICAgIGlmKGZk
PT0tMSkgcmV0dXJuIDA7CiAKICAgICBmb3IoOzspewpAQCAtOTEwLDcgKzkyMSw3IEBAIHN0YXRp
YyBpbnQgZmlsbF9jZ3JvdXBfY3Z0IChjb25zdCBjaGFyICpkaXJlY3RvcnksIHByb2NfdCAqcmVz
dHJpY3QgcCkgewogICAgIGludCB0b3QsIHgsIGxlbjsKIAogICAgICooZHN0ID0gZHN0X2J1ZmZl
cikgPSAnXDAnOyAgICAgICAgICAgICAgICAgIC8vIGVtcHR5IGRlc3RpbmF0aW9uCi0gICAgdG90
ID0gcmVhZF91bnZlY3RvcmVkKHNyY19idWZmZXIsIE1BWF9CVUZTWiwgZGlyZWN0b3J5LCAiY2dy
b3VwIiwgJ1wwJyk7CisgICAgdG90ID0gcmVhZF91bnZlY3RvcmVkKHNyY19idWZmZXIsIE1BWF9C
VUZTWiwgZGlyZWN0b3J5LCBwLT5kZmQsICJjZ3JvdXAiLCAnXDAnKTsKICAgICBmb3IgKHNyYyA9
IHNyY19idWZmZXIsIGVvYiA9IHNyY19idWZmZXIgKyB0b3Q7IHNyYyA8IGVvYjsgc3JjICs9IHgp
IHsKICAgICAgICAgeCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBs
b29wIGFzc2lzdAogICAgICAgICBpZiAoISpzcmMpIGNvbnRpbnVlOwpAQCAtOTQxLDcgKzk1Miw3
IEBAIHN0YXRpYyBpbnQgZmlsbF9jZ3JvdXBfY3Z0IChjb25zdCBjaGFyICpkaXJlY3RvcnksIHBy
b2NfdCAqcmVzdHJpY3QgcCkgewogICAgIC8vIHZhbGlkIHByb2NfdC5jbWRsaW5lIHBvaW50ZXIu
CiBzdGF0aWMgaW50IGZpbGxfY21kbGluZV9jdnQgKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgcHJv
Y190ICpyZXN0cmljdCBwKSB7CiAgI2RlZmluZSB1RkxHICggRVNDX0JSQUNLRVRTIHwgRVNDX0RF
RlVOQ1QgKQotICAgIGlmIChyZWFkX3VudmVjdG9yZWQoc3JjX2J1ZmZlciwgTUFYX0JVRlNaLCBk
aXJlY3RvcnksICJjbWRsaW5lIiwgJyAnKSkKKyAgICBpZiAocmVhZF91bnZlY3RvcmVkKHNyY19i
dWZmZXIsIE1BWF9CVUZTWiwgZGlyZWN0b3J5LCBwLT5kZmQsICJjbWRsaW5lIiwgJyAnKSkKICAg
ICAgICAgZXNjYXBlX3N0cihkc3RfYnVmZmVyLCBzcmNfYnVmZmVyLCBNQVhfQlVGU1opOwogICAg
IGVsc2UKICAgICAgICAgZXNjYXBlX2NvbW1hbmQoZHN0X2J1ZmZlciwgcCwgTUFYX0JVRlNaLCB1
RkxHKTsKQEAgLTk1Nyw3ICs5NjgsNyBAQCBzdGF0aWMgaW50IGZpbGxfY21kbGluZV9jdnQgKGNv
bnN0IGNoYXIgKmRpcmVjdG9yeSwgcHJvY190ICpyZXN0cmljdCBwKSB7CiAgICAgLy8gZ3VhcmFu
dGVlcyB0aGUgY2FsbGVyIGEgdmFsaWQgcHJvY190LmVudmlyb24gcG9pbnRlci4KIHN0YXRpYyBp
bnQgZmlsbF9lbnZpcm9uX2N2dCAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBwcm9jX3QgKnJlc3Ry
aWN0IHApIHsKICAgICBkc3RfYnVmZmVyWzBdID0gJ1wwJzsKLSAgICBpZiAocmVhZF91bnZlY3Rv
cmVkKHNyY19idWZmZXIsIE1BWF9CVUZTWiwgZGlyZWN0b3J5LCAiZW52aXJvbiIsICcgJykpCisg
ICAgaWYgKHJlYWRfdW52ZWN0b3JlZChzcmNfYnVmZmVyLCBNQVhfQlVGU1osIGRpcmVjdG9yeSwg
cC0+ZGZkLCAiZW52aXJvbiIsICcgJykpCiAgICAgICAgIGVzY2FwZV9zdHIoZHN0X2J1ZmZlciwg
c3JjX2J1ZmZlciwgTUFYX0JVRlNaKTsKICAgICBwLT5lbnZpcm9uID0gc3RyZHVwKGRzdF9idWZm
ZXJbMF0gPyBkc3RfYnVmZmVyIDogIi0iKTsKICAgICBpZiAoIXAtPmVudmlyb24pCkBAIC05Njks
NyArOTgwLDcgQEAgc3RhdGljIGludCBmaWxsX2Vudmlyb25fY3Z0IChjb25zdCBjaGFyICpkaXJl
Y3RvcnksIHByb2NfdCAqcmVzdHJpY3QgcCkgewogICAgIC8vIFByb3ZpZGUgdGhlIG1lYW5zIHRv
IHZhbHVlIHByb2NfdC5seGNuYW1lIChwZXJoYXBzIG9ubHkgd2l0aCAiLSIpIHdoaWxlCiAgICAg
Ly8gdHJhY2tpbmcgYWxsIG5hbWVzIGFscmVhZHkgc2VlbiB0aHVzIGF2b2lkaW5nIHRoZSBvdmVy
aGVhZCBvZiByZXBlYXRpbmcKICAgICAvLyBtYWxsb2MoKSBhbmQgZnJlZSgpIGNhbGxzLgotc3Rh
dGljIGNoYXIgKmx4Y19jb250YWluZXJzIChjb25zdCBjaGFyICpwYXRoKSB7CitzdGF0aWMgY2hh
ciAqbHhjX2NvbnRhaW5lcnMgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGludCBkZmQpIHsKICAg
ICBzdGF0aWMgX190aHJlYWQgc3RydWN0IHV0bGJ1Zl9zIHViID0geyBOVUxMLCAwIH07ICAgLy8g
dXRpbCBidWZmZXIgZm9yIHdob2xlIGNncm91cAogICAgIHN0YXRpYyBjaGFyIGx4Y19ub25lW10g
PSAiLSI7CiAgICAgc3RhdGljIGNoYXIgbHhjX29vcHNbXSA9ICI/IjsgICAgICAgICAgICAgIC8v
IHVzZWQgd2hlbiBtZW1vcnkgYWxsb2MgZmFpbHMKQEAgLTk4OCw3ICs5OTksNyBAQCBzdGF0aWMg
Y2hhciAqbHhjX2NvbnRhaW5lcnMgKGNvbnN0IGNoYXIgKnBhdGgpIHsKICAgICAgICAgICAgMjpu
YW1lPXN5c3RlbWQ6LwogICAgICAgICAgICAxOmNwdXNldCxjcHUsY3B1YWNjdCxkZXZpY2VzLGZy
ZWV6ZXIsbmV0X2NscyxibGtpbyxwZXJmX2V2ZW50LG5ldF9wcmlvOi9seGMvbHhjLVAKICAgICAq
LwotICAgIGlmIChmaWxlMnN0cihwYXRoLCAiY2dyb3VwIiwgJnViKSA+IDApIHsKKyAgICBpZiAo
ZmlsZTJzdHIocGF0aCwgZGZkLCAiY2dyb3VwIiwgJnViKSA+IDApIHsKICAgICAgICAgLyogb3Vj
aCwgdGhlIG5leHQgZGVmYXVsdHMgY291bGQgYmUgY2hhbmdlZCBhdCBseGMgLi9jb25maWd1cmUg
dGltZQogICAgICAgICAgICAoIGFuZCBhIGNoYW5nZWQgJ2x4Yy5jZ3JvdXAucGF0dGVybicgaXMg
b25seSBhdmFpbGFibGUgdG8gcm9vdCApICovCiAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyICps
eGNfZGVsbTEgPSAibHhjLnBheWxvYWQuIjsgICAgLy8gd2l0aCBseGMtNC4wLjAKQEAgLTEwNTUs
MTIgKzEwNjYsMTkgQEAgc3RhdGljIGludCBsb2dpbl91aWQgKGNvbnN0IGNoYXIgKnBhdGgpIHsK
IH0KIAogCi1zdGF0aWMgY2hhciAqcmVhZGxpbmtfZXhlIChjb25zdCBjaGFyICpwYXRoKXsKK3N0
YXRpYyBjaGFyICpyZWFkbGlua19leGUgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGludCBkZmQp
ewogICAgIGNoYXIgYnVmW1BST0NQQVRITEVOXTsKLSAgICBpbnQgaW47CisgICAgaW50IGluID0g
LTE7CiAKLSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvZXhlIiwgcGF0aCk7Ci0g
ICAgaW4gPSAoaW50KXJlYWRsaW5rKGJ1Ziwgc3JjX2J1ZmZlciwgTUFYX0JVRlNaLTEpOworICAg
IGlmIChkZmQgPj0gMCkgeworICAgICAgICBpbiA9IChpbnQpcmVhZGxpbmthdChkZmQsICJleGUi
LCBzcmNfYnVmZmVyLCBNQVhfQlVGU1otMSk7CisgICAgICAgIGlmIChpbiA8IDAgJiYgZXJybm8g
IT0gRU5PU1lTKQorICAgICAgICAgICAgcmV0dXJuIHN0cmR1cCgiLSIpOworICAgIH0KKyAgICBp
ZiAoaW4gPCAwKSB7IC8vZGZkPDAgb3IgRU5PU1lTCisgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6
ZW9mKGJ1ZiksICIlcy9leGUiLCBwYXRoKTsKKyAgICAgICAgaW4gPSAoaW50KXJlYWRsaW5rKGJ1
Ziwgc3JjX2J1ZmZlciwgTUFYX0JVRlNaLTEpOworICAgIH0KICAgICBpZiAoaW4gPiAwKSB7CiAg
ICAgICAgIHNyY19idWZmZXJbaW5dID0gJ1wwJzsKICAgICAgICAgZXNjYXBlX3N0cihkc3RfYnVm
ZmVyLCBzcmNfYnVmZmVyLCBNQVhfQlVGU1opOwpAQCAtMTEzMywyOCArMTE1MSwyOCBAQCBzdGF0
aWMgcHJvY190ICpzaW1wbGVfcmVhZHByb2MoUFJPQ1RBQiAqcmVzdHJpY3QgY29uc3QgUFQsIHBy
b2NfdCAqcmVzdHJpY3QgY29ucwogICAgIHAtPmVnaWQgPSBzYi5zdF9naWQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgLyogbmVlZCBhIHdheSB0byBnZXQgcmVhbCBnaWQgKi8KIAogICAgIGlmIChm
bGFncyAmIFBST0NfRklMTFNUQVQpIHsgICAgICAgICAgICAgICAgLy8gcmVhZCAvcHJvYy8jL3N0
YXQKLSAgICAgICAgaWYgKGZpbGUyc3RyKHBhdGgsICJzdGF0IiwgJnViKSA9PSAtMSkKKyAgICAg
ICAgaWYgKGZpbGUyc3RyKHBhdGgsIHAtPmRmZCwgInN0YXQiLCAmdWIpID09IC0xKQogICAgICAg
ICAgICAgZ290byBuZXh0X3Byb2M7CiAgICAgICAgIHJjICs9IHN0YXQycHJvYyh1Yi5idWYsIHAp
OwogICAgIH0KIAogICAgIGlmIChmbGFncyAmIFBST0NfRklMTElPKSB7ICAgICAgICAgICAgICAg
ICAgLy8gcmVhZCAvcHJvYy8jL2lvCi0gICAgICAgIGlmIChmaWxlMnN0cihwYXRoLCAiaW8iLCAm
dWIpICE9IC0xKQorICAgICAgICBpZiAoZmlsZTJzdHIocGF0aCwgcC0+ZGZkLCAiaW8iLCAmdWIp
ICE9IC0xKQogICAgICAgICAgICAgaW8ycHJvYyh1Yi5idWYsIHApOwogICAgIH0KIAogICAgIGlm
IChmbGFncyAmIFBST0NfRklMTFNNQVBTKSB7ICAgICAgICAgICAgICAgLy8gcmVhZCAvcHJvYy8j
L3NtYXBzX3JvbGx1cAotICAgICAgICBpZiAoZmlsZTJzdHIocGF0aCwgInNtYXBzX3JvbGx1cCIs
ICZ1YikgIT0gLTEpCisgICAgICAgIGlmIChmaWxlMnN0cihwYXRoLCBwLT5kZmQsICJzbWFwc19y
b2xsdXAiLCAmdWIpICE9IC0xKQogICAgICAgICAgICAgc21hcHMycHJvYyh1Yi5idWYsIHApOwog
ICAgIH0KIAogICAgIGlmIChmbGFncyAmIFBST0NfRklMTE1FTSkgeyAgICAgICAgICAgICAgICAg
Ly8gcmVhZCAvcHJvYy8jL3N0YXRtCi0gICAgICAgIGlmIChmaWxlMnN0cihwYXRoLCAic3RhdG0i
LCAmdWIpICE9IC0xKQorICAgICAgICBpZiAoZmlsZTJzdHIocGF0aCwgcC0+ZGZkLCAic3RhdG0i
LCAmdWIpICE9IC0xKQogICAgICAgICAgICAgc3RhdG0ycHJvYyh1Yi5idWYsIHApOwogICAgIH0K
IAogICAgIGlmIChmbGFncyAmIFBST0NfRklMTFNUQVRVUykgeyAgICAgICAgICAgICAgLy8gcmVh
ZCAvcHJvYy8jL3N0YXR1cwotICAgICAgICBpZiAoZmlsZTJzdHIocGF0aCwgInN0YXR1cyIsICZ1
YikgIT0gLTEpeworICAgICAgICBpZiAoZmlsZTJzdHIocGF0aCwgcC0+ZGZkLCAic3RhdHVzIiwg
JnViKSAhPSAtMSl7CiAgICAgICAgICAgICByYyArPSBzdGF0dXMycHJvYyh1Yi5idWYsIHAsIDEp
OwogICAgICAgICAgICAgaWYgKGZsYWdzICYgKFBST0NfRklMTF9TVVBHUlAgJiB+UFJPQ19GSUxM
U1RBVFVTKSkKICAgICAgICAgICAgICAgICByYyArPSBzdXBncnBzX2Zyb21fc3VwZ2lkcyhwKTsK
QEAgLTExODMsMjcgKzEyMDEsMjcgQEAgc3RhdGljIHByb2NfdCAqc2ltcGxlX3JlYWRwcm9jKFBS
T0NUQUIgKnJlc3RyaWN0IGNvbnN0IFBULCBwcm9jX3QgKnJlc3RyaWN0IGNvbnMKICAgICAgICAg
cC0+ZWdyb3VwID0gcHdjYWNoZV9nZXRfZ3JvdXAocC0+ZWdpZCk7CiAKICAgICBpZiAoZmxhZ3Mg
JiBQUk9DX0ZJTExFTlYpICAgICAgICAgICAgICAgICAgIC8vIHJlYWQgL3Byb2MvIy9lbnZpcm9u
Ci0gICAgICAgIGlmICghKHAtPmVudmlyb25fdiA9IGZpbGUyc3RydmVjKHBhdGgsICJlbnZpcm9u
IikpKQorICAgICAgICBpZiAoIShwLT5lbnZpcm9uX3YgPSBmaWxlMnN0cnZlYyhwYXRoLCBwLT5k
ZmQsICJlbnZpcm9uIikpKQogICAgICAgICAgICAgcmMgKz0gdmVjdG9yaXplX2Rhc2hfcmMoJnAt
PmVudmlyb25fdik7CiAgICAgaWYgKGZsYWdzICYgUFJPQ19FRElURU5WUkNWVCkKICAgICAgICAg
cmMgKz0gZmlsbF9lbnZpcm9uX2N2dChwYXRoLCBwKTsKIAogICAgIGlmIChmbGFncyAmIFBST0Nf
RklMTEFSRykgICAgICAgICAgICAgICAgICAgLy8gcmVhZCAvcHJvYy8jL2NtZGxpbmUKLSAgICAg
ICAgaWYgKCEocC0+Y21kbGluZV92ID0gZmlsZTJzdHJ2ZWMocGF0aCwgImNtZGxpbmUiKSkpCisg
ICAgICAgIGlmICghKHAtPmNtZGxpbmVfdiA9IGZpbGUyc3RydmVjKHBhdGgsIHAtPmRmZCwgImNt
ZGxpbmUiKSkpCiAgICAgICAgICAgICByYyArPSB2ZWN0b3JpemVfZGFzaF9yYygmcC0+Y21kbGlu
ZV92KTsKICAgICBpZiAoZmxhZ3MgJiBQUk9DX0VESVRDTURMQ1ZUKQogICAgICAgICByYyArPSBm
aWxsX2NtZGxpbmVfY3Z0KHBhdGgsIHApOwogCiAgICAgaWYgKChmbGFncyAmIFBST0NfRklMTENH
Uk9VUCkpICAgICAgICAgICAgICAvLyByZWFkIC9wcm9jLyMvY2dyb3VwCi0gICAgICAgIGlmICgh
KHAtPmNncm91cF92ID0gZmlsZTJzdHJ2ZWMocGF0aCwgImNncm91cCIpKSkKKyAgICAgICAgaWYg
KCEocC0+Y2dyb3VwX3YgPSBmaWxlMnN0cnZlYyhwYXRoLCBwLT5kZmQsICJjZ3JvdXAiKSkpCiAg
ICAgICAgICAgICByYyArPSB2ZWN0b3JpemVfZGFzaF9yYygmcC0+Y2dyb3VwX3YpOwogICAgIGlm
IChmbGFncyAmIFBST0NfRURJVENHUlBDVlQpCiAgICAgICAgIHJjICs9IGZpbGxfY2dyb3VwX2N2
dChwYXRoLCBwKTsKIAogICAgIGlmIChmbGFncyAmIFBST0NfRklMTE9PTSkgewotICAgICAgICBp
ZiAoZmlsZTJzdHIocGF0aCwgIm9vbV9zY29yZSIsICZ1YikgIT0gLTEpCisgICAgICAgIGlmIChm
aWxlMnN0cihwYXRoLCBwLT5kZmQsICJvb21fc2NvcmUiLCAmdWIpICE9IC0xKQogICAgICAgICAg
ICAgb29tc2NvcmUycHJvYyh1Yi5idWYsIHApOwotICAgICAgICBpZiAoZmlsZTJzdHIocGF0aCwg
Im9vbV9zY29yZV9hZGoiLCAmdWIpICE9IC0xKQorICAgICAgICBpZiAoZmlsZTJzdHIocGF0aCwg
cC0+ZGZkLCAib29tX3Njb3JlX2FkaiIsICZ1YikgIT0gLTEpCiAgICAgICAgICAgICBvb21hZGoy
cHJvYyh1Yi5idWYsIHApOwogICAgIH0KIApAQCAtMTIxNSwxMyArMTIzMywxMyBAQCBzdGF0aWMg
cHJvY190ICpzaW1wbGVfcmVhZHByb2MoUFJPQ1RBQiAqcmVzdHJpY3QgY29uc3QgUFQsIHByb2Nf
dCAqcmVzdHJpY3QgY29ucwogICAgICAgICByYyArPSBzZDJwcm9jKHApOwogCiAgICAgaWYgKGZs
YWdzICYgUFJPQ19GSUxMX0xYQykgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSB0aGUgbHhjIG5h
bWUKLSAgICAgICAgcC0+bHhjbmFtZSA9IGx4Y19jb250YWluZXJzKHBhdGgpOworICAgICAgICBw
LT5seGNuYW1lID0gbHhjX2NvbnRhaW5lcnMocGF0aCwgcC0+ZGZkKTsKIAogICAgIGlmIChmbGFn
cyAmIFBST0NfRklMTF9MVUlEKSAgICAgICAgICAgICAgICAgLy8gdmFsdWUgdGhlIGxvZ2luIHVz
ZXIgaWQKICAgICAgICAgcC0+bHVpZCA9IGxvZ2luX3VpZChwYXRoKTsKIAogICAgIGlmIChmbGFn
cyAmIFBST0NfRklMTF9FWEUpIHsKLSAgICAgICAgaWYgKCEocC0+ZXhlID0gcmVhZGxpbmtfZXhl
KHBhdGgpKSkKKyAgICAgICAgaWYgKCEocC0+ZXhlID0gcmVhZGxpbmtfZXhlKHBhdGgsIHAtPmRm
ZCkpKQogICAgICAgICAgICAgcmMgKz0gMTsKICAgICB9CiAKQEAgLTEyNjIsMjggKzEyODAsMjgg
QEAgc3RhdGljIHByb2NfdCAqc2ltcGxlX3JlYWR0YXNrKFBST0NUQUIgKnJlc3RyaWN0IGNvbnN0
IFBULCBwcm9jX3QgKnJlc3RyaWN0IGNvbnMKICAgICB0LT5lZ2lkID0gc2Iuc3RfZ2lkOyAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIG5lZWQgYSB3YXkgdG8gZ2V0IHJlYWwgZ2lkICovCiAKICAg
ICBpZiAoZmxhZ3MgJiBQUk9DX0ZJTExTVEFUKSB7ICAgICAgICAgICAgICAgIC8vIHJlYWQgL3By
b2MvIy90YXNrLyMvc3RhdAotICAgICAgICBpZiAoZmlsZTJzdHIocGF0aCwgInN0YXQiLCAmdWIp
ID09IC0xKQorICAgICAgICBpZiAoZmlsZTJzdHIocGF0aCwgdC0+ZGZkLCAic3RhdCIsICZ1Yikg
PT0gLTEpCiAgICAgICAgICAgICBnb3RvIG5leHRfdGFzazsKICAgICAgICAgcmMgKz0gc3RhdDJw
cm9jKHViLmJ1ZiwgdCk7CiAgICAgfQogCiAgICAgaWYgKGZsYWdzICYgUFJPQ19GSUxMSU8pIHsg
ICAgICAgICAgICAgICAgICAvLyByZWFkIC9wcm9jLyMvdGFzay8jL2lvCi0gICAgICAgIGlmIChm
aWxlMnN0cihwYXRoLCAiaW8iLCAmdWIpICE9IC0xKQorICAgICAgICBpZiAoZmlsZTJzdHIocGF0
aCwgdC0+ZGZkLCAiaW8iLCAmdWIpICE9IC0xKQogICAgICAgICAgICAgaW8ycHJvYyh1Yi5idWYs
IHQpOwogICAgIH0KIAogICAgIGlmIChmbGFncyAmIFBST0NfRklMTFNNQVBTKSB7ICAgICAgICAg
ICAgICAgLy8gcmVhZCAvcHJvYy8jL3Rhc2svIy9zbWFwc19yb2xsdXAKLSAgICAgICAgaWYgKGZp
bGUyc3RyKHBhdGgsICJzbWFwc19yb2xsdXAiLCAmdWIpICE9IC0xKQorICAgICAgICBpZiAoZmls
ZTJzdHIocGF0aCwgdC0+ZGZkLCAic21hcHNfcm9sbHVwIiwgJnViKSAhPSAtMSkKICAgICAgICAg
ICAgIHNtYXBzMnByb2ModWIuYnVmLCB0KTsKICAgICB9CiAKICAgICBpZiAoZmxhZ3MgJiBQUk9D
X0ZJTExNRU0pIHsgICAgICAgICAgICAgICAgIC8vIHJlYWQgL3Byb2MvIy90YXNrLyMvc3RhdG0K
LSAgICAgICAgaWYgKGZpbGUyc3RyKHBhdGgsICJzdGF0bSIsICZ1YikgIT0gLTEpCisgICAgICAg
IGlmIChmaWxlMnN0cihwYXRoLCB0LT5kZmQsICJzdGF0bSIsICZ1YikgIT0gLTEpCiAgICAgICAg
ICAgICBzdGF0bTJwcm9jKHViLmJ1ZiwgdCk7CiAgICAgfQogCiAgICAgaWYgKGZsYWdzICYgUFJP
Q19GSUxMU1RBVFVTKSB7ICAgICAgICAgICAgICAvLyByZWFkIC9wcm9jLyMvdGFzay8jL3N0YXR1
cwotICAgICAgICBpZiAoZmlsZTJzdHIocGF0aCwgInN0YXR1cyIsICZ1YikgIT0gLTEpIHsKKyAg
ICAgICAgaWYgKGZpbGUyc3RyKHBhdGgsIHQtPmRmZCwgInN0YXR1cyIsICZ1YikgIT0gLTEpIHsK
ICAgICAgICAgICAgIHJjICs9IHN0YXR1czJwcm9jKHViLmJ1ZiwgdCwgMCk7CiAgICAgICAgICAg
ICBpZiAoZmxhZ3MgJiAoUFJPQ19GSUxMX1NVUEdSUCAmIH5QUk9DX0ZJTExTVEFUVVMpKQogICAg
ICAgICAgICAgICAgIHJjICs9IHN1cGdycHNfZnJvbV9zdXBnaWRzKHQpOwpAQCAtMTMxMSwxOSAr
MTMyOSwxOSBAQCBzdGF0aWMgcHJvY190ICpzaW1wbGVfcmVhZHRhc2soUFJPQ1RBQiAqcmVzdHJp
Y3QgY29uc3QgUFQsIHByb2NfdCAqcmVzdHJpY3QgY29ucwogICAgIGlmICghSVNfVEhSRUFEKHQp
KSB7CiAjZW5kaWYKICAgICBpZiAoZmxhZ3MgJiBQUk9DX0ZJTExBUkcpICAgICAgICAgICAgICAg
ICAgIC8vIHJlYWQgL3Byb2MvIy90YXNrLyMvY21kbGluZQotICAgICAgICBpZiAoISh0LT5jbWRs
aW5lX3YgPSBmaWxlMnN0cnZlYyhwYXRoLCAiY21kbGluZSIpKSkKKyAgICAgICAgaWYgKCEodC0+
Y21kbGluZV92ID0gZmlsZTJzdHJ2ZWMocGF0aCwgdC0+ZGZkLCAiY21kbGluZSIpKSkKICAgICAg
ICAgICAgIHJjICs9IHZlY3Rvcml6ZV9kYXNoX3JjKCZ0LT5jbWRsaW5lX3YpOwogICAgIGlmIChm
bGFncyAmIFBST0NfRURJVENNRExDVlQpCiAgICAgICAgIHJjICs9IGZpbGxfY21kbGluZV9jdnQo
cGF0aCwgdCk7CiAKICAgICBpZiAoZmxhZ3MgJiBQUk9DX0ZJTExFTlYpICAgICAgICAgICAgICAg
ICAgIC8vIHJlYWQgL3Byb2MvIy90YXNrLyMvZW52aXJvbgotICAgICAgICBpZiAoISh0LT5lbnZp
cm9uX3YgPSBmaWxlMnN0cnZlYyhwYXRoLCAiZW52aXJvbiIpKSkKKyAgICAgICAgaWYgKCEodC0+
ZW52aXJvbl92ID0gZmlsZTJzdHJ2ZWMocGF0aCwgdC0+ZGZkLCAiZW52aXJvbiIpKSkKICAgICAg
ICAgICAgIHJjICs9IHZlY3Rvcml6ZV9kYXNoX3JjKCZ0LT5lbnZpcm9uX3YpOwogICAgIGlmIChm
bGFncyAmIFBST0NfRURJVEVOVlJDVlQpCiAgICAgICAgIHJjICs9IGZpbGxfZW52aXJvbl9jdnQo
cGF0aCwgdCk7CiAKICAgICBpZiAoKGZsYWdzICYgUFJPQ19GSUxMQ0dST1VQKSkgICAgICAgICAg
ICAgIC8vIHJlYWQgL3Byb2MvIy90YXNrLyMvY2dyb3VwCi0gICAgICAgIGlmICghKHQtPmNncm91
cF92ID0gZmlsZTJzdHJ2ZWMocGF0aCwgImNncm91cCIpKSkKKyAgICAgICAgaWYgKCEodC0+Y2dy
b3VwX3YgPSBmaWxlMnN0cnZlYyhwYXRoLCB0LT5kZmQsICJjZ3JvdXAiKSkpCiAgICAgICAgICAg
ICByYyArPSB2ZWN0b3JpemVfZGFzaF9yYygmdC0+Y2dyb3VwX3YpOwogICAgIGlmIChmbGFncyAm
IFBST0NfRURJVENHUlBDVlQpCiAgICAgICAgIHJjICs9IGZpbGxfY2dyb3VwX2N2dChwYXRoLCB0
KTsKQEAgLTEzMzIsNyArMTM1MCw3IEBAIHN0YXRpYyBwcm9jX3QgKnNpbXBsZV9yZWFkdGFzayhQ
Uk9DVEFCICpyZXN0cmljdCBjb25zdCBQVCwgcHJvY190ICpyZXN0cmljdCBjb25zCiAgICAgICAg
IHJjICs9IHNkMnByb2ModCk7CiAKICAgICBpZiAoZmxhZ3MgJiBQUk9DX0ZJTExfRVhFKSB7Ci0g
ICAgICAgIGlmICghKHQtPmV4ZSA9IHJlYWRsaW5rX2V4ZShwYXRoKSkpCisgICAgICAgIGlmICgh
KHQtPmV4ZSA9IHJlYWRsaW5rX2V4ZShwYXRoLCB0LT5kZmQpKSkKICAgICAgICAgICAgIHJjICs9
IDE7CiAgICAgfQogI2lmZGVmIEZBTFNFX1RIUkVBRFMKQEAgLTEzNDAsMTYgKzEzNTgsMTYgQEAg
c3RhdGljIHByb2NfdCAqc2ltcGxlX3JlYWR0YXNrKFBST0NUQUIgKnJlc3RyaWN0IGNvbnN0IFBU
LCBwcm9jX3QgKnJlc3RyaWN0IGNvbnMKICNlbmRpZgogCiAgICAgaWYgKGZsYWdzICYgUFJPQ19G
SUxMT09NKSB7Ci0gICAgICAgIGlmIChmaWxlMnN0cihwYXRoLCAib29tX3Njb3JlIiwgJnViKSAh
PSAtMSkKKyAgICAgICAgaWYgKGZpbGUyc3RyKHBhdGgsIHQtPmRmZCwgIm9vbV9zY29yZSIsICZ1
YikgIT0gLTEpCiAgICAgICAgICAgICBvb21zY29yZTJwcm9jKHViLmJ1ZiwgdCk7Ci0gICAgICAg
IGlmIChmaWxlMnN0cihwYXRoLCAib29tX3Njb3JlX2FkaiIsICZ1YikgIT0gLTEpCisgICAgICAg
IGlmIChmaWxlMnN0cihwYXRoLCB0LT5kZmQsICJvb21fc2NvcmVfYWRqIiwgJnViKSAhPSAtMSkK
ICAgICAgICAgICAgIG9vbWFkajJwcm9jKHViLmJ1ZiwgdCk7CiAgICAgfQogICAgIGlmIChmbGFn
cyAmIFBST0NfRklMTE5TKSAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCAvcHJvYy8jL3Rhc2sv
Iy9ucy8qCiAgICAgICAgIHByb2Nwc19uc19yZWFkX3BpZCh0LT50aWQsICYodC0+bnMpKTsKIAog
ICAgIGlmIChmbGFncyAmIFBST0NfRklMTF9MWEMpCi0gICAgICAgIHQtPmx4Y25hbWUgPSBseGNf
Y29udGFpbmVycyhwYXRoKTsKKyAgICAgICAgdC0+bHhjbmFtZSA9IGx4Y19jb250YWluZXJzKHBh
dGgsIHQtPmRmZCk7CiAKICAgICBpZiAoZmxhZ3MgJiBQUk9DX0ZJTExfTFVJRCkKICAgICAgICAg
dC0+bHVpZCA9IGxvZ2luX3VpZChwYXRoKTsKQEAgLTEzNzgsNiArMTM5NiwxMCBAQCBzdGF0aWMg
aW50IHNpbXBsZV9uZXh0cGlkKFBST0NUQUIgKnJlc3RyaWN0IGNvbnN0IFBULCBwcm9jX3QgKnJl
c3RyaWN0IGNvbnN0IHApCiAgICAgICAgICAgICBwLT50Z2lkID0gc3RydG91bChlbnQtPmRfbmFt
ZSwgTlVMTCwgMTApOwogICAgICAgICAgICAgaWYgKGVycm5vID09IDApIHsKICAgICAgICAgICAg
ICAgICBwLT50aWQgPSBwLT50Z2lkOworICAgICAgICAgICAgICAgIGlmIChQVC0+cHJvY2ZzX2Zk
ID49IDApCisgICAgICAgICAgICAgICAgICAgIHAtPmRmZCA9IG9wZW5hdChQVC0+cHJvY2ZzX2Zk
LCBlbnQtPmRfbmFtZSwgT19QQVRIIHwgT19ESVJFQ1RPUlkpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgcC0+ZGZkID0gLTE7CiAgICAgICAgICAgICAgICAgc25w
cmludGYocGF0aCwgUFJPQ1BBVEhMRU4sICIvcHJvYy8lZCIsIHAtPnRnaWQpOwogICAgICAgICAg
ICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgfQpAQCAtMTM5NSwxMSArMTQxNywyNCBAQCBz
dGF0aWMgaW50IHNpbXBsZV9uZXh0dGlkKFBST0NUQUIgKnJlc3RyaWN0IGNvbnN0IFBULCBjb25z
dCBwcm9jX3QgKnJlc3RyaWN0IGNvbgogICBpZihQVC0+dGFza2Rpcl91c2VyICE9IHAtPnRnaWQp
ewogICAgIGlmKFBULT50YXNrZGlyKXsKICAgICAgIGNsb3NlZGlyKFBULT50YXNrZGlyKTsKKwog
ICAgIH0KKyAgICBpZiAoUFQtPnRhc2tkaXJfZmQgPj0gMCkKKyAgICAgICAgY2xvc2UoUFQtPnRh
c2tkaXJfZmQpOwogICAgIC8vIHVzZSAicGF0aCIgYXMgc29tZSB0bXAgc3BhY2UKLSAgICBzbnBy
aW50ZihwYXRoLCBQUk9DUEFUSExFTiwgIi9wcm9jLyVkL3Rhc2siLCBwLT50Z2lkKTsKLSAgICBQ
VC0+dGFza2RpciA9IG9wZW5kaXIocGF0aCk7Ci0gICAgaWYoIVBULT50YXNrZGlyKSByZXR1cm4g
MDsKKyAgICBpZiAocC0+ZGZkID49IDApIHsKKyAgICAgICAgUFQtPnRhc2tkaXJfZmQgPSBvcGVu
YXQocC0+ZGZkLCAidGFzayIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpOworICAgICAgICBpZiAo
UFQtPnRhc2tkaXJfZmQgPCAwKSByZXR1cm4gMDsKKyAgICAgICAgUFQtPnRhc2tkaXIgPSBmZG9w
ZW5kaXIoUFQtPnRhc2tkaXJfZmQpOworICAgICAgICBpZighUFQtPnRhc2tkaXIpIHsKKyAgICAg
ICAgICAgIGNsb3NlKFBULT50YXNrZGlyX2ZkKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc25wcmludGYocGF0aCwgUFJPQ1BBVEhMRU4s
ICIvcHJvYy8lZC90YXNrIiwgcC0+dGdpZCk7CisgICAgICAgIFBULT50YXNrZGlyID0gb3BlbmRp
cihwYXRoKTsKKyAgICAgICAgaWYoIVBULT50YXNrZGlyKSByZXR1cm4gMDsKKyAgICB9CiAgICAg
UFQtPnRhc2tkaXJfdXNlciA9IHAtPnRnaWQ7CiAgIH0KICAgZm9yICg7OykgewpAQCAtMTQxMCw2
ICsxNDQ1LDggQEAgc3RhdGljIGludCBzaW1wbGVfbmV4dHRpZChQUk9DVEFCICpyZXN0cmljdCBj
b25zdCBQVCwgY29uc3QgcHJvY190ICpyZXN0cmljdCBjb24KICAgdC0+dGlkID0gc3RydG91bChl
bnQtPmRfbmFtZSwgTlVMTCwgMTApOwogICB0LT50Z2lkID0gcC0+dGdpZDsKIC8vdC0+cHBpZCA9
IHAtPnBwaWQ7ICAvLyBjb3ZlciBmb3Iga2VybmVsIGJlaGF2aW9yPyB3ZSB3YW50IGJvdGggYWN0
dWFsbHkuLi4/CisgIGlmIChQVC0+dGFza2Rpcl9mZCA+PSAwKQorICAgICAgdC0+ZGZkID0gb3Bl
bmF0KFBULT50YXNrZGlyX2ZkLCBlbnQtPmRfbmFtZSwgT19QQVRIIHwgT19ESVJFQ1RPUlkpOwog
ICBzbnByaW50ZihwYXRoLCBQUk9DUEFUSExFTiwgIi9wcm9jLyVkL3Rhc2svJS4xMHMiLCBwLT50
Z2lkLCBlbnQtPmRfbmFtZSk7CiAgIHJldHVybiAxOwogfQpAQCAtMTQyNCw2ICsxNDYxLDEwIEBA
IHN0YXRpYyBpbnQgbGlzdGVkX25leHRwaWQgKFBST0NUQUIgKlBULCBwcm9jX3QgKnApIHsKICAg
Y2hhciAqcGF0aCA9IFBULT5wYXRoOwogCiAgIGlmIChwaWQpIHsKKyAgICBpZiAoUFQtPnByb2Nm
c19mZCA+PSAwKXsKKyAgICAgIHNucHJpbnRmKHBhdGgsIFBST0NQQVRITEVOLCAiJWQiLCBwaWQp
OworICAgICAgcC0+ZGZkID0gb3BlbmF0KFBULT5wcm9jZnNfZmQsIHBhdGgsIE9fUEFUSCB8IE9f
RElSRUNUT1JZKTsKKyAgICB9CiAgICAgc25wcmludGYocGF0aCwgUFJPQ1BBVEhMRU4sICIvcHJv
Yy8lZCIsIHBpZCk7CiAgICAgcC0+dGlkID0gcC0+dGdpZCA9IHBpZDsgICAgICAgIC8vIHRoaXMg
dGdpZCBtYXkgYmUgYSBodWdlIGZpYiB8CiAKQEAgLTE0MzIsNyArMTQ3Myw3IEBAIHN0YXRpYyBp
bnQgbGlzdGVkX25leHRwaWQgKFBST0NUQUIgKlBULCBwcm9jX3QgKnApIHsKICAgICAgICBkZWFs
aW5nIHdpdGggZmV3ZXIgcHJvY2Vzc2VzLCB1bmxpa2UgdGhlIG90aGVyICduZXh0JyBndXlzIHwK
ICAgICAgICAocGx1cyB3ZSBuZWVkIG5vdCBwYXJzZSB0aGUgd2hvbGUgdGhpbmcgbGlrZSBzdGF0
dXMycHJvYykhIHwgKi8KIAotICAgIGlmIChmaWxlMnN0cihwYXRoLCAic3RhdHVzIiwgJnViKSAh
PSAtMSkgeworICAgIGlmIChmaWxlMnN0cihwYXRoLCBwLT5kZmQsICJzdGF0dXMiLCAmdWIpICE9
IC0xKSB7CiAgICAgICBjaGFyICpzdHIgPSBzdHJzdHIodWIuYnVmLCAiVGdpZDoiKTsKICAgICAg
IGlmIChzdHIpCiAgICAgICAgIHAtPnRnaWQgPSBhdG9pKHN0ciArIDUpOyAgIC8vIHRoaXMgdGdp
ZCBpcyB0aGUgcHJvcGVyIG9uZSB8CkBAIC0xNDc4LDcgKzE1MTksNyBAQCBvdXQ6CiAvLyB0aGUg
bmV4dCB1bmlxdWUgcHJvY2VzcyBvciB0YXNrIGF2YWlsYWJsZS4gIElmIG5vIG1vcmUgYXJlIGF2
YWlsYWJsZSwKIC8vIHJldHVybiBhIG51bGwgcG9pbnRlciAoYm9vbGVhbiBmYWxzZSkuCiBwcm9j
X3QgKnJlYWRlaXRoZXIgKFBST0NUQUIgKnJlc3RyaWN0IGNvbnN0IFBULCBwcm9jX3QgKnJlc3Ry
aWN0IHgpIHsKLSAgICBzdGF0aWMgX190aHJlYWQgcHJvY190IHNrZWxfcDsgICAgLy8gc2tlbGV0
b24gcHJvY190LCBvbmx5IHVzZXMgdGlkICsgdGdpZAorICAgIHN0YXRpYyBfX3RocmVhZCBwcm9j
X3Qgc2tlbF9wOyAgICAvLyBza2VsZXRvbiBwcm9jX3QsIG9ubHkgdXNlcyB0aWQgKyB0Z2lkICsg
ZGZkCiAgICAgc3RhdGljIF9fdGhyZWFkIHByb2NfdCAqbmV3X3A7ICAgIC8vIGZvciBwcm9jZXNz
L3Rhc2sgdHJhbnNpdGlvbnMKICAgICBzdGF0aWMgX190aHJlYWQgaW50IGNhbmFyeSwgbGVhZGVy
OwogICAgIGNoYXIgcGF0aFtQUk9DUEFUSExFTl07CkBAIC0xNDk1LDcgKzE1MzYsNyBAQCBuZXh0
X3Byb2M6CiAgICAgbmV3X3AgPSBOVUxMOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKGVy
cm5vID09IEVOT01FTSkgZ290byBlbmRfcHJvY3M7Ci0gICAgICAgIC8vIGZpbGxzIGluIHRoZSBQ
VC0+cGF0aCwgcGx1cyBza2VsX3AudGlkIGFuZCBza2VsX3AudGdpZAorICAgICAgICAvLyBmaWxs
cyBpbiB0aGUgUFQtPnBhdGgsIHBsdXMgc2tlbC5kZmQsIHNrZWxfcC50aWQgYW5kIHNrZWxfcC50
Z2lkCiAgICAgICAgIGlmICghUFQtPmZpbmRlcihQVCwmc2tlbF9wKSkgZ290byBlbmRfcHJvY3M7
ICAgICAgIC8vIHNpbXBsZV9uZXh0cGlkCiAgICAgICAgIGxlYWRlciA9IHNrZWxfcC50aWQ7CiAg
ICAgICAgIGlmICghdGFza19kaXJfbWlzc2luZykgYnJlYWs7CkBAIC0xNTQxLDYgKzE1ODIsNyBA
QCBQUk9DVEFCICpvcGVucHJvYyh1bnNpZ25lZCBmbGFncywgLi4uKSB7CiAgICAgICAgIGRpZF9z
dGF0ID0gMTsKICAgICB9CiAgICAgUFQtPnRhc2tkaXIgPSBOVUxMOworICAgIFBULT50YXNrZGly
X2ZkID0gLTE7CiAgICAgUFQtPnRhc2tkaXJfdXNlciA9IC0xOwogICAgIFBULT50YXNrZmluZGVy
ID0gc2ltcGxlX25leHR0aWQ7CiAgICAgUFQtPnRhc2tyZWFkZXIgPSBzaW1wbGVfcmVhZHRhc2s7
CkBAIC0xNTQ4LDEwICsxNTkwLDI3IEBAIFBST0NUQUIgKm9wZW5wcm9jKHVuc2lnbmVkIGZsYWdz
LCAuLi4pIHsKICAgICBQVC0+cmVhZGVyID0gc2ltcGxlX3JlYWRwcm9jOwogICAgIGlmIChmbGFn
cyAmIFBST0NfUElEKXsKICAgICAgICAgUFQtPnByb2NmcyA9IE5VTEw7CisgICAgICAgIFBULT5w
cm9jZnNfZmQgPSAtMTsKICAgICAgICAgUFQtPmZpbmRlciA9IGxpc3RlZF9uZXh0cGlkOwogICAg
IH1lbHNlewotICAgICAgICBQVC0+cHJvY2ZzID0gb3BlbmRpcigiL3Byb2MiKTsKLSAgICAgICAg
aWYgKCFQVC0+cHJvY2ZzKSB7IGZyZWUoUFQpOyByZXR1cm4gTlVMTDsgfQorICAgICAgICBQVC0+
cHJvY2ZzX2ZkID0gb3BlbmF0KC0xLCAiL3Byb2MiLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTsK
KyAgICAgICAgaWYgKFBULT5wcm9jZnNfZmQgPj0gMCkgeworICAgICAgICAgICAgUFQtPnByb2Nm
cyA9IGZkb3BlbmRpcihQVC0+cHJvY2ZzX2ZkKTsKKyAgICAgICAgICAgIGlmICghUFQtPnByb2Nm
cykgeworICAgICAgICAgICAgICAgIGNsb3NlKFBULT5wcm9jZnNfZmQpOworICAgICAgICAgICAg
ICAgIGZyZWUoUFQpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKGVycm5vID09IEVOT1NZUykgeworICAgICAgICAgICAgUFQt
PnByb2NmcyA9IG9wZW5kaXIoIi9wcm9jIik7CisgICAgICAgICAgICBpZiAoIVBULT5wcm9jZnMp
IHsKKyAgICAgICAgICAgICAgICBmcmVlKFBUKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZyZWUoUFQp
OworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgUFQtPmZpbmRl
ciA9IHNpbXBsZV9uZXh0cGlkOwogICAgIH0KICAgICBQVC0+ZmxhZ3MgPSBmbGFnczsKQEAgLTE1
OTQsNyArMTY1MywxMCBAQCBQUk9DVEFCICpvcGVucHJvYyh1bnNpZ25lZCBmbGFncywgLi4uKSB7
CiB2b2lkIGNsb3NlcHJvYyhQUk9DVEFCICpQVCkgewogICAgIGlmIChQVCl7CiAgICAgICAgIGlm
IChQVC0+cHJvY2ZzKSBjbG9zZWRpcihQVC0+cHJvY2ZzKTsKKyAgICAgICAgaWYgKFBULT5wcm9j
ZnNfZmQgPj0gMCkgY2xvc2UoUFQtPnByb2Nmc19mZCk7CiAgICAgICAgIGlmIChQVC0+dGFza2Rp
cikgY2xvc2VkaXIoUFQtPnRhc2tkaXIpOworICAgICAgICBpZiAoUFQtPnRhc2tkaXJfZmQgPj0g
MCkgY2xvc2UoUFQtPnRhc2tkaXJfZmQpOworCiAgICAgICAgIG1lbXNldChQVCwnIycsc2l6ZW9m
KFBST0NUQUIpKTsKICAgICAgICAgZnJlZShQVCk7CiAgICAgfQpAQCAtMTYwOCw3ICsxNjcwLDcg
QEAgaW50IGxvb2tfdXBfb3VyX3NlbGYodm9pZCkgewogICAgIHByb2NfdCBwOwogCiAgICAgbWVt
c2V0KCZwLCAwLCBzaXplb2YocHJvY190KSk7Ci0gICAgaWYoZmlsZTJzdHIoIi9wcm9jL3NlbGYi
LCAic3RhdCIsICZ1YikgPT0gLTEpeworICAgIGlmKGZpbGUyc3RyKCIvcHJvYy9zZWxmIiwgLTEs
ICJzdGF0IiwgJnViKSA9PSAtMSl7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IsIGRv
IHRoaXM6IG1vdW50IC10IHByb2MgcHJvYyAvcHJvY1xuIik7CiAgICAgICAgIF9leGl0KDQ3KTsK
ICAgICB9Ci0tIAoyLjM1LjEKCg==
--00000000000022a0b105f2aff874--