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 1u0jEx-006l9I-7C for pgsql-hackers@arkaria.postgresql.org; Fri, 04 Apr 2025 15:45:55 +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 1u0jEv-001Zr0-6o for pgsql-hackers@arkaria.postgresql.org; Fri, 04 Apr 2025 15:45:53 +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 1u0jEu-001Zqs-L2 for pgsql-hackers@lists.postgresql.org; Fri, 04 Apr 2025 15:45:52 +0000 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u0jEs-002wOX-1E for pgsql-hackers@postgresql.org; Fri, 04 Apr 2025 15:45:51 +0000 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-54addb5a139so2453728e87.0 for ; Fri, 04 Apr 2025 08:45:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743781549; x=1744386349; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=3w4Aeh9xlhojam1UF/ljh09Bd4ns6l4Ya1o7GiUGbdo=; b=TGuu0yc3c1TfPhYCYn0eR6ssEC1H8XIgvf0zEkHCD/Og20Riv725B+TLzz/AeySujI HN41w+of9H3HbThR118qilWvt6iXGlf+U1a66VaHr/5+demvtiIPUhf/W1egLlzCAxL0 fq3LrCO48OlZa99ApmnrxN5m+TpVPZdt9pJq/sAN0UQkHWtVlOrwES/AouJV57ECUJdv MywwZDcPH+RyZdMOoeUczuvdI5SE7mzXM8pJ2/9dy4QRz6KWdpD8D9A2VSeFVCIW30tG +ZUdJz3IaRxUeBudORT4a6kDUlFYM27ZlGRzcPb0Me/vP9OLkDJmgRmHa4lqfJ2+TDqY 5BuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743781549; x=1744386349; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=3w4Aeh9xlhojam1UF/ljh09Bd4ns6l4Ya1o7GiUGbdo=; b=BBFqvQTD5Cla+mBRuH9SNh+rDJiAgwOECWCmU4IKzot/yV6XfrHLJMFkoeoEjwUxbx bSxdEsJi1UEQ5yO2XNpo8fZTypubWM9DL49fk0mOqMJ+4XBqpeBDf1x1njCPgIH3IAE1 pL7SG4vKiZTUOp8QZ13LNr2W7wLhzXw8NvXGEE1JtmPjokJOoIjljxoRnXMgU46/kSFe TWNpiBQUi4Gd8wrMRugSBWgGrkW05vQI5uBfV86UcOubtY2LrDLPmbhOFjN5vDsOpjcF cE1JO2lPJoimuJju7DsvotpjM9NbWxlI/lSVLu8fNbpsFz0whpq52Czb7TGgYv+3sZYZ NpqQ== X-Forwarded-Encrypted: i=1; AJvYcCXvPuqyOimr6mOw11eLXsyZsSLx4T3ejc+SDSqQ2PXHkHR41eVRpypCiTCAMwjK70klDHp6ZPWc4G7sMETG@postgresql.org X-Gm-Message-State: AOJu0Yx2VMLFeE5wqo42kwaie2+pAzAfTXM5YHmkA2G8+hBQxxvBchAi YkOgHvHG+pX95dwQh4bjO+69kPPJqz7W2PhIV2ZCiByGXPs5lEqG1onyhef8RDdLEEPPsmG9aXZ VqP/AhWvGGvHBt1Lk3ZhkkXlXbXM= X-Gm-Gg: ASbGncu9o8AQa8SCgukDgVhInAnmABf49lPhUPHF1GUN61+rVri21YZOaXTUW7Kz52i UZGsTBugzToG7MzSl/MkRzktbQLmQ0G26j4WNIt7Jrolk4qljCvSJixd6VnCIRdSmddqYHjElx4 7lhig2MHobFCMZQIMMLNDo76MCgNN/5S60F6kZCnrwEr/6B5w/GF7yV/5TTMk= X-Google-Smtp-Source: AGHT+IEBUlh/Icj6KNwuWDnMmWd+0NfDoSPNAZ1ZCEIxsUxH8OFP8wh4edbR7yRTg7HmzmrFZhX2/rgIcBG4lZt94UQ= X-Received: by 2002:ac2:4c51:0:b0:545:60b:f38c with SMTP id 2adb3069b0e04-54c227dc76emr1129121e87.41.1743781548278; Fri, 04 Apr 2025 08:45:48 -0700 (PDT) MIME-Version: 1.0 References: <3e40eeec-d8bf-4496-854e-485dd901f6a2@vondra.me> <6bf7194e-4c34-4e6d-8215-f6acf8903974@vondra.me> <6705dbd2-060b-4f3c-9fcb-1c7f10880b26@vondra.me> <66283922-0448-44e7-bbdd-38aaf2be34b9@vondra.me> <7987a0b5-9933-457a-b5ba-d28e9cce883b@vondra.me> <4e9a124d-29cb-4fd5-99fb-a5016e508f20@vondra.me> In-Reply-To: <4e9a124d-29cb-4fd5-99fb-a5016e508f20@vondra.me> From: Rahila Syed Date: Fri, 4 Apr 2025 21:15:34 +0530 X-Gm-Features: ATxdqUF-4ZI135IUBflhp2rU_YJRweOk_TyH7D2N-2TbZd2y_RQTiohJ8yyg1Fw Message-ID: Subject: Re: Improve monitoring of shared memory allocations To: Tomas Vondra Cc: Nazir Bilal Yavuz , Andres Freund , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000c069310631f5c71e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c069310631f5c71e Content-Type: multipart/alternative; boundary="000000000000c0692e0631f5c71c" --000000000000c0692e0631f5c71c Content-Type: text/plain; charset="UTF-8" Hi, Analysis of the Bug in 0002 reported by David Rowley : The 0001* patch allocates memory for the hash header, directory, segments, and elements collectively for both shared and non-shared hash tables. While this approach works well for shared hash tables, it presents an issue for non- shared hash tables. Specifically, during the expand_table() process, non-shared hash tables may reallocate a new directory and free the old one. Since the directory's memory is no longer allocated individually, it cannot be freed separately. This results in the following error: ERROR: pfree called with invalid pointer 0x60a15edc44e0 (header 0x0000002000000008) These allocations are done together to improve reporting of shared memory allocations for shared hash tables. Similar change is done for non-shared hash tables only to maintain consistency since hash_create code is shared between both types of hash tables. One solution could be separating allocation of directory from rest of the allocations for the non-shared hash tables, but this approach would undermine the purpose of doing the change for a non-shared hash table. A better/safer solution would be to do this change only for shared hash tables and exclude the non-shared hash tables. I believe it's acceptable to allocate everything in a single block provided we are not trying to individually free any of these, which we do only for the directory pointer in dir_realloc. Additional segment allocation goes through seg_alloc and element allocations through element_alloc, which do not free existing chunks but instead allocate new ones with pointers in existing directories and segments. Thus, as long as we don't reallocate the directory, which we avoid in the case of shared hash tables, it should be safe to proceed with this change. Please find attached the patch which removes the changes for non-shared hash tables and keeps them for shared hash tables. I tested this by running make-check, make-check world and the reproducer script shared by David. I also ran pgbench to test creation and expansion of some of the shared hash tables. Thank you, Rahila Syed --000000000000c0692e0631f5c71c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Analysis of the=C2= =A0Bug in 0002 reported by David Rowley :
Th= e 0001* patch allocates memory for the hash header, directory, segments, and elements collectively for both shared and non-shared hash tables. Whi= le
=C2=A0this approach works well for shared hash tables, it presents an= issue for non-
shared hash tables. Specifically, during the expand_tabl= e() process,
non-shared hash tables may reallocate a new directory and = free the old one.
Since the directory's memory is no longer allocat= ed individually, it cannot be freed
separately. This results in the fol= lowing error:

ERROR: pfree called with invalid pointer 0x60a15edc44e= 0 (header 0x0000002000000008)

These allocations are done together to= improve reporting of shared memory allocations
for shared hash t= ables. Similar change is done for non-shared hash tables only to maintainconsistency since hash_create code is shared between both types of hash t= ables.

One solution could be separating=C2=A0alloc= ation of directory from rest of the allocations for=C2=A0
the non-shared= hash tables, but this approach=C2=A0would undermine the purpose of
doi= ng the change for a non-shared hash table.

A better/safer solution w= ould be to do this change only for shared hash tables and
exclude= the non-shared hash tables.

I believe it's acceptable to= allocate everything in a single block provided we are not trying
to ind= ividually free any of these, which we do only for the directory pointer in = dir_realloc.
Additional segment allocation goes through seg_alloc and el= ement allocations through
element_alloc, which do not free existing chu= nks but instead allocate new ones with
pointers in existing directories= and segments.
Thus, as long as we don't reallocate the directory, = which we avoid=C2=A0in the case of shared
hash tables, it should be saf= e to proceed with this change.

Please find attached the patch which = removes the changes for non-shared hash tables
and keeps them for share= d hash tables.

I tested this by running make-check, make-check world= and the reproducer script shared
by David. I also ran pgbench to test c= reation and expansion of some of the
shared hash tables.

Thank y= ou,
Rahila Syed
--000000000000c0692e0631f5c71c-- --000000000000c069310631f5c71e Content-Type: application/octet-stream; name="v10-0001-Improve-accounting-for-memory-used-by-shared-hash-ta.patch" Content-Disposition: attachment; filename="v10-0001-Improve-accounting-for-memory-used-by-shared-hash-ta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m92yczzu0 RnJvbSAyNzBkZGYzZThlMWZlOTllOTJjNDU3MTZmNWQ1NzM5NmVlNDgyZDExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgNCBBcHIgMjAyNSAxNDoyMjowNSArMDUzMApTdWJqZWN0OiBbUEFUQ0hdIElt cHJvdmUgYWNjb3VudGluZyBmb3IgbWVtb3J5IHVzZWQgYnkgc2hhcmVkIGhhc2ggdGFibGVzCgpw Z19zaG1lbV9hbGxvY2F0aW9ucyB0cmFja3MgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgU2htZW1J bml0U3RydWN0KCksCmJ1dCBmb3Igc2hhcmVkIGhhc2ggdGFibGVzIHRoYXQgY292ZXJlZCBvbmx5 IHRoZSBoZWFkZXIgYW5kIGhhc2gKZGlyZWN0b3J5LiAgVGhlIHJlbWFpbmluZyBwYXJ0cyAoc2Vn bWVudHMgYW5kIGJ1Y2tldHMpIHdlcmUgYWxsb2NhdGVkCmxhdGVyIHVzaW5nIFNobWVtQWxsb2Mo KSwgd2hpY2ggZG9lcyBub3QgdXBkYXRlIHRoZSBzaG1lbSBhY2NvdW50aW5nLgpUaHVzLCB0aGVz ZSBhbGxvY2F0aW9ucyB3ZXJlIG5vdCBzaG93biBpbiBwZ19zaG1lbV9hbGxvY2F0aW9ucy4KClRo aXMgY29tbWl0IGltcHJvdmVzIHRoZSBzaXR1YXRpb24gYnkgYWxsb2NhdGluZyBhbGwgdGhlIGhh c2ggdGFibGUKcGFydHMgYXQgb25jZSwgdXNpbmcgYSBzaW5nbGUgU2htZW1Jbml0U3RydWN0KCkg Y2FsbC4gVGhpcyB3YXkgdGhlClNobWVtSW5kZXggZW50cmllcyAoYW5kIHRodXMgcGdfc2htZW1f YWxsb2NhdGlvbnMpIGJldHRlciByZWZsZWN0IHRoZQpwcm9wZXIgc2l6ZSBvZiB0aGUgaGFzaCB0 YWJsZS51CgpUaGlzIGRvZXMgbm90IGNoYW5nZSBhbnl0aGluZyBmb3Igbm9uLXNoYXJlZCBoYXNo IHRhYmxlcy4KClRoaXMgY2hhbmdlcyB0aGUgYWxpZ25tZW50IGEgYml0LiBTaG1lbUFsbG9jKCkg YWxpZ25zIHRoZSBjaHVua3MgdXNpbmcKQ0FDSEVMSU5FQUxJR04oKSwgd2hpY2ggbWVhbnMgc29t ZSBwYXJ0cyAoaGVhZGVyLCBkaXJlY3RvcnksIHNlZ21lbnRzKQp3ZXJlIGFsaWduZWQgdGhpcyB3 YXkuIEFsbG9jYXRpbmcgYWxsIHBhcnRzIGFzIGEgc2luZ2xlIGNodW5rIHJlbW92ZXMKdGhpcyAo aW1wbGljaXQpIGFsaWdubWVudC4gV2UndmUgY29uc2lkZXJlZCBhZGRpbmcgZXhwbGljaXQgYWxp Z25tZW50LApidXQgd2UndmUgZGVjaWRlZCBub3QgdG8gLSBpdCBzZWVtcyB0byBiZSBtZXJlbHkg YSBjb2luY2lkZW5jZSBkdWUgdG8KdXNpbmcgdGhlIFNobWVtQWxsb2MoKSBBUEksIG5vdCBkdWUg dG8gbmVjZXNzaXR5LgoKQXV0aG9yOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZDkwQGdtYWlsLmNv bT4KUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3 ZWQtYnk6IE5hemlyIEJpbGFsIFlhdnV6IDxieWF2dXo4MUBnbWFpbC5jb20+ClJldmlld2VkLWJ5 OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9DQUgyTDI4dkh6UmFua3N6aHF6N2RlWFVSeEtuY3hmaXJudVc2OHpENytoVkFxYVM1 R1FAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jICAg fCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2hhc2gvZHluYWhhc2guYyB8IDI0MiArKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL2hzZWFyY2guaCAgICAg ICB8ICAgMyArLQogMyBmaWxlcyBjaGFuZ2VkLCAxOTggaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggODk1YTQzZmIzOWUuLmExYjkxODBh NjRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRl ICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCiAjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9keW5haGFzaC5oIgogCiBzdGF0aWMg dm9pZCAqU2htZW1BbGxvY1JhdyhTaXplIHNpemUsIFNpemUgKmFsbG9jYXRlZF9zaXplKTsKIApA QCAtMzQ2LDcgKzM0Nyw4IEBAIFNobWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwJCS8qIHRh YmxlIHN0cmluZyBuYW1lIGZvciBzaG1lbSBpbmRleCAqLwogCiAJLyogbG9vayBpdCB1cCBpbiB0 aGUgc2htZW0gaW5kZXggKi8KIAlsb2NhdGlvbiA9IFNobWVtSW5pdFN0cnVjdChuYW1lLAotCQkJ CQkJCSAgIGhhc2hfZ2V0X3NoYXJlZF9zaXplKGluZm9QLCBoYXNoX2ZsYWdzKSwKKwkJCQkJCQkg ICBoYXNoX2dldF9zaGFyZWRfc2l6ZShpbmZvUCwgaGFzaF9mbGFncywKKwkJCQkJCQkJCQkJCQlp bml0X3NpemUpLAogCQkJCQkJCSAgICZmb3VuZCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaGFzaC9keW5h aGFzaC5jCmluZGV4IDNmMjU5MjlmMmQ4Li41M2I4NGRiMDY4MyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2hhc2gv ZHluYWhhc2guYwpAQCAtMjYwLDEyICsyNjAsMzkgQEAgc3RhdGljIGxvbmcgaGFzaF9hY2Nlc3Nl cywKIAkJCWhhc2hfZXhwYW5zaW9uczsKICNlbmRpZgogCisvKiBhY2Nlc3MgdG8gcGFydHMgb2Yg dGhlIGhhc2ggdGFibGUsIGFsbG9jYXRlZCBhcyBhIHNpbmdsZSBjaHVuayAqLworI2RlZmluZQlI QVNIX0RJUkVDVE9SWV9QVFIoaGFzaHApIFwKKwkoKChjaGFyICopIChoYXNocCktPmhjdGwpICsg c2l6ZW9mKEhBU0hIRFIpKQorCisjZGVmaW5lIEhBU0hfU0VHTUVOVF9PRkZTRVQoaGN0bCwgaWR4 KSBcCisJKHNpemVvZihIQVNISERSKSArIFwKKwkgKChoY3RsKS0+ZHNpemUgKiBzaXplb2YoSEFT SFNFR01FTlQpKSArIFwKKwkgKChoY3RsKS0+c3NpemUgKiAoaWR4KSAqIHNpemVvZihIQVNIQlVD S0VUKSkpCisKKyNkZWZpbmUgSEFTSF9TRUdNRU5UX1BUUihoYXNocCwgaWR4KSBcCisJKChjaGFy ICopIChoYXNocCktPmhjdGwgKyBIQVNIX1NFR01FTlRfT0ZGU0VUKChoYXNocCktPmhjdGwsIChp ZHgpKSkKKworI2RlZmluZSBIQVNIX1NFR01FTlRfU0laRShoYXNocCkgXAorCSgoaGFzaHApLT5z c2l6ZSAqIHNpemVvZihIQVNIQlVDS0VUKSkKKworI2RlZmluZSBIQVNIX0VMRU1FTlRTX1BUUiho YXNocCwgbnNlZ3MpIFwKKwkoKGNoYXIgKikgKGhhc2hwKS0+aGN0bCArIEhBU0hfU0VHTUVOVF9P RkZTRVQoKGhhc2hwKS0+aGN0bCwgbnNlZ3MpKQorCisvKiBFYWNoIGVsZW1lbnQgaGFzIGEgSEFT SEVMRU1FTlQgaGVhZGVyIHBsdXMgdXNlciBkYXRhLiAqLworI2RlZmluZSBIQVNIX0VMRU1FTlRf U0laRShoY3RsKSBcCisJKE1BWEFMSUdOKHNpemVvZihIQVNIRUxFTUVOVCkpICsgTUFYQUxJR04o KGhjdGwpLT5lbnRyeXNpemUpKQorCisjZGVmaW5lIEhBU0hfRUxFTUVOVF9ORVhUKGhjdGwsIG51 bSwgcHRyKSBcCisJKChjaGFyICopIChwdHIpICsgKChudW0pICogSEFTSF9FTEVNRU5UX1NJWkUo aGN0bCkpKQorCiAvKgogICogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzCiAgKi8KIHN0YXRp YyB2b2lkICpEeW5hSGFzaEFsbG9jKFNpemUgc2l6ZSk7CiBzdGF0aWMgSEFTSFNFR01FTlQgc2Vn X2FsbG9jKEhUQUIgKmhhc2hwKTsKLXN0YXRpYyBib29sIGVsZW1lbnRfYWxsb2MoSFRBQiAqaGFz aHAsIGludCBuZWxlbSwgaW50IGZyZWVsaXN0X2lkeCk7CitzdGF0aWMgSEFTSEVMRU1FTlQgKmVs ZW1lbnRfYWxsb2MoSFRBQiAqaGFzaHAsIGludCBuZWxlbSk7CitzdGF0aWMgdm9pZCBlbGVtZW50 X2FkZChIVEFCICpoYXNocCwgSEFTSEVMRU1FTlQgKmZpcnN0RWxlbWVudCwKKwkJCQkJCWludCBu ZWxlbSwgaW50IGZyZWVsaXN0X2lkeCk7CiBzdGF0aWMgYm9vbCBkaXJfcmVhbGxvYyhIVEFCICpo YXNocCk7CiBzdGF0aWMgYm9vbCBleHBhbmRfdGFibGUoSFRBQiAqaGFzaHApOwogc3RhdGljIEhB U0hCVUNLRVQgZ2V0X2hhc2hfZW50cnkoSFRBQiAqaGFzaHAsIGludCBmcmVlbGlzdF9pZHgpOwpA QCAtMjgwLDYgKzMwNyw5IEBAIHN0YXRpYyBpbnQJbmV4dF9wb3cyX2ludChsb25nIG51bSk7CiBz dGF0aWMgdm9pZCByZWdpc3Rlcl9zZXFfc2NhbihIVEFCICpoYXNocCk7CiBzdGF0aWMgdm9pZCBk ZXJlZ2lzdGVyX3NlcV9zY2FuKEhUQUIgKmhhc2hwKTsKIHN0YXRpYyBib29sIGhhc19zZXFfc2Nh bnMoSFRBQiAqaGFzaHApOworc3RhdGljIHZvaWQgY29tcHV0ZV9idWNrZXRzX2FuZF9zZWdzKGxv bmcgbmVsZW0sIGxvbmcgbnVtX3BhcnRpdGlvbnMsCisJCQkJCQkJCQkgbG9uZyBzc2l6ZSwKKwkJ CQkJCQkJCSBpbnQgKm5idWNrZXRzLCBpbnQgKm5zZWdtZW50cyk7CiAKIAogLyoKQEAgLTU2OCwx MiArNTk4LDEyIEBAIGhhc2hfY3JlYXRlKGNvbnN0IGNoYXIgKnRhYm5hbWUsIGxvbmcgbmVsZW0s IGNvbnN0IEhBU0hDVEwgKmluZm8sIGludCBmbGFncykKIAkJZWxvZyhFUlJPUiwgImZhaWxlZCB0 byBpbml0aWFsaXplIGhhc2ggdGFibGUgXCIlc1wiIiwgaGFzaHAtPnRhYm5hbWUpOwogCiAJLyoK KwkgKiBGb3IgYSBwcml2YXRlIGhhc2ggdGFibGUsIHByZWFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQg bnVtYmVyIG9mIGVsZW1lbnRzCisJICogaWYgaXQncyBsZXNzIHRoYW4gb3VyIGNob3NlbiBuZWxl bV9hbGxvYy4gIFRoaXMgYXZvaWRzIHdhc3Rpbmcgc3BhY2UgaWYKKwkgKiB0aGUgY2FsbGVyIGNv cnJlY3RseSBlc3RpbWF0ZXMgYSBzbWFsbCB0YWJsZSBzaXplLgorCSAqCiAJICogRm9yIGEgc2hh cmVkIGhhc2ggdGFibGUsIHByZWFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGVsZW1l bnRzLgogCSAqIFRoaXMgcmVkdWNlcyBwcm9ibGVtcyB3aXRoIHJ1bi10aW1lIG91dC1vZi1zaGFy ZWQtbWVtb3J5IGNvbmRpdGlvbnMuCi0JICoKLQkgKiBGb3IgYSBub24tc2hhcmVkIGhhc2ggdGFi bGUsIHByZWFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mCi0JICogZWxlbWVudHMgaWYg aXQncyBsZXNzIHRoYW4gb3VyIGNob3NlbiBuZWxlbV9hbGxvYy4gIFRoaXMgYXZvaWRzIHdhc3Rp bmcKLQkgKiBzcGFjZSBpZiB0aGUgY2FsbGVyIGNvcnJlY3RseSBlc3RpbWF0ZXMgYSBzbWFsbCB0 YWJsZSBzaXplLgogCSAqLwogCWlmICgoZmxhZ3MgJiBIQVNIX1NIQVJFRF9NRU0pIHx8CiAJCW5l bGVtIDwgaGN0bC0+bmVsZW1fYWxsb2MpCkBAIC01ODIsNiArNjEyLDcgQEAgaGFzaF9jcmVhdGUo Y29uc3QgY2hhciAqdGFibmFtZSwgbG9uZyBuZWxlbSwgY29uc3QgSEFTSENUTCAqaW5mbywgaW50 IGZsYWdzKQogCQkJCQlmcmVlbGlzdF9wYXJ0aXRpb25zLAogCQkJCQluZWxlbV9hbGxvYywKIAkJ CQkJbmVsZW1fYWxsb2NfZmlyc3Q7CisJCXZvaWQJICAgKnB0ciA9IE5VTEw7CiAKIAkJLyoKIAkJ ICogSWYgaGFzaCB0YWJsZSBpcyBwYXJ0aXRpb25lZCwgZ2l2ZSBlYWNoIGZyZWVsaXN0IGFuIGVx dWFsIHNoYXJlIG9mCkBAIC02MDYsMTQgKzYzNyw0MiBAQCBoYXNoX2NyZWF0ZShjb25zdCBjaGFy ICp0YWJuYW1lLCBsb25nIG5lbGVtLCBjb25zdCBIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MpCiAJ CWVsc2UKIAkJCW5lbGVtX2FsbG9jX2ZpcnN0ID0gbmVsZW1fYWxsb2M7CiAKKwkJLyoKKwkJICog Rm9yIGEgc2hhcmVkIGhhc2ggdGFibGUsIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRv IGZpbmQgdGhlCisJCSAqIGZpcnN0IHBhcnRpdGlvbiBvZiBlbGVtZW50cy4gV2UgaGF2ZSB0byBz a2lwIHNwYWNlIGZvciB0aGUgaGVhZGVyLAorCQkgKiBzZWdtZW50cyBhbmQgYnVja2V0cy4KKwkJ ICovCisJCWlmIChoYXNocC0+aXNzaGFyZWQpCisJCQlwdHIgPSBIQVNIX0VMRU1FTlRTX1BUUiho YXNocCwgaGN0bC0+bnNlZ3MpOworCiAJCWZvciAoaSA9IDA7IGkgPCBmcmVlbGlzdF9wYXJ0aXRp b25zOyBpKyspCiAJCXsKIAkJCWludAkJCXRlbXAgPSAoaSA9PSAwKSA/IG5lbGVtX2FsbG9jX2Zp cnN0IDogbmVsZW1fYWxsb2M7CiAKLQkJCWlmICghZWxlbWVudF9hbGxvYyhoYXNocCwgdGVtcCwg aSkpCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01F TU9SWSksCi0JCQkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IikpKTsKKwkJCS8qCisJCQkgKiBB c3NpZ24gdGhlIGNvcnJlY3QgbG9jYXRpb24gb2YgZWFjaCBwYXJpdGlvbiB3aXRoaW4gYQorCQkJ ICogcHJlLWFsbG9jYXRlZCBidWZmZXIuCisJCQkgKgorCQkJICogQWN0dWFsIG1lbW9yeSBhbGxv Y2F0aW9uIGhhcHBlbnMgaW4gU2htZW1Jbml0SGFzaCBmb3Igc2hhcmVkCisJCQkgKiBoYXNoIHRh Ymxlcy4KKwkJCSAqCisJCQkgKiBXZSBqdXN0IG5lZWQgdG8gc3BsaXQgdGhhdCBhbGxvY2F0aW9u IGludG8gcGVyLWJhdGNoIGZyZWVsaXN0cy4KKwkJCSAqLworCQkJaWYgKGhhc2hwLT5pc3NoYXJl ZCkKKwkJCXsKKwkJCQllbGVtZW50X2FkZChoYXNocCwgKEhBU0hFTEVNRU5UICopIHB0ciwgdGVt cCwgaSk7CisJCQkJcHRyID0gSEFTSF9FTEVNRU5UX05FWFQoaGN0bCwgdGVtcCwgcHRyKTsKKwkJ CX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlIQVNIRUxFTUVOVCAqZmlyc3RFbGVtZW50ID0gZWxlbWVu dF9hbGxvYyhoYXNocCwgdGVtcCk7CisKKwkJCQlpZiAoIWZpcnN0RWxlbWVudCkKKwkJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAorCQkJ CQkJCSBlcnJtc2coIm91dCBvZiBtZW1vcnkiKSkpOworCQkJCWVsZW1lbnRfYWRkKGhhc2hwLCBm aXJzdEVsZW1lbnQsIHRlbXAsIGkpOworCQkJfQogCQl9CiAJfQogCkBAIC03MDIsMjkgKzc2MSwx NiBAQCBpbml0X2h0YWIoSFRBQiAqaGFzaHAsIGxvbmcgbmVsZW0pCiAJCQlTcGluTG9ja0luaXQo JihoY3RsLT5mcmVlTGlzdFtpXS5tdXRleCkpOwogCiAJLyoKLQkgKiBBbGxvY2F0ZSBzcGFjZSBm b3IgdGhlIG5leHQgZ3JlYXRlciBwb3dlciBvZiB0d28gbnVtYmVyIG9mIGJ1Y2tldHMsCi0JICog YXNzdW1pbmcgYSBkZXNpcmVkIG1heGltdW0gbG9hZCBmYWN0b3Igb2YgMS4KKwkgKiBXZSd2ZSBh bHJlYWR5IGNhbGN1bGF0ZWQgdGhlc2UgcGFyYW1ldGVycyB3aGVuIHdlIGNhbGN1bGF0ZWQgaG93 IG11Y2gKKwkgKiBzcGFjZSB0byBhbGxvY2F0ZSBpbiBoYXNoX2dldF9zaGFyZWRfc2l6ZSgpLiBC ZSBjYXJlZnVsIHRvIGtlZXAgdGhlc2UKKwkgKiB0d28gcGxhY2VzIGluIHN5bmMsIHNvIHRoYXQg d2UgZ2V0IHRoZSBzYW1lIHBhcmFtZXRlcnMuCiAJICovCi0JbmJ1Y2tldHMgPSBuZXh0X3BvdzJf aW50KG5lbGVtKTsKLQotCS8qCi0JICogSW4gYSBwYXJ0aXRpb25lZCB0YWJsZSwgbmJ1Y2tldHMg bXVzdCBiZSBhdCBsZWFzdCBlcXVhbCB0bwotCSAqIG51bV9wYXJ0aXRpb25zOyB3ZXJlIGl0IGxl c3MsIGtleXMgd2l0aCBhcHBhcmVudGx5IGRpZmZlcmVudCBwYXJ0aXRpb24KLQkgKiBudW1iZXJz IHdvdWxkIG1hcCB0byB0aGUgc2FtZSBidWNrZXQsIGJyZWFraW5nIHBhcnRpdGlvbiBpbmRlcGVu ZGVuY2UuCi0JICogKE5vcm1hbGx5IG5idWNrZXRzIHdpbGwgYmUgbXVjaCBiaWdnZXI7IHRoaXMg aXMganVzdCBhIHNhZmV0eSBjaGVjay4pCi0JICovCi0Jd2hpbGUgKG5idWNrZXRzIDwgaGN0bC0+ bnVtX3BhcnRpdGlvbnMpCi0JCW5idWNrZXRzIDw8PSAxOworCWNvbXB1dGVfYnVja2V0c19hbmRf c2VncyhuZWxlbSwgaGN0bC0+bnVtX3BhcnRpdGlvbnMsIGhjdGwtPnNzaXplLAorCQkJCQkJCSAm bmJ1Y2tldHMsICZuc2Vncyk7CiAKIAloY3RsLT5tYXhfYnVja2V0ID0gaGN0bC0+bG93X21hc2sg PSBuYnVja2V0cyAtIDE7CiAJaGN0bC0+aGlnaF9tYXNrID0gKG5idWNrZXRzIDw8IDEpIC0gMTsK IAotCS8qCi0JICogRmlndXJlIG51bWJlciBvZiBkaXJlY3Rvcnkgc2VnbWVudHMgbmVlZGVkLCBy b3VuZCB1cCB0byBhIHBvd2VyIG9mIDIKLQkgKi8KLQluc2VncyA9IChuYnVja2V0cyAtIDEpIC8g aGN0bC0+c3NpemUgKyAxOwotCW5zZWdzID0gbmV4dF9wb3cyX2ludChuc2Vncyk7Ci0KIAkvKgog CSAqIE1ha2Ugc3VyZSBkaXJlY3RvcnkgaXMgYmlnIGVub3VnaC4gSWYgcHJlLWFsbG9jYXRlZCBk aXJlY3RvcnkgaXMgdG9vCiAJICogc21hbGwsIGNob2tlIChjYWxsZXIgc2NyZXdlZCB1cCkuCkBA IC03NDgsMTIgKzc5NCwyMiBAQCBpbml0X2h0YWIoSFRBQiAqaGFzaHAsIGxvbmcgbmVsZW0pCiAJ fQogCiAJLyogQWxsb2NhdGUgaW5pdGlhbCBzZWdtZW50cyAqLworCWkgPSAwOwogCWZvciAoc2Vn cCA9IGhhc2hwLT5kaXI7IGhjdGwtPm5zZWdzIDwgbnNlZ3M7IGhjdGwtPm5zZWdzKyssIHNlZ3Ar KykKIAl7Ci0JCSpzZWdwID0gc2VnX2FsbG9jKGhhc2hwKTsKLQkJaWYgKCpzZWdwID09IE5VTEwp Ci0JCQlyZXR1cm4gZmFsc2U7CisJCS8qIEFzc2lnbiBpbml0aWFsIHNlZ21lbnRzLCB3aGljaCBh cmUgYWxzbyBwcmUtYWxsb2NhdGVkICovCisJCWlmIChoYXNocC0+aXNzaGFyZWQpCisJCXsKKwkJ CSpzZWdwID0gKEhBU0hTRUdNRU5UKSBIQVNIX1NFR01FTlRfUFRSKGhhc2hwLCBpKyspOworCQkJ TWVtU2V0KCpzZWdwLCAwLCBIQVNIX1NFR01FTlRfU0laRShoYXNocCkpOworCQl9CisJCWVsc2UK KwkJeworCQkJKnNlZ3AgPSBzZWdfYWxsb2MoaGFzaHApOworCQkJaSsrOworCQl9CiAJfQorCUFz c2VydChpID09IG5zZWdzKTsKIAogCS8qIENob29zZSBudW1iZXIgb2YgZW50cmllcyB0byBhbGxv Y2F0ZSBhdCBhIHRpbWUgKi8KIAloY3RsLT5uZWxlbV9hbGxvYyA9IGNob29zZV9uZWxlbV9hbGxv YyhoY3RsLT5lbnRyeXNpemUpOwpAQCAtODQ2LDE2ICs5MDIsNjAgQEAgaGFzaF9zZWxlY3RfZGly c2l6ZShsb25nIG51bV9lbnRyaWVzKQogfQogCiAvKgotICogQ29tcHV0ZSB0aGUgcmVxdWlyZWQg aW5pdGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYSBzaGFyZWQtbWVtb3J5Ci0gKiBoYXNodGFi bGUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIFdlIG5lZWQgc3BhY2UgZm9yIHRoZSBIQVNI SERSCi0gKiBhbmQgZm9yIHRoZSAobm9uIGV4cGFuc2libGUpIGRpcmVjdG9yeS4KKyAqIGhhc2hf Z2V0X3NoYXJlZF9zaXplIC0tIGRldGVybWluZSBtZW1vcnkgbmVlZGVkIGZvciBhIG5ldyBzaGFy ZWQgZHluYW1pYyBoYXNoIHRhYmxlCisgKgorICoJaW5mbzogaGFzaCB0YWJsZSBwYXJhbWV0ZXJz CisgKglmbGFnczogYml0bWFzayBpbmRpY2F0aW5nIHdoaWNoIHBhcmFtZXRlcnMgdG8gdGFrZSBm cm9tICppbmZvCisgKgluZWxlbTogbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgZXhwZWN0ZWQK KyAqCisgKiBDb21wdXRlIHRoZSByZXF1aXJlZCBpbml0aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGZv ciBhIGhhc2h0YWJsZSB3aXRoIHRoZSBnaXZlbgorICogcGFyYW1ldGVycy4gV2UgbmVlZCBzcGFj ZSBmb3IgdGhlIEhBU0hIRFIsIGZvciB0aGUgZGlyZWN0b3J5LCBzZWdtZW50cyBhbmQKKyAqIHBy ZWFsbG9jYXRlZCBlbGVtZW50cy4KKyAqCisgKiBGb3Igc2hhcmVkIGhhc2ggdGFibGVzIHRoZSBk aXJlY3Rvcnkgc2l6ZSBpcyBub24tZXhwYW5zaXZlLCBhbmQgd2UgcHJlYWxsb2NhdGUKKyAqIGFs bCBlbGVtZW50cyAobmVsZW0pLgogICovCiBTaXplCi1oYXNoX2dldF9zaGFyZWRfc2l6ZShIQVNI Q1RMICppbmZvLCBpbnQgZmxhZ3MpCitoYXNoX2dldF9zaGFyZWRfc2l6ZShjb25zdCBIQVNIQ1RM ICppbmZvLCBpbnQgZmxhZ3MsIGxvbmcgbmVsZW0pCiB7CisJaW50CQkJbmJ1Y2tldHM7CisJaW50 CQkJbnNlZ3M7CisJaW50CQkJbnVtX3BhcnRpdGlvbnM7CisJbG9uZwkJc3NpemU7CisJbG9uZwkJ ZHNpemU7CisJU2l6ZQkJZWxlbWVudFNpemUgPSBIQVNIX0VMRU1FTlRfU0laRShpbmZvKTsKKwor I2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkvKiBzaGFyZWQgaGFzaCB0YWJsZXMgaGF2ZSBu b24tZXhwYW5zaXZlIGRpcmVjdG9yeSAqLworCUFzc2VydChmbGFncyAmIEhBU0hfU0hBUkVEX01F TSk7CiAJQXNzZXJ0KGZsYWdzICYgSEFTSF9ESVJTSVpFKTsKIAlBc3NlcnQoaW5mby0+ZHNpemUg PT0gaW5mby0+bWF4X2RzaXplKTsKLQlyZXR1cm4gc2l6ZW9mKEhBU0hIRFIpICsgaW5mby0+ZHNp emUgKiBzaXplb2YoSEFTSFNFR01FTlQpOworI2VuZGlmCisKKwlkc2l6ZSA9IGluZm8tPmRzaXpl OworCisJaWYgKGZsYWdzICYgSEFTSF9TRUdNRU5UKQorCQlzc2l6ZSA9IGluZm8tPnNzaXplOwor CWVsc2UKKwkJc3NpemUgPSBERUZfU0VHU0laRTsKKworCWlmIChmbGFncyAmIEhBU0hfUEFSVElU SU9OKQorCXsKKwkJbnVtX3BhcnRpdGlvbnMgPSBpbmZvLT5udW1fcGFydGl0aW9uczsKKworCQkv KiBOdW1iZXIgb2YgZW50cmllcyBzaG91bGQgYmUgYXRsZWFzdCBlcXVhbCB0byB0aGUgZnJlZWxp c3RzICovCisJCWlmIChuZWxlbSA8IE5VTV9GUkVFTElTVFMpCisJCQluZWxlbSA9IE5VTV9GUkVF TElTVFM7CisJfQorCWVsc2UKKwkJbnVtX3BhcnRpdGlvbnMgPSAwOworCisJY29tcHV0ZV9idWNr ZXRzX2FuZF9zZWdzKG5lbGVtLCBudW1fcGFydGl0aW9ucywgc3NpemUsCisJCQkJCQkJICZuYnVj a2V0cywgJm5zZWdzKTsKKworCXJldHVybiBzaXplb2YoSEFTSEhEUikgKyBkc2l6ZSAqIHNpemVv ZihIQVNIU0VHTUVOVCkKKwkJKyBzaXplb2YoSEFTSEJVQ0tFVCkgKiBzc2l6ZSAqIG5zZWdzCisJ CSsgbmVsZW0gKiBlbGVtZW50U2l6ZTsKIH0KIAogCkBAIC0xMjg1LDcgKzEzODUsNyBAQCBnZXRf aGFzaF9lbnRyeShIVEFCICpoYXNocCwgaW50IGZyZWVsaXN0X2lkeCkKIAkJICogRmFpbGluZyBi ZWNhdXNlIHRoZSBuZWVkZWQgZWxlbWVudCBpcyBpbiBhIGRpZmZlcmVudCBmcmVlbGlzdCBpcwog CQkgKiBub3QgYWNjZXB0YWJsZS4KIAkJICovCi0JCWlmICghZWxlbWVudF9hbGxvYyhoYXNocCwg aGN0bC0+bmVsZW1fYWxsb2MsIGZyZWVsaXN0X2lkeCkpCisJCWlmICgobmV3RWxlbWVudCA9IGVs ZW1lbnRfYWxsb2MoaGFzaHAsIGhjdGwtPm5lbGVtX2FsbG9jKSkgPT0gTlVMTCkKIAkJewogCQkJ aW50CQkJYm9ycm93X2Zyb21faWR4OwogCkBAIC0xMzIyLDYgKzE0MjIsNyBAQCBnZXRfaGFzaF9l bnRyeShIVEFCICpoYXNocCwgaW50IGZyZWVsaXN0X2lkeCkKIAkJCS8qIG5vIGVsZW1lbnRzIGF2 YWlsYWJsZSB0byBib3Jyb3cgZWl0aGVyLCBzbyBvdXQgb2YgbWVtb3J5ICovCiAJCQlyZXR1cm4g TlVMTDsKIAkJfQorCQllbGVtZW50X2FkZChoYXNocCwgbmV3RWxlbWVudCwgaGN0bC0+bmVsZW1f YWxsb2MsIGZyZWVsaXN0X2lkeCk7CiAJfQogCiAJLyogcmVtb3ZlIGVudHJ5IGZyb20gZnJlZWxp c3QsIGJ1bXAgbmVudHJpZXMgKi8KQEAgLTE3MDAsMjkgKzE4MDEsNDMgQEAgc2VnX2FsbG9jKEhU QUIgKmhhc2hwKQogfQogCiAvKgotICogYWxsb2NhdGUgc29tZSBuZXcgZWxlbWVudHMgYW5kIGxp bmsgdGhlbSBpbnRvIHRoZSBpbmRpY2F0ZWQgZnJlZSBsaXN0CisgKiBhbGxvY2F0ZSBzb21lIG5l dyBlbGVtZW50cwogICovCi1zdGF0aWMgYm9vbAotZWxlbWVudF9hbGxvYyhIVEFCICpoYXNocCwg aW50IG5lbGVtLCBpbnQgZnJlZWxpc3RfaWR4KQorc3RhdGljIEhBU0hFTEVNRU5UICoKK2VsZW1l bnRfYWxsb2MoSFRBQiAqaGFzaHAsIGludCBuZWxlbSkKIHsKIAlIQVNISERSICAgICpoY3RsID0g aGFzaHAtPmhjdGw7CiAJU2l6ZQkJZWxlbWVudFNpemU7Ci0JSEFTSEVMRU1FTlQgKmZpcnN0RWxl bWVudDsKLQlIQVNIRUxFTUVOVCAqdG1wRWxlbWVudDsKLQlIQVNIRUxFTUVOVCAqcHJldkVsZW1l bnQ7Ci0JaW50CQkJaTsKKwlIQVNIRUxFTUVOVCAqZmlyc3RFbGVtZW50ID0gTlVMTDsKIAogCWlm IChoYXNocC0+aXNmaXhlZCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCS8q IEVhY2ggZWxlbWVudCBoYXMgYSBIQVNIRUxFTUVOVCBoZWFkZXIgcGx1cyB1c2VyIGRhdGEuICov Ci0JZWxlbWVudFNpemUgPSBNQVhBTElHTihzaXplb2YoSEFTSEVMRU1FTlQpKSArIE1BWEFMSUdO KGhjdGwtPmVudHJ5c2l6ZSk7Ci0KKwllbGVtZW50U2l6ZSA9IEhBU0hfRUxFTUVOVF9TSVpFKGhj dGwpOwogCUN1cnJlbnREeW5hSGFzaEN4dCA9IGhhc2hwLT5oY3h0OwogCWZpcnN0RWxlbWVudCA9 IChIQVNIRUxFTUVOVCAqKSBoYXNocC0+YWxsb2MobmVsZW0gKiBlbGVtZW50U2l6ZSk7CiAKIAlp ZiAoIWZpcnN0RWxlbWVudCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKKworCXJl dHVybiBmaXJzdEVsZW1lbnQ7Cit9CisKKy8qCisgKiBsaW5rIHRoZSBlbGVtZW50cyBhbGxvY2F0 ZWQgYnkgZWxlbWVudF9hbGxvYyBpbnRvIHRoZSBpbmRpY2F0ZWQgZnJlZSBsaXN0CisgKi8KK3N0 YXRpYyB2b2lkCitlbGVtZW50X2FkZChIVEFCICpoYXNocCwgSEFTSEVMRU1FTlQgKmZpcnN0RWxl bWVudCwgaW50IG5lbGVtLCBpbnQgZnJlZWxpc3RfaWR4KQoreworCUhBU0hIRFIgICAgKmhjdGwg PSBoYXNocC0+aGN0bDsKKwlTaXplCQllbGVtZW50U2l6ZTsKKwlIQVNIRUxFTUVOVCAqdG1wRWxl bWVudDsKKwlIQVNIRUxFTUVOVCAqcHJldkVsZW1lbnQ7CisJaW50CQkJaTsKKworCS8qIEVhY2gg ZWxlbWVudCBoYXMgYSBIQVNIRUxFTUVOVCBoZWFkZXIgcGx1cyB1c2VyIGRhdGEuICovCisJZWxl bWVudFNpemUgPSBIQVNIX0VMRU1FTlRfU0laRShoY3RsKTsKIAogCS8qIHByZXBhcmUgdG8gbGlu ayBhbGwgdGhlIG5ldyBlbnRyaWVzIGludG8gdGhlIGZyZWVsaXN0ICovCiAJcHJldkVsZW1lbnQg PSBOVUxMOwpAQCAtMTc0NCw4ICsxODU5LDYgQEAgZWxlbWVudF9hbGxvYyhIVEFCICpoYXNocCwg aW50IG5lbGVtLCBpbnQgZnJlZWxpc3RfaWR4KQogCiAJaWYgKElTX1BBUlRJVElPTkVEKGhjdGwp KQogCQlTcGluTG9ja1JlbGVhc2UoJmhjdGwtPmZyZWVMaXN0W2ZyZWVsaXN0X2lkeF0ubXV0ZXgp OwotCi0JcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC0xOTU3LDMgKzIwNzAsMzQgQEAgQXRFT1N1 YlhhY3RfSGFzaFRhYmxlcyhib29sIGlzQ29tbWl0LCBpbnQgbmVzdERlcHRoKQogCQl9CiAJfQog fQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYnVja2V0cyBhbmQgc2VnbWVudHMg dG8gc3RvcmUgdGhlIGdpdmVuCisgKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBoYXNoIHRhYmxl LiBTZWdtZW50cyBjb250YWluIGJ1Y2tldHMgd2hpY2gKKyAqIGluIHR1cm4gY29udGFpbiBlbGVt ZW50cy4KKyAqLworc3RhdGljIHZvaWQKK2NvbXB1dGVfYnVja2V0c19hbmRfc2Vncyhsb25nIG5l bGVtLCBsb25nIG51bV9wYXJ0aXRpb25zLCBsb25nIHNzaXplLAorCQkJCQkJIGludCAqbmJ1Y2tl dHMsIGludCAqbnNlZ21lbnRzKQoreworCS8qCisJICogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBu ZXh0IGdyZWF0ZXIgcG93ZXIgb2YgdHdvIG51bWJlciBvZiBidWNrZXRzLAorCSAqIGFzc3VtaW5n IGEgZGVzaXJlZCBtYXhpbXVtIGxvYWQgZmFjdG9yIG9mIDEuCisJICovCisJKm5idWNrZXRzID0g bmV4dF9wb3cyX2ludChuZWxlbSk7CisKKwkvKgorCSAqIEluIGEgcGFydGl0aW9uZWQgdGFibGUs IG5idWNrZXRzIG11c3QgYmUgYXQgbGVhc3QgZXF1YWwgdG8KKwkgKiBudW1fcGFydGl0aW9uczsg d2VyZSBpdCBsZXNzLCBrZXlzIHdpdGggYXBwYXJlbnRseSBkaWZmZXJlbnQgcGFydGl0aW9uCisJ ICogbnVtYmVycyB3b3VsZCBtYXAgdG8gdGhlIHNhbWUgYnVja2V0LCBicmVha2luZyBwYXJ0aXRp b24gaW5kZXBlbmRlbmNlLgorCSAqIChOb3JtYWxseSBuYnVja2V0cyB3aWxsIGJlIG11Y2ggYmln Z2VyOyB0aGlzIGlzIGp1c3QgYSBzYWZldHkgY2hlY2suKQorCSAqLworCXdoaWxlICgoKm5idWNr ZXRzKSA8IG51bV9wYXJ0aXRpb25zKQorCQkoKm5idWNrZXRzKSA8PD0gMTsKKworCS8qCisJICog RmlndXJlIG51bWJlciBvZiBkaXJlY3Rvcnkgc2VnbWVudHMgbmVlZGVkLCByb3VuZCB1cCB0byBh IHBvd2VyIG9mIDIKKwkgKi8KKwkqbnNlZ21lbnRzID0gKCgqbmJ1Y2tldHMpIC0gMSkgLyBzc2l6 ZSArIDE7CisJKm5zZWdtZW50cyA9IG5leHRfcG93Ml9pbnQoKm5zZWdtZW50cyk7Cit9CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9oc2VhcmNoLmggYi9zcmMvaW5jbHVkZS91dGlscy9o c2VhcmNoLmgKaW5kZXggOTMyY2M0ZjM0ZDkuLjVjZWZkYTFjMjJjIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS91dGlscy9oc2VhcmNoLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvaHNlYXJjaC5o CkBAIC0xNTEsNyArMTUxLDggQEAgZXh0ZXJuIHZvaWQgaGFzaF9zZXFfdGVybShIQVNIX1NFUV9T VEFUVVMgKnN0YXR1cyk7CiBleHRlcm4gdm9pZCBoYXNoX2ZyZWV6ZShIVEFCICpoYXNocCk7CiBl eHRlcm4gU2l6ZSBoYXNoX2VzdGltYXRlX3NpemUobG9uZyBudW1fZW50cmllcywgU2l6ZSBlbnRy eXNpemUpOwogZXh0ZXJuIGxvbmcgaGFzaF9zZWxlY3RfZGlyc2l6ZShsb25nIG51bV9lbnRyaWVz KTsKLWV4dGVybiBTaXplIGhhc2hfZ2V0X3NoYXJlZF9zaXplKEhBU0hDVEwgKmluZm8sIGludCBm bGFncyk7CitleHRlcm4gU2l6ZSBoYXNoX2dldF9zaGFyZWRfc2l6ZShjb25zdCBIQVNIQ1RMICpp bmZvLCBpbnQgZmxhZ3MsCisJCQkJCQkJCSBsb25nIG5lbGVtKTsKIGV4dGVybiB2b2lkIEF0RU9Y YWN0X0hhc2hUYWJsZXMoYm9vbCBpc0NvbW1pdCk7CiBleHRlcm4gdm9pZCBBdEVPU3ViWGFjdF9I YXNoVGFibGVzKGJvb2wgaXNDb21taXQsIGludCBuZXN0RGVwdGgpOwogCi0tIAoyLjM0LjEKCg== --000000000000c069310631f5c71e--