Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rZth9-0071Nf-Qg for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Feb 2024 14:23:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rZth8-000Hgp-33 for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Feb 2024 14:23:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rZth7-000Hgf-Ct for pgsql-hackers@lists.postgresql.org; Tue, 13 Feb 2024 14:23:33 +0000 Received: from meesny.iki.fi ([2001:67c:2b0:1c1::201]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rZth1-006YJk-9X for pgsql-hackers@postgresql.org; Tue, 13 Feb 2024 14:23:32 +0000 Received: from [192.168.170.196] (mobile-access-5d6aa1-129.dhcp.inet.fi [93.106.161.129]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by meesny.iki.fi (Postfix) with ESMTPSA id 4TZ3TQ0x88zyNf for ; Tue, 13 Feb 2024 16:23:21 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1707834202; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=JKdaOj7jz0VbXAJfBgkDXsU20MTIdUoYTfu8+oOez7Y=; b=syrOf87enGviuMbkyv3c3cJ1taQyW6eDmwLNMcQmjG1rkCN4QG4QrL6jei32flSW3hIJiq OhW/RVTNcrFzJr1RuAlXOTvQNwcSXk5kWXq8BaYEYRHVU6wLmuM5vK9uW35Gmnr7MiyjaQ RyK4Jnv60Qe9uAscDaKJ7/iHKzHs+88= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1707834202; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=JKdaOj7jz0VbXAJfBgkDXsU20MTIdUoYTfu8+oOez7Y=; b=hRow55X6VhkUY5VuxTqKI4EiLVEc4tTCyQIgPWblDBZeXJzCivs93B2gUgYioiqy2RrhuW 8/E6wGbygGHXXwIvaLmwrz2KEhvLaRmaVAdiDIhaVIWsk0VFL/s0klIp2ZWKlER98KosTM IwHq5Vl2nCoGBL47milO5w/lkPh7Ziw= ARC-Seal: i=1; s=meesny; d=iki.fi; t=1707834202; a=rsa-sha256; cv=none; b=FuzMGBh67AjjIDwwQQeK95tmiHmtcoAVG0zRjguioaRj6VjrnZuNnL7pyKwVgbMYAhaf2y fsJUyFxZy5HOiydG7PJZBS5rHLkqFtZyB3rvLTkmvTP20sIhqG+Jr9oFmbXEE8XAOi1UoW TbM3FpoLVmt7tHLOUiW0i3/7jI/ypBw= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------TYzg6GYfB3AafCuaYPJAGdR6" Message-ID: <6030bdec-0de1-4da2-b0b3-335007eae97f@iki.fi> Date: Tue, 13 Feb 2024 16:23:20 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: DSA_ALLOC_NO_OOM doesn't work Content-Language: en-US From: Heikki Linnakangas To: pgsql-hackers References: <5efa4a5e-2b8b-42dd-80ed-f920718cf5c0@iki.fi> In-Reply-To: <5efa4a5e-2b8b-42dd-80ed-f920718cf5c0@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------TYzg6GYfB3AafCuaYPJAGdR6 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit (moving to pgsql-hackers) On 29/01/2024 14:06, Heikki Linnakangas wrote: > If you call dsa_allocate_extended(DSA_ALLOC_NO_OOM), it will still > ereport an error if you run out of space (originally reported at [0]). > > Attached patch adds code to test_dsa.c to demonstrate that: > > postgres=# select test_dsa_basic(); > ERROR: could not resize shared memory segment "/PostgreSQL.1312700148" > to 1075843072 bytes: No space left on device > > [0] https://github.com/pgvector/pgvector/issues/434#issuecomment-1912744489 I wrote the attached patch to address this, in a fairly straightforward or naive way. The problem was that even though dsa_allocate() had code to check the return value of dsm_create(), and return NULL instead of ereport(ERROR) if the DSA_ALLOC_NO_OOM was set, dsm_create() does not in fact return NULL on OOM. To fix, I added a DSM_CREATE_NO_OOM option to dsm_create(), and I also had to punch that through to dsm_impl_op(). This is a little unpolished, but if we want to backpatch something narrow now, this would probably be the right approach. However, I must say that the dsm_impl_op() interface is absolutely insane. It's like someone looked at ioctl() and thought, "hey that's a great idea!". It mixes all different operations like creating or destroying a DSM segment together into one function call, and the return value is just a boolean, even though the function could fail for many different reasons, and the callers do in fact care about the reason. In a more natural interface, the different operations would have very different function signatures. I think we must refactor that. It might be best to leave this DSA_ALLOC_NO_OOM bug unfixed in backpatches, and fix it on top of the refactorings on master only. Later, we can backpatch the refactorings too if we're comfortable with it; extensions shouldn't be using the dsm_impl_op() interface directly. (I skimmed through the thread where the DSM code was added, but didn't see any mention of why dsm_impl_op() signature is like that: https://www.postgresql.org/message-id/CA%2BTgmoaDqDUgt%3D4Zs_QPOnBt%3DEstEaVNP%2B5t%2Bm%3DFPNWshiPR3A%40mail.gmail.com) -- Heikki Linnakangas Neon (https://neon.tech) --------------TYzg6GYfB3AafCuaYPJAGdR6 Content-Type: text/x-patch; charset=UTF-8; name="0001-Add-test.patch" Content-Disposition: attachment; filename="0001-Add-test.patch" Content-Transfer-Encoding: base64 RnJvbSBiNjBmODc3YWQ2N2U3MGI2MDkxNWIyYjI1ZDBkYmFlNjk3MmMzNTM2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTMgRmViIDIwMjQgMTQ6MjI6MTAgKzAyMDAK U3ViamVjdDogW1BBVENIIDEvMl0gQWRkIHRlc3QKCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3 LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvNWVmYTRhNWUtMmI4Yi00MmRkLTgwZWQtZjky MDcxOGNmNWMwQGlraS5maQotLS0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2EvdGVzdF9k c2EuYyB8IDEzICsrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzYS90ZXN0X2RzYS5j IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzYS90ZXN0X2RzYS5jCmluZGV4IDg0NDMxNmRl YzJiLi5mMzdlYjU3ZTk5ZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rz YS90ZXN0X2RzYS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2EvdGVzdF9kc2Eu YwpAQCAtNTEsNiArNTEsMTkgQEAgdGVzdF9kc2FfYmFzaWMoUEdfRlVOQ1RJT05fQVJHUykK IAlmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKQogCXsKIAkJZHNhX2ZyZWUoYSwgcFtp XSk7CisJCXBbaV0gPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwl9CisKKwlmb3IgKGludCBpID0g MDsgaSA8IDEwMDsgaSsrKQorCQlwW2ldID0gZHNhX2FsbG9jYXRlX2V4dGVuZGVkKGEsIDEw MjQqMTAyNCoxMDI0LCBEU0FfQUxMT0NfTk9fT09NIHwgRFNBX0FMTE9DX0hVR0UpOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKwl7CisJCWlmIChwW2ldICE9IEludmFs aWREc2FQb2ludGVyKQorCQl7CisJCQlkc2FfZnJlZShhLCBwW2ldKTsKKwkJCXBbaV0gPSBJ bnZhbGlkRHNhUG9pbnRlcjsKKwkJfQogCX0KIAogCWRzYV9kZXRhY2goYSk7Ci0tIAoyLjM5 LjIKCg== --------------TYzg6GYfB3AafCuaYPJAGdR6 Content-Type: text/x-patch; charset=UTF-8; name="0002-Fix-DSA_ALLOC_NO_OOM.patch" Content-Disposition: attachment; filename="0002-Fix-DSA_ALLOC_NO_OOM.patch" Content-Transfer-Encoding: base64 RnJvbSBmYjIwZDU1MTExZDcyNmRjYTI0N2IyMTExYTE3NWYzMGQ0MTJlMzVhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTMgRmViIDIwMjQgMTU6NTI6NDggKzAyMDAK U3ViamVjdDogW1BBVENIIDIvMl0gRml4IERTQV9BTExPQ19OT19PT00KCi0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2NvbW1vbi9zZXNzaW9uLmMgICB8ICAyICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jIHwgIDIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2RzbS5jICAgICAgICAgfCA0MyArKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvZHNtX2ltcGwuYyAgICB8IDg0ICsrKysrKysrKysrKysrKysrKysrLS0tLS0t LQogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9kc2EuYyAgICAgICAgICB8ICAyICstCiBzcmMv aW5jbHVkZS9zdG9yYWdlL2RzbS5oICAgICAgICAgICAgIHwgIDEgKwogc3JjL2luY2x1ZGUv c3RvcmFnZS9kc21faW1wbC5oICAgICAgICB8ICA0ICstCiA3IGZpbGVzIGNoYW5nZWQsIDk3 IGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9jb21tb24vc2Vzc2lvbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1v bi9zZXNzaW9uLmMKaW5kZXggM2YyMjU2ZjQ5MTUuLjVkNGZlNmRiYjdhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3Nlc3Npb24uYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL3Nlc3Npb24uYwpAQCAtMTAyLDcgKzEwMiw3IEBAIEdldFNlc3Np b25Ec21IYW5kbGUodm9pZCkKIAogCS8qIFNldCB1cCBzZWdtZW50IGFuZCBUT0MuICovCiAJ c2l6ZSA9IHNobV90b2NfZXN0aW1hdGUoJmVzdGltYXRvcik7Ci0Jc2VnID0gZHNtX2NyZWF0 ZShzaXplLCBEU01fQ1JFQVRFX05VTExfSUZfTUFYU0VHTUVOVFMpOworCXNlZyA9IGRzbV9j cmVhdGUoc2l6ZSwgRFNNX0NSRUFURV9OVUxMX0lGX01BWFNFR01FTlRTIHwgRFNNX0NSRUFU RV9OT19PT00pOwogCWlmIChzZWcgPT0gTlVMTCkKIAl7CiAJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRfY29udGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9wYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwu YwppbmRleCA4NDlhMDNlNGI2NS4uZGYxZTVlNzE0NWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vcGFyYWxsZWwuYwpAQCAtMzEyLDcgKzMxMiw3IEBAIEluaXRpYWxpemVQYXJh bGxlbERTTShQYXJhbGxlbENvbnRleHQgKnBjeHQpCiAJICovCiAJc2Vnc2l6ZSA9IHNobV90 b2NfZXN0aW1hdGUoJnBjeHQtPmVzdGltYXRvcik7CiAJaWYgKHBjeHQtPm53b3JrZXJzID4g MCkKLQkJcGN4dC0+c2VnID0gZHNtX2NyZWF0ZShzZWdzaXplLCBEU01fQ1JFQVRFX05VTExf SUZfTUFYU0VHTUVOVFMpOworCQlwY3h0LT5zZWcgPSBkc21fY3JlYXRlKHNlZ3NpemUsIERT TV9DUkVBVEVfTlVMTF9JRl9NQVhTRUdNRU5UUyB8IERTTV9DUkVBVEVfTk9fT09NKTsKIAlp ZiAocGN4dC0+c2VnICE9IE5VTEwpCiAJCXBjeHQtPnRvYyA9IHNobV90b2NfY3JlYXRlKFBB UkFMTEVMX01BR0lDLAogCQkJCQkJCQkgICBkc21fc2VnbWVudF9hZGRyZXNzKHBjeHQtPnNl ZyksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5jCmluZGV4IDZiMTIxMDhkZDEwLi4yZDI1OTZmYmUy ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMKQEAgLTIxNCw3ICsyMTQsNyBAQCBkc21fcG9z dG1hc3Rlcl9zdGFydHVwKFBHU2htZW1IZWFkZXIgKnNoaW0pCiAJCQljb250aW51ZTsKIAkJ aWYgKGRzbV9pbXBsX29wKERTTV9PUF9DUkVBVEUsIGRzbV9jb250cm9sX2hhbmRsZSwgc2Vn c2l6ZSwKIAkJCQkJCSZkc21fY29udHJvbF9pbXBsX3ByaXZhdGUsICZkc21fY29udHJvbF9h ZGRyZXNzLAotCQkJCQkJJmRzbV9jb250cm9sX21hcHBlZF9zaXplLCBFUlJPUikpCisJCQkJ CQkmZHNtX2NvbnRyb2xfbWFwcGVkX3NpemUsIEVSUk9SLCAwKSkKIAkJCWJyZWFrOwogCX0K IAlkc21fY29udHJvbCA9IGRzbV9jb250cm9sX2FkZHJlc3M7CkBAIC0yNTUsNyArMjU1LDcg QEAgZHNtX2NsZWFudXBfdXNpbmdfY29udHJvbF9zZWdtZW50KGRzbV9oYW5kbGUgb2xkX2Nv bnRyb2xfaGFuZGxlKQogCSAqIG91dCBxdWlldGx5LgogCSAqLwogCWlmICghZHNtX2ltcGxf b3AoRFNNX09QX0FUVEFDSCwgb2xkX2NvbnRyb2xfaGFuZGxlLCAwLCAmaW1wbF9wcml2YXRl LAotCQkJCQkgJm1hcHBlZF9hZGRyZXNzLCAmbWFwcGVkX3NpemUsIERFQlVHMSkpCisJCQkJ CSAmbWFwcGVkX2FkZHJlc3MsICZtYXBwZWRfc2l6ZSwgREVCVUcxLCAwKSkKIAkJcmV0dXJu OwogCiAJLyoKQEAgLTI2Niw3ICsyNjYsNyBAQCBkc21fY2xlYW51cF91c2luZ19jb250cm9s X3NlZ21lbnQoZHNtX2hhbmRsZSBvbGRfY29udHJvbF9oYW5kbGUpCiAJaWYgKCFkc21fY29u dHJvbF9zZWdtZW50X3NhbmUob2xkX2NvbnRyb2wsIG1hcHBlZF9zaXplKSkKIAl7CiAJCWRz bV9pbXBsX29wKERTTV9PUF9ERVRBQ0gsIG9sZF9jb250cm9sX2hhbmRsZSwgMCwgJmltcGxf cHJpdmF0ZSwKLQkJCQkJJm1hcHBlZF9hZGRyZXNzLCAmbWFwcGVkX3NpemUsIExPRyk7CisJ CQkJCSZtYXBwZWRfYWRkcmVzcywgJm1hcHBlZF9zaXplLCBMT0csIDApOwogCQlyZXR1cm47 CiAJfQogCkBAIC0yOTYsNyArMjk2LDcgQEAgZHNtX2NsZWFudXBfdXNpbmdfY29udHJvbF9z ZWdtZW50KGRzbV9oYW5kbGUgb2xkX2NvbnRyb2xfaGFuZGxlKQogCiAJCS8qIERlc3Ryb3kg dGhlIHJlZmVyZW5jZWQgc2VnbWVudC4gKi8KIAkJZHNtX2ltcGxfb3AoRFNNX09QX0RFU1RS T1ksIGhhbmRsZSwgMCwgJmp1bmtfaW1wbF9wcml2YXRlLAotCQkJCQkmanVua19tYXBwZWRf YWRkcmVzcywgJmp1bmtfbWFwcGVkX3NpemUsIExPRyk7CisJCQkJCSZqdW5rX21hcHBlZF9h ZGRyZXNzLCAmanVua19tYXBwZWRfc2l6ZSwgTE9HLCAwKTsKIAl9CiAKIAkvKiBEZXN0cm95 IHRoZSBvbGQgY29udHJvbCBzZWdtZW50LCB0b28uICovCkBAIC0zMDQsNyArMzA0LDcgQEAg ZHNtX2NsZWFudXBfdXNpbmdfY29udHJvbF9zZWdtZW50KGRzbV9oYW5kbGUgb2xkX2NvbnRy b2xfaGFuZGxlKQogCQkgImNsZWFuaW5nIHVwIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBjb250 cm9sIHNlZ21lbnQgd2l0aCBJRCAldSIsCiAJCSBvbGRfY29udHJvbF9oYW5kbGUpOwogCWRz bV9pbXBsX29wKERTTV9PUF9ERVNUUk9ZLCBvbGRfY29udHJvbF9oYW5kbGUsIDAsICZpbXBs X3ByaXZhdGUsCi0JCQkJJm1hcHBlZF9hZGRyZXNzLCAmbWFwcGVkX3NpemUsIExPRyk7CisJ CQkJJm1hcHBlZF9hZGRyZXNzLCAmbWFwcGVkX3NpemUsIExPRywgMCk7CiB9CiAKIC8qCkBA IC00MDAsNyArNDAwLDcgQEAgZHNtX3Bvc3RtYXN0ZXJfc2h1dGRvd24oaW50IGNvZGUsIERh dHVtIGFyZykKIAogCQkvKiBEZXN0cm95IHRoZSBzZWdtZW50LiAqLwogCQlkc21faW1wbF9v cChEU01fT1BfREVTVFJPWSwgaGFuZGxlLCAwLCAmanVua19pbXBsX3ByaXZhdGUsCi0JCQkJ CSZqdW5rX21hcHBlZF9hZGRyZXNzLCAmanVua19tYXBwZWRfc2l6ZSwgTE9HKTsKKwkJCQkJ Jmp1bmtfbWFwcGVkX2FkZHJlc3MsICZqdW5rX21hcHBlZF9zaXplLCBMT0csIDApOwogCX0K IAogCS8qIFJlbW92ZSB0aGUgY29udHJvbCBzZWdtZW50IGl0c2VsZi4gKi8KQEAgLTQxMCw3 ICs0MTAsNyBAQCBkc21fcG9zdG1hc3Rlcl9zaHV0ZG93bihpbnQgY29kZSwgRGF0dW0gYXJn KQogCWRzbV9jb250cm9sX2FkZHJlc3MgPSBkc21fY29udHJvbDsKIAlkc21faW1wbF9vcChE U01fT1BfREVTVFJPWSwgZHNtX2NvbnRyb2xfaGFuZGxlLCAwLAogCQkJCSZkc21fY29udHJv bF9pbXBsX3ByaXZhdGUsICZkc21fY29udHJvbF9hZGRyZXNzLAotCQkJCSZkc21fY29udHJv bF9tYXBwZWRfc2l6ZSwgTE9HKTsKKwkJCQkmZHNtX2NvbnRyb2xfbWFwcGVkX3NpemUsIExP RywgMCk7CiAJZHNtX2NvbnRyb2wgPSBkc21fY29udHJvbF9hZGRyZXNzOwogCXNoaW0tPmRz bV9jb250cm9sID0gMDsKIH0KQEAgLTUxMiw2ICs1MTIsOCBAQCBkc21fc2htZW1faW5pdCh2 b2lkKQogICogcmVtYWlucyBhdHRhY2hlZCB1bnRpbCBleHBsaWNpdGx5IGRldGFjaGVkIG9y IHRoZSBzZXNzaW9uIGVuZHMuCiAgKiBDcmVhdGluZyB3aXRoIGEgTlVMTCBDdXJyZW50UmVz b3VyY2VPd25lciBpcyBlcXVpdmFsZW50IHRvIGNyZWF0aW5nCiAgKiB3aXRoIGEgbm9uLU5V TEwgQ3VycmVudFJlc291cmNlT3duZXIgYW5kIHRoZW4gY2FsbGluZyBkc21fcGluX21hcHBp bmcuCisgKgorICogWFhYOiBleHBsYWluIGZsYWdzCiAgKi8KIGRzbV9zZWdtZW50ICoKIGRz bV9jcmVhdGUoU2l6ZSBzaXplLCBpbnQgZmxhZ3MpCkBAIC01NjksMTQgKzU3MSwyNSBAQCBk c21fY3JlYXRlKFNpemUgc2l6ZSwgaW50IGZsYWdzKQogCQkJTFdMb2NrUmVsZWFzZShEeW5h bWljU2hhcmVkTWVtb3J5Q29udHJvbExvY2spOwogCQlmb3IgKDs7KQogCQl7CisJCQlpbnQJ CQlpbXBsX2ZsYWdzID0gKChmbGFncyAmIERTTV9DUkVBVEVfTk9fT09NKSAhPSAwKSA/IERT TV9PUF9DUkVBVEVfTk9fT09NIDogMDsKKwogCQkJQXNzZXJ0KHNlZy0+bWFwcGVkX2FkZHJl c3MgPT0gTlVMTCAmJiBzZWctPm1hcHBlZF9zaXplID09IDApOwogCQkJLyogVXNlIGV2ZW4g bnVtYmVycyBvbmx5ICovCiAJCQlzZWctPmhhbmRsZSA9IHBnX3BybmdfdWludDMyKCZwZ19n bG9iYWxfcHJuZ19zdGF0ZSkgPDwgMTsKIAkJCWlmIChzZWctPmhhbmRsZSA9PSBEU01fSEFO RExFX0lOVkFMSUQpCS8qIFJlc2VydmUgc2VudGluZWwgKi8KIAkJCQljb250aW51ZTsKKwkJ CWVycm5vID0gMDsKIAkJCWlmIChkc21faW1wbF9vcChEU01fT1BfQ1JFQVRFLCBzZWctPmhh bmRsZSwgc2l6ZSwgJnNlZy0+aW1wbF9wcml2YXRlLAotCQkJCQkJCSZzZWctPm1hcHBlZF9h ZGRyZXNzLCAmc2VnLT5tYXBwZWRfc2l6ZSwgRVJST1IpKQorCQkJCQkJCSZzZWctPm1hcHBl ZF9hZGRyZXNzLCAmc2VnLT5tYXBwZWRfc2l6ZSwgRVJST1IsIGltcGxfZmxhZ3MpKQogCQkJ CWJyZWFrOworCQkJaWYgKChmbGFncyAmIERTTV9DUkVBVEVfTk9fT09NKSAhPSAwICYmIChl cnJubyA9PSBFTk9NRU0gfHwgZXJybm8gPT0gRU5PU1BDKSkKKwkJCXsKKwkJCQlpZiAoc2Vn LT5yZXNvd25lciAhPSBOVUxMKQorCQkJCQlSZXNvdXJjZU93bmVyRm9yZ2V0RFNNKHNlZy0+ cmVzb3duZXIsIHNlZyk7CisJCQkJZGxpc3RfZGVsZXRlKCZzZWctPm5vZGUpOworCQkJCXBm cmVlKHNlZyk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CiAJCX0KIAkJTFdMb2NrQWNxdWly ZShEeW5hbWljU2hhcmVkTWVtb3J5Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7CiAJfQpA QCAtNjE0LDEzICs2MjcsMTMgQEAgZHNtX2NyZWF0ZShTaXplIHNpemUsIGludCBmbGFncykK IAkJTFdMb2NrUmVsZWFzZShEeW5hbWljU2hhcmVkTWVtb3J5Q29udHJvbExvY2spOwogCQlp ZiAoIXVzaW5nX21haW5fZHNtX3JlZ2lvbikKIAkJCWRzbV9pbXBsX29wKERTTV9PUF9ERVNU Uk9ZLCBzZWctPmhhbmRsZSwgMCwgJnNlZy0+aW1wbF9wcml2YXRlLAotCQkJCQkJJnNlZy0+ bWFwcGVkX2FkZHJlc3MsICZzZWctPm1hcHBlZF9zaXplLCBXQVJOSU5HKTsKKwkJCQkJCSZz ZWctPm1hcHBlZF9hZGRyZXNzLCAmc2VnLT5tYXBwZWRfc2l6ZSwgV0FSTklORywgMCk7CiAJ CWlmIChzZWctPnJlc293bmVyICE9IE5VTEwpCiAJCQlSZXNvdXJjZU93bmVyRm9yZ2V0RFNN KHNlZy0+cmVzb3duZXIsIHNlZyk7CiAJCWRsaXN0X2RlbGV0ZSgmc2VnLT5ub2RlKTsKIAkJ cGZyZWUoc2VnKTsKIAotCQlpZiAoKGZsYWdzICYgRFNNX0NSRUFURV9OVUxMX0lGX01BWFNF R01FTlRTKSAhPSAwKQorCQlpZiAoKGZsYWdzICYgKERTTV9DUkVBVEVfTlVMTF9JRl9NQVhT RUdNRU5UUyB8IERTTV9DUkVBVEVfTk9fT09NKSkgIT0gMCkKIAkJCXJldHVybiBOVUxMOwog CQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1JF U09VUkNFUyksCkBAIC03NDQsNyArNzU3LDcgQEAgZHNtX2F0dGFjaChkc21faGFuZGxlIGgp CiAJLyogSGVyZSdzIHdoZXJlIHdlIGFjdHVhbGx5IHRyeSB0byBtYXAgdGhlIHNlZ21lbnQu ICovCiAJaWYgKCFpc19tYWluX3JlZ2lvbl9kc21faGFuZGxlKHNlZy0+aGFuZGxlKSkKIAkJ ZHNtX2ltcGxfb3AoRFNNX09QX0FUVEFDSCwgc2VnLT5oYW5kbGUsIDAsICZzZWctPmltcGxf cHJpdmF0ZSwKLQkJCQkJJnNlZy0+bWFwcGVkX2FkZHJlc3MsICZzZWctPm1hcHBlZF9zaXpl LCBFUlJPUik7CisJCQkJCSZzZWctPm1hcHBlZF9hZGRyZXNzLCAmc2VnLT5tYXBwZWRfc2l6 ZSwgRVJST1IsIDApOwogCiAJcmV0dXJuIHNlZzsKIH0KQEAgLTc4OCw3ICs4MDEsNyBAQCBk c21fZGV0YWNoX2FsbCh2b2lkKQogCWlmIChjb250cm9sX2FkZHJlc3MgIT0gTlVMTCkKIAkJ ZHNtX2ltcGxfb3AoRFNNX09QX0RFVEFDSCwgZHNtX2NvbnRyb2xfaGFuZGxlLCAwLAogCQkJ CQkmZHNtX2NvbnRyb2xfaW1wbF9wcml2YXRlLCAmY29udHJvbF9hZGRyZXNzLAotCQkJCQkm ZHNtX2NvbnRyb2xfbWFwcGVkX3NpemUsIEVSUk9SKTsKKwkJCQkJJmRzbV9jb250cm9sX21h cHBlZF9zaXplLCBFUlJPUiwgMCk7CiB9CiAKIC8qCkBAIC04NDEsNyArODU0LDcgQEAgZHNt X2RldGFjaChkc21fc2VnbWVudCAqc2VnKQogCXsKIAkJaWYgKCFpc19tYWluX3JlZ2lvbl9k c21faGFuZGxlKHNlZy0+aGFuZGxlKSkKIAkJCWRzbV9pbXBsX29wKERTTV9PUF9ERVRBQ0gs IHNlZy0+aGFuZGxlLCAwLCAmc2VnLT5pbXBsX3ByaXZhdGUsCi0JCQkJCQkmc2VnLT5tYXBw ZWRfYWRkcmVzcywgJnNlZy0+bWFwcGVkX3NpemUsIFdBUk5JTkcpOworCQkJCQkJJnNlZy0+ bWFwcGVkX2FkZHJlc3MsICZzZWctPm1hcHBlZF9zaXplLCBXQVJOSU5HLCAwKTsKIAkJc2Vn LT5pbXBsX3ByaXZhdGUgPSBOVUxMOwogCQlzZWctPm1hcHBlZF9hZGRyZXNzID0gTlVMTDsK IAkJc2VnLT5tYXBwZWRfc2l6ZSA9IDA7CkBAIC04ODMsNyArODk2LDcgQEAgZHNtX2RldGFj aChkc21fc2VnbWVudCAqc2VnKQogCQkJICovCiAJCQlpZiAoaXNfbWFpbl9yZWdpb25fZHNt X2hhbmRsZShzZWctPmhhbmRsZSkgfHwKIAkJCQlkc21faW1wbF9vcChEU01fT1BfREVTVFJP WSwgc2VnLT5oYW5kbGUsIDAsICZzZWctPmltcGxfcHJpdmF0ZSwKLQkJCQkJCQkmc2VnLT5t YXBwZWRfYWRkcmVzcywgJnNlZy0+bWFwcGVkX3NpemUsIFdBUk5JTkcpKQorCQkJCQkJCSZz ZWctPm1hcHBlZF9hZGRyZXNzLCAmc2VnLT5tYXBwZWRfc2l6ZSwgV0FSTklORywgMCkpCiAJ CQl7CiAJCQkJTFdMb2NrQWNxdWlyZShEeW5hbWljU2hhcmVkTWVtb3J5Q29udHJvbExvY2ss IExXX0VYQ0xVU0lWRSk7CiAJCQkJaWYgKGlzX21haW5fcmVnaW9uX2RzbV9oYW5kbGUoc2Vn LT5oYW5kbGUpKQpAQCAtMTA1NSw3ICsxMDY4LDcgQEAgZHNtX3VucGluX3NlZ21lbnQoZHNt X2hhbmRsZSBoYW5kbGUpCiAJCSAqLwogCQlpZiAoaXNfbWFpbl9yZWdpb25fZHNtX2hhbmRs ZShoYW5kbGUpIHx8CiAJCQlkc21faW1wbF9vcChEU01fT1BfREVTVFJPWSwgaGFuZGxlLCAw LCAmanVua19pbXBsX3ByaXZhdGUsCi0JCQkJCQkmanVua19tYXBwZWRfYWRkcmVzcywgJmp1 bmtfbWFwcGVkX3NpemUsIFdBUk5JTkcpKQorCQkJCQkJJmp1bmtfbWFwcGVkX2FkZHJlc3Ms ICZqdW5rX21hcHBlZF9zaXplLCBXQVJOSU5HLCAwKSkKIAkJewogCQkJTFdMb2NrQWNxdWly ZShEeW5hbWljU2hhcmVkTWVtb3J5Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7CiAJCQlp ZiAoaXNfbWFpbl9yZWdpb25fZHNtX2hhbmRsZShoYW5kbGUpKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2RzbV9pbXBsLmMKaW5kZXggMDNhYTQ3YTEwNDkuLjY5M2NhZjhhNjRiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbC5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsLmMKQEAgLTcyLDIzICs3MiwyMyBAQAogI2lmZGVm IFVTRV9EU01fUE9TSVgKIHN0YXRpYyBib29sIGRzbV9pbXBsX3Bvc2l4KGRzbV9vcCBvcCwg ZHNtX2hhbmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAogCQkJCQkJICAgdm9pZCAq KmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLAotCQkJCQkJICAgU2l6ZSAq bWFwcGVkX3NpemUsIGludCBlbGV2ZWwpOworCQkJCQkJICAgU2l6ZSAqbWFwcGVkX3NpemUs IGludCBlbGV2ZWwsIGludCBmbGFncyk7CiBzdGF0aWMgaW50CWRzbV9pbXBsX3Bvc2l4X3Jl c2l6ZShpbnQgZmQsIG9mZl90IHNpemUpOwogI2VuZGlmCiAjaWZkZWYgVVNFX0RTTV9TWVNW CiBzdGF0aWMgYm9vbCBkc21faW1wbF9zeXN2KGRzbV9vcCBvcCwgZHNtX2hhbmRsZSBoYW5k bGUsIFNpemUgcmVxdWVzdF9zaXplLAogCQkJCQkJICB2b2lkICoqaW1wbF9wcml2YXRlLCB2 b2lkICoqbWFwcGVkX2FkZHJlc3MsCi0JCQkJCQkgIFNpemUgKm1hcHBlZF9zaXplLCBpbnQg ZWxldmVsKTsKKwkJCQkJCSAgU2l6ZSAqbWFwcGVkX3NpemUsIGludCBlbGV2ZWwsIGludCBm bGFncyk7CiAjZW5kaWYKICNpZmRlZiBVU0VfRFNNX1dJTkRPV1MKIHN0YXRpYyBib29sIGRz bV9pbXBsX3dpbmRvd3MoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1 ZXN0X3NpemUsCiAJCQkJCQkJIHZvaWQgKippbXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRf YWRkcmVzcywKLQkJCQkJCQkgU2l6ZSAqbWFwcGVkX3NpemUsIGludCBlbGV2ZWwpOworCQkJ CQkJCSBTaXplICptYXBwZWRfc2l6ZSwgaW50IGVsZXZlbCwgaW50IGZsYWdzKTsKICNlbmRp ZgogI2lmZGVmIFVTRV9EU01fTU1BUAogc3RhdGljIGJvb2wgZHNtX2ltcGxfbW1hcChkc21f b3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAkJCQkJCSAg dm9pZCAqKmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLAotCQkJCQkJICBT aXplICptYXBwZWRfc2l6ZSwgaW50IGVsZXZlbCk7CisJCQkJCQkgIFNpemUgKm1hcHBlZF9z aXplLCBpbnQgZWxldmVsLCBpbnQgZmxhZ3MpOwogI2VuZGlmCiBzdGF0aWMgaW50CWVycmNv ZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSh2b2lkKTsKIApAQCAtMTUzLDM4ICsxNTMs NDUgQEAgaW50CQkJbWluX2R5bmFtaWNfc2hhcmVkX21lbW9yeTsKICAqIGEgbWVzc2FnZSBz aG91bGQgZmlyc3QgYmUgbG9nZ2VkIGF0IHRoZSBzcGVjaWZpZWQgZWxldmVsLCBleGNlcHQg aW4gdGhlCiAgKiBjYXNlIHdoZXJlIERTTV9PUF9DUkVBVEUgZXhwZXJpZW5jZXMgYSBuYW1l IGNvbGxpc2lvbiwgd2hpY2ggc2hvdWxkCiAgKiBzaWxlbnRseSByZXR1cm4gZmFsc2UuCisg KgorICogSWYgb3AgaXMgRFNNX09QX0NSRUFURSBhbmQgdGhlIERTTV9PUF9DUkVBVEVfTk9f T09NIGZsYWcgaXMgc2V0LCByZXR1cm5zCisgKiBmYWxzZSBvbiBhIGZhaWx1cmUgY2F1c2Vk IGJ5IHJ1bm5pbmcgb3V0IG9mIG1lbW9yeSBvciBkaXNrIHNwYWNlLAorICogcmVnYXJkbGVz cyBvZiBlbGV2ZWwuIFRoYXQgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBhIG5hbWUgY29s bGlzaW9uIGJ5CisgKiBjaGVja2luZyBpZiAnZXJybm8nIGlzIEVOT1NQQyBvciBFTk9NRU0u CiAgKi0tLS0tCiAgKi8KIGJvb2wKIGRzbV9pbXBsX29wKGRzbV9vcCBvcCwgZHNtX2hhbmRs ZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAogCQkJdm9pZCAqKmltcGxfcHJpdmF0ZSwg dm9pZCAqKm1hcHBlZF9hZGRyZXNzLCBTaXplICptYXBwZWRfc2l6ZSwKLQkJCWludCBlbGV2 ZWwpCisJCQlpbnQgZWxldmVsLCBpbnQgZmxhZ3MpCiB7CiAJQXNzZXJ0KG9wID09IERTTV9P UF9DUkVBVEUgfHwgcmVxdWVzdF9zaXplID09IDApOwogCUFzc2VydCgob3AgIT0gRFNNX09Q X0NSRUFURSAmJiBvcCAhPSBEU01fT1BfQVRUQUNIKSB8fAogCQkgICAoKm1hcHBlZF9hZGRy ZXNzID09IE5VTEwgJiYgKm1hcHBlZF9zaXplID09IDApKTsKKwlBc3NlcnQoKG9wID09IERT TV9PUF9DUkVBVEUgJiYgKGZsYWdzICYgfkRTTV9PUF9DUkVBVEVfTk9fT09NKSA9PSAwKSB8 fAorCQkgICBmbGFncyA9PSAwKTsKIAogCXN3aXRjaCAoZHluYW1pY19zaGFyZWRfbWVtb3J5 X3R5cGUpCiAJewogI2lmZGVmIFVTRV9EU01fUE9TSVgKIAkJY2FzZSBEU01fSU1QTF9QT1NJ WDoKIAkJCXJldHVybiBkc21faW1wbF9wb3NpeChvcCwgaGFuZGxlLCByZXF1ZXN0X3NpemUs IGltcGxfcHJpdmF0ZSwKLQkJCQkJCQkJICBtYXBwZWRfYWRkcmVzcywgbWFwcGVkX3NpemUs IGVsZXZlbCk7CisJCQkJCQkJCSAgbWFwcGVkX2FkZHJlc3MsIG1hcHBlZF9zaXplLCBlbGV2 ZWwsIGZsYWdzKTsKICNlbmRpZgogI2lmZGVmIFVTRV9EU01fU1lTVgogCQljYXNlIERTTV9J TVBMX1NZU1Y6CiAJCQlyZXR1cm4gZHNtX2ltcGxfc3lzdihvcCwgaGFuZGxlLCByZXF1ZXN0 X3NpemUsIGltcGxfcHJpdmF0ZSwKLQkJCQkJCQkJIG1hcHBlZF9hZGRyZXNzLCBtYXBwZWRf c2l6ZSwgZWxldmVsKTsKKwkJCQkJCQkJIG1hcHBlZF9hZGRyZXNzLCBtYXBwZWRfc2l6ZSwg ZWxldmVsLCBmbGFncyk7CiAjZW5kaWYKICNpZmRlZiBVU0VfRFNNX1dJTkRPV1MKIAkJY2Fz ZSBEU01fSU1QTF9XSU5ET1dTOgogCQkJcmV0dXJuIGRzbV9pbXBsX3dpbmRvd3Mob3AsIGhh bmRsZSwgcmVxdWVzdF9zaXplLCBpbXBsX3ByaXZhdGUsCi0JCQkJCQkJCQltYXBwZWRfYWRk cmVzcywgbWFwcGVkX3NpemUsIGVsZXZlbCk7CisJCQkJCQkJCQltYXBwZWRfYWRkcmVzcywg bWFwcGVkX3NpemUsIGVsZXZlbCwgZmxhZ3MpOwogI2VuZGlmCiAjaWZkZWYgVVNFX0RTTV9N TUFQCiAJCWNhc2UgRFNNX0lNUExfTU1BUDoKIAkJCXJldHVybiBkc21faW1wbF9tbWFwKG9w LCBoYW5kbGUsIHJlcXVlc3Rfc2l6ZSwgaW1wbF9wcml2YXRlLAotCQkJCQkJCQkgbWFwcGVk X2FkZHJlc3MsIG1hcHBlZF9zaXplLCBlbGV2ZWwpOworCQkJCQkJCQkgbWFwcGVkX2FkZHJl c3MsIG1hcHBlZF9zaXplLCBlbGV2ZWwsIGZsYWdzKTsKICNlbmRpZgogCQlkZWZhdWx0Ogog CQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHR5cGU6 ICVkIiwKQEAgLTIxMSwxMCArMjE4LDEwIEBAIGRzbV9pbXBsX29wKGRzbV9vcCBvcCwgZHNt X2hhbmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAogc3RhdGljIGJvb2wKIGRzbV9p bXBsX3Bvc2l4KGRzbV9vcCBvcCwgZHNtX2hhbmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9z aXplLAogCQkJICAgdm9pZCAqKmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNz LCBTaXplICptYXBwZWRfc2l6ZSwKLQkJCSAgIGludCBlbGV2ZWwpCisJCQkgICBpbnQgZWxl dmVsLCBpbnQgZmxhZ3MpCiB7CiAJY2hhcgkJbmFtZVs2NF07Ci0JaW50CQkJZmxhZ3M7CisJ aW50CQkJb3Blbl9mbGFnczsKIAlpbnQJCQlmZDsKIAljaGFyCSAgICphZGRyZXNzOwogCkBA IC0yNTUsMTAgKzI2MiwxMyBAQCBkc21faW1wbF9wb3NpeChkc21fb3Agb3AsIGRzbV9oYW5k bGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAkgKi8KIAlSZXNlcnZlRXh0ZXJuYWxG RCgpOwogCi0JZmxhZ3MgPSBPX1JEV1IgfCAob3AgPT0gRFNNX09QX0NSRUFURSA/IE9fQ1JF QVQgfCBPX0VYQ0wgOiAwKTsKLQlpZiAoKGZkID0gc2htX29wZW4obmFtZSwgZmxhZ3MsIFBH X0ZJTEVfTU9ERV9PV05FUikpID09IC0xKQorCW9wZW5fZmxhZ3MgPSBPX1JEV1IgfCAob3Ag PT0gRFNNX09QX0NSRUFURSA/IE9fQ1JFQVQgfCBPX0VYQ0wgOiAwKTsKKwlpZiAoKGZkID0g c2htX29wZW4obmFtZSwgb3Blbl9mbGFncywgUEdfRklMRV9NT0RFX09XTkVSKSkgPT0gLTEp CiAJewogCQlSZWxlYXNlRXh0ZXJuYWxGRCgpOworCQlpZiAob3AgPT0gRFNNX09QX0NSRUFU RSAmJiAoZmxhZ3MgJiBEU01fT1BfQ1JFQVRFX05PX09PTSkgIT0gMCAmJgorCQkJKGVycm5v ID09IEVOT01FTSB8fCBlcnJubyA9PSBFTk9TUEMpKQorCQkJcmV0dXJuIGZhbHNlOwogCQlp ZiAob3AgPT0gRFNNX09QX0FUVEFDSCB8fCBlcnJubyAhPSBFRVhJU1QpCiAJCQllcmVwb3J0 KGVsZXZlbCwKIAkJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLApA QCAtMzA0LDYgKzMxNCw5IEBAIGRzbV9pbXBsX3Bvc2l4KGRzbV9vcCBvcCwgZHNtX2hhbmRs ZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAogCQlzaG1fdW5saW5rKG5hbWUpOwogCQll cnJubyA9IHNhdmVfZXJybm87CiAKKwkJaWYgKG9wID09IERTTV9PUF9DUkVBVEUgJiYgKGZs YWdzICYgRFNNX09QX0NSRUFURV9OT19PT00pICE9IDAgJiYKKwkJCShlcnJubyA9PSBFTk9N RU0gfHwgZXJybm8gPT0gRU5PU1BDKSkKKwkJCXJldHVybiBmYWxzZTsKIAkJZXJlcG9ydChl bGV2ZWwsCiAJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAogCQkJ CSBlcnJtc2coImNvdWxkIG5vdCByZXNpemUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNc IiB0byAlenUgYnl0ZXM6ICVtIiwKQEAgLTMyNiw2ICszMzksOSBAQCBkc21faW1wbF9wb3Np eChkc21fb3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAkJ CXNobV91bmxpbmsobmFtZSk7CiAJCWVycm5vID0gc2F2ZV9lcnJubzsKIAorCQlpZiAob3Ag PT0gRFNNX09QX0NSRUFURSAmJiAoZmxhZ3MgJiBEU01fT1BfQ1JFQVRFX05PX09PTSkgIT0g MCAmJgorCQkJKGVycm5vID09IEVOT01FTSB8fCBlcnJubyA9PSBFTk9TUEMpKQorCQkJcmV0 dXJuIGZhbHNlOwogCQllcmVwb3J0KGVsZXZlbCwKIAkJCQkoZXJyY29kZV9mb3JfZHluYW1p Y19zaGFyZWRfbWVtb3J5KCksCiAJCQkJIGVycm1zZygiY291bGQgbm90IG1hcCBzaGFyZWQg bWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCkBAIC00MjIsNyArNDM4LDcgQEAgZHNtX2lt cGxfcG9zaXhfcmVzaXplKGludCBmZCwgb2ZmX3Qgc2l6ZSkKIHN0YXRpYyBib29sCiBkc21f aW1wbF9zeXN2KGRzbV9vcCBvcCwgZHNtX2hhbmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9z aXplLAogCQkJICB2b2lkICoqaW1wbF9wcml2YXRlLCB2b2lkICoqbWFwcGVkX2FkZHJlc3Ms IFNpemUgKm1hcHBlZF9zaXplLAotCQkJICBpbnQgZWxldmVsKQorCQkJICBpbnQgZWxldmVs LCBpbnQgZmxhZ3MpCiB7CiAJa2V5X3QJCWtleTsKIAlpbnQJCQlpZGVudDsKQEAgLTQ4NCwx MyArNTAwLDE0IEBAIGRzbV9pbXBsX3N5c3YoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRs ZSwgU2l6ZSByZXF1ZXN0X3NpemUsCiAJfQogCWVsc2UKIAl7Ci0JCWludAkJCWZsYWdzID0g SVBDUHJvdGVjdGlvbjsKKwkJaW50CQkJaXBjX2ZsYWdzID0gSVBDUHJvdGVjdGlvbjsKIAkJ c2l6ZV90CQlzZWdzaXplOwogCiAJCS8qCiAJCSAqIEFsbG9jYXRlIHRoZSBtZW1vcnkgQkVG T1JFIGFjcXVpcmluZyB0aGUgcmVzb3VyY2UsIHNvIHRoYXQgd2UgZG9uJ3QKIAkJICogbGVh ayB0aGUgcmVzb3VyY2UgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCiAJCSAqLworCQkv LyBGSVhNRTogTk9fT09NCiAJCWlkZW50X2NhY2hlID0gTWVtb3J5Q29udGV4dEFsbG9jKFRv cE1lbW9yeUNvbnRleHQsIHNpemVvZihpbnQpKTsKIAogCQkvKgpAQCAtNTAyLDE2ICs1MTks MjAgQEAgZHNtX2ltcGxfc3lzdihkc21fb3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXpl IHJlcXVlc3Rfc2l6ZSwKIAogCQlpZiAob3AgPT0gRFNNX09QX0NSRUFURSkKIAkJewotCQkJ ZmxhZ3MgfD0gSVBDX0NSRUFUIHwgSVBDX0VYQ0w7CisJCQlpcGNfZmxhZ3MgfD0gSVBDX0NS RUFUIHwgSVBDX0VYQ0w7CiAJCQlzZWdzaXplID0gcmVxdWVzdF9zaXplOwogCQl9CiAKLQkJ aWYgKChpZGVudCA9IHNobWdldChrZXksIHNlZ3NpemUsIGZsYWdzKSkgPT0gLTEpCisJCWlm ICgoaWRlbnQgPSBzaG1nZXQoa2V5LCBzZWdzaXplLCBpcGNfZmxhZ3MpKSA9PSAtMSkKIAkJ eworCQkJaWYgKG9wID09IERTTV9PUF9DUkVBVEUgJiYgKGZsYWdzICYgRFNNX09QX0NSRUFU RV9OT19PT00pICE9IDAgJiYKKwkJCQkoZXJybm8gPT0gRU5PTUVNIHx8IGVycm5vID09IEVO T1NQQykpCisJCQkJcmV0dXJuIGZhbHNlOwogCQkJaWYgKG9wID09IERTTV9PUF9BVFRBQ0gg fHwgZXJybm8gIT0gRUVYSVNUKQogCQkJewogCQkJCWludAkJCXNhdmVfZXJybm8gPSBlcnJu bzsKIAorCQkJCS8vIEZJWE1FOiBkbyB3ZSBsZWFrICdpZGVudF9jYWNoZScgb3RoZXJ3aXNl PwogCQkJCXBmcmVlKGlkZW50X2NhY2hlKTsKIAkJCQllcnJubyA9IHNhdmVfZXJybm87CiAJ CQkJZXJlcG9ydChlbGV2ZWwsCkBAIC01NzksNiArNjAwLDkgQEAgZHNtX2ltcGxfc3lzdihk c21fb3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAkJCXNo bWN0bChpZGVudCwgSVBDX1JNSUQsIE5VTEwpOwogCQllcnJubyA9IHNhdmVfZXJybm87CiAK KwkJaWYgKG9wID09IERTTV9PUF9DUkVBVEUgJiYgKGZsYWdzICYgRFNNX09QX0NSRUFURV9O T19PT00pICE9IDAgJiYKKwkJCShlcnJubyA9PSBFTk9NRU0gfHwgZXJybm8gPT0gRU5PU1BD KSkKKwkJCXJldHVybiBmYWxzZTsKIAkJZXJlcG9ydChlbGV2ZWwsCiAJCQkJKGVycmNvZGVf Zm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAogCQkJCSBlcnJtc2coImNvdWxkIG5vdCBt YXAgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLApAQCAtNjA5LDcgKzYzMyw3 IEBAIGRzbV9pbXBsX3N5c3YoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSBy ZXF1ZXN0X3NpemUsCiBzdGF0aWMgYm9vbAogZHNtX2ltcGxfd2luZG93cyhkc21fb3Agb3As IGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAkJCQkgdm9pZCAqKmlt cGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLAotCQkJCSBTaXplICptYXBwZWRf c2l6ZSwgaW50IGVsZXZlbCkKKwkJCQkgU2l6ZSAqbWFwcGVkX3NpemUsIGludCBlbGV2ZWws IGludCBmbGFncykKIHsKIAljaGFyCSAgICphZGRyZXNzOwogCUhBTkRMRQkJaG1hcDsKQEAg LTcwMiw2ICs3MjYsMTAgQEAgZHNtX2ltcGxfd2luZG93cyhkc21fb3Agb3AsIGRzbV9oYW5k bGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAkJaWYgKCFobWFwKQogCQl7CiAJCQlf ZG9zbWFwZXJyKGVycmNvZGUpOworCisJCQlpZiAoKGZsYWdzICYgRFNNX09QX0NSRUFURV9O T19PT00pICE9IDAgJiYKKwkJCQkoZXJybm8gPT0gRU5PTUVNIHx8IGVycm5vID09IEVOT1NQ QykpCisJCQkJcmV0dXJuIGZhbHNlOwogCQkJZXJlcG9ydChlbGV2ZWwsCiAJCQkJCShlcnJj b2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKIAkJCQkJIGVycm1zZygiY291bGQg bm90IGNyZWF0ZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCkBAIC03Mzgs NiArNzY2LDkgQEAgZHNtX2ltcGxfd2luZG93cyhkc21fb3Agb3AsIGRzbV9oYW5kbGUgaGFu ZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAkJQ2xvc2VIYW5kbGUoaG1hcCk7CiAJCWVycm5v ID0gc2F2ZV9lcnJubzsKIAorCQlpZiAob3AgPT0gRFNNX09QX0NSRUFURSAmJiAoZmxhZ3Mg JiBEU01fT1BfQ1JFQVRFX05PX09PTSkgIT0gMCAmJgorCQkJKGVycm5vID09IEVOT01FTSB8 fCBlcnJubyA9PSBFTk9TUEMpKQorCQkJcmV0dXJuIGZhbHNlOwogCQllcmVwb3J0KGVsZXZl bCwKIAkJCQkoZXJyY29kZV9mb3JfZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCiAJCQkJIGVy cm1zZygiY291bGQgbm90IG1hcCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIs CkBAIC03OTEsMTAgKzgyMiwxMCBAQCBkc21faW1wbF93aW5kb3dzKGRzbV9vcCBvcCwgZHNt X2hhbmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAogc3RhdGljIGJvb2wKIGRzbV9p bXBsX21tYXAoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0X3Np emUsCiAJCQkgIHZvaWQgKippbXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywg U2l6ZSAqbWFwcGVkX3NpemUsCi0JCQkgIGludCBlbGV2ZWwpCisJCQkgIGludCBlbGV2ZWws IGludCBmbGFncykKIHsKIAljaGFyCQluYW1lWzY0XTsKLQlpbnQJCQlmbGFnczsKKwlpbnQJ CQlvcGVuX2ZsYWdzOwogCWludAkJCWZkOwogCWNoYXIJICAgKmFkZHJlc3M7CiAKQEAgLTgy Nyw5ICs4NTgsMTIgQEAgZHNtX2ltcGxfbW1hcChkc21fb3Agb3AsIGRzbV9oYW5kbGUgaGFu ZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAl9CiAKIAkvKiBDcmVhdGUgbmV3IHNlZ21lbnQg b3Igb3BlbiBhbiBleGlzdGluZyBvbmUgZm9yIGF0dGFjaC4gKi8KLQlmbGFncyA9IE9fUkRX UiB8IChvcCA9PSBEU01fT1BfQ1JFQVRFID8gT19DUkVBVCB8IE9fRVhDTCA6IDApOwotCWlm ICgoZmQgPSBPcGVuVHJhbnNpZW50RmlsZShuYW1lLCBmbGFncykpID09IC0xKQorCW9wZW5f ZmxhZ3MgPSBPX1JEV1IgfCAob3AgPT0gRFNNX09QX0NSRUFURSA/IE9fQ1JFQVQgfCBPX0VY Q0wgOiAwKTsKKwlpZiAoKGZkID0gT3BlblRyYW5zaWVudEZpbGUobmFtZSwgb3Blbl9mbGFn cykpID09IC0xKQogCXsKKwkJaWYgKG9wID09IERTTV9PUF9DUkVBVEUgJiYgKGZsYWdzICYg RFNNX09QX0NSRUFURV9OT19PT00pICE9IDAgJiYKKwkJCShlcnJubyA9PSBFTk9NRU0gfHwg ZXJybm8gPT0gRU5PU1BDKSkKKwkJCXJldHVybiBmYWxzZTsKIAkJaWYgKG9wID09IERTTV9P UF9BVFRBQ0ggfHwgZXJybm8gIT0gRUVYSVNUKQogCQkJZXJlcG9ydChlbGV2ZWwsCiAJCQkJ CShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKQEAgLTkwNiw2ICs5NDAs OSBAQCBkc21faW1wbF9tbWFwKGRzbV9vcCBvcCwgZHNtX2hhbmRsZSBoYW5kbGUsIFNpemUg cmVxdWVzdF9zaXplLAogCQkJdW5saW5rKG5hbWUpOwogCQkJZXJybm8gPSBzYXZlX2Vycm5v ID8gc2F2ZV9lcnJubyA6IEVOT1NQQzsKIAorCQkJaWYgKG9wID09IERTTV9PUF9DUkVBVEUg JiYgKGZsYWdzICYgRFNNX09QX0NSRUFURV9OT19PT00pICE9IDAgJiYKKwkJCQkoZXJybm8g PT0gRU5PTUVNIHx8IGVycm5vID09IEVOT1NQQykpCisJCQkJcmV0dXJuIGZhbHNlOwogCQkJ ZXJlcG9ydChlbGV2ZWwsCiAJCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1v cnkoKSwKIAkJCQkJIGVycm1zZygiY291bGQgbm90IHJlc2l6ZSBzaGFyZWQgbWVtb3J5IHNl Z21lbnQgXCIlc1wiIHRvICV6dSBieXRlczogJW0iLApAQCAtOTI4LDYgKzk2NSw5IEBAIGRz bV9pbXBsX21tYXAoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0 X3NpemUsCiAJCQl1bmxpbmsobmFtZSk7CiAJCWVycm5vID0gc2F2ZV9lcnJubzsKIAorCQlp ZiAob3AgPT0gRFNNX09QX0NSRUFURSAmJiAoZmxhZ3MgJiBEU01fT1BfQ1JFQVRFX05PX09P TSkgIT0gMCAmJgorCQkJKGVycm5vID09IEVOT01FTSB8fCBlcnJubyA9PSBFTk9TUEMpKQor CQkJcmV0dXJuIGZhbHNlOwogCQllcmVwb3J0KGVsZXZlbCwKIAkJCQkoZXJyY29kZV9mb3Jf ZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCiAJCQkJIGVycm1zZygiY291bGQgbm90IG1hcCBz aGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9tbWdyL2RzYS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9kc2EuYwpp bmRleCBhNmI3MjhiYTlmZi4uMjliNmY5NzViZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvZHNhLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9kc2EuYwpA QCAtMjE2NCw3ICsyMTY0LDcgQEAgbWFrZV9uZXdfc2VnbWVudChkc2FfYXJlYSAqYXJlYSwg c2l6ZV90IHJlcXVlc3RlZF9wYWdlcykKIAkvKiBDcmVhdGUgdGhlIHNlZ21lbnQuICovCiAJ b2xkb3duZXIgPSBDdXJyZW50UmVzb3VyY2VPd25lcjsKIAlDdXJyZW50UmVzb3VyY2VPd25l ciA9IGFyZWEtPnJlc293bmVyOwotCXNlZ21lbnQgPSBkc21fY3JlYXRlKHRvdGFsX3NpemUs IDApOworCXNlZ21lbnQgPSBkc21fY3JlYXRlKHRvdGFsX3NpemUsIERTTV9DUkVBVEVfTlVM TF9JRl9NQVhTRUdNRU5UUyB8IERTTV9DUkVBVEVfTk9fT09NKTsKIAlDdXJyZW50UmVzb3Vy Y2VPd25lciA9IG9sZG93bmVyOwogCWlmIChzZWdtZW50ID09IE5VTEwpCiAJCXJldHVybiBO VUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc20uaCBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvZHNtLmgKaW5kZXggMWEyMmIzMmRmMWEuLjdlMmVjOGZjNTYwIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvZHNtLmgKQEAgLTE4LDYgKzE4LDcgQEAKIHR5cGVkZWYgc3RydWN0IGRzbV9zZWdt ZW50IGRzbV9zZWdtZW50OwogCiAjZGVmaW5lIERTTV9DUkVBVEVfTlVMTF9JRl9NQVhTRUdN RU5UUwkJCTB4MDAwMQorI2RlZmluZSBEU01fQ1JFQVRFX05PX09PTQkJCQkJCTB4MDAwMgog CiAvKiBTdGFydHVwIGFuZCBzaHV0ZG93biBmdW5jdGlvbnMuICovCiBzdHJ1Y3QgUEdTaG1l bUhlYWRlcjsJCQkvKiBhdm9pZCBpbmNsdWRpbmcgcGdfc2htZW0uaCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc21faW1wbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9kc21faW1wbC5oCmluZGV4IDg4MjI2OTYwM2RhLi4yMDk3ODc2Zjc1NiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc21faW1wbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvZHNtX2ltcGwuaApAQCAtNjYsMTAgKzY2LDEyIEBAIHR5cGVkZWYgZW51bQogCURT TV9PUF9ERVNUUk9ZLAogfSBkc21fb3A7CiAKKyNkZWZpbmUgRFNNX09QX0NSRUFURV9OT19P T00JMHgwMQorCiAvKiBDcmVhdGUsIGF0dGFjaCB0bywgZGV0YWNoIGZyb20sIHJlc2l6ZSwg b3IgZGVzdHJveSBhIHNlZ21lbnQuICovCiBleHRlcm4gYm9vbCBkc21faW1wbF9vcChkc21f b3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAkJCQkJCXZv aWQgKippbXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywgU2l6ZSAqbWFwcGVk X3NpemUsCi0JCQkJCQlpbnQgZWxldmVsKTsKKwkJCQkJCWludCBlbGV2ZWwsIGludCBmbGFn cyk7CiAKIC8qIEltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBhY3Rpb25zIHJlcXVpcmVkIHRv IGtlZXAgc2VnbWVudCB1bnRpbCBzaHV0ZG93bi4gKi8KIGV4dGVybiB2b2lkIGRzbV9pbXBs X3Bpbl9zZWdtZW50KGRzbV9oYW5kbGUgaGFuZGxlLCB2b2lkICppbXBsX3ByaXZhdGUsCi0t IAoyLjM5LjIKCg== --------------TYzg6GYfB3AafCuaYPJAGdR6--