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.96) (envelope-from ) id 1wXs0J-003Wmk-0M for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Jun 2026 02:52:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wXs0I-000QV4-01 for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Jun 2026 02:52:18 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wXs0H-000QUw-28 for pgsql-hackers@lists.postgresql.org; Fri, 12 Jun 2026 02:52:17 +0000 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wXs0F-00000002edi-1PUW for pgsql-hackers@lists.postgresql.org; Fri, 12 Jun 2026 02:52:17 +0000 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-bebb72b845aso77040166b.3 for ; Thu, 11 Jun 2026 19:52:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781232734; cv=none; d=google.com; s=arc-20240605; b=b3wVdgVDmpz23HXDCO4B/6RQMcSl7+yLiC9Z4Ffc8OnCjAaWQZ/o3gK8THGLXZf67d 2hMcNbSBO1w9SLtdty4LJg/gocjPYtEinLWlugRWZdpoFwgiuufVIFnoY0ILkIxtw4Cb oG1IrSqYnWjMPPbS3mkNYyAxA04PWs0zwoeoGTUwRgXaAWddHNkTYIxC4M9mbvYycjSY Q0i6Od9BasE4h+dpySZo/H4DL/u2bTRyvDAUbQnIsRCvYZCwMo9eHfUfEvz0mEf+SB5m 3FMe4rNu+dPy+1J9ppExk3ZpfvwnTHFlB0bT3xwx+tCbzsNLWCe4OOIwrGoGJB9JJqnh FtPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Boib9HRknacp2UPf2/aDW84wFXgl31twt17BacPI8c8=; fh=Ivt41/kY/+gx8ksg4xC+gdK+QOy+5Bw57Nn5owzEvS0=; b=ZVJF4RcBgXZxAfvBadUj3VanlNrhxumNk7sHy3TwmcEwuOzBeHdYEGen3xjV8iqLNm rDaD51/No/g40peQIep3DT9Q/pBNPu4y7dRXOyrWhcwUEpNrs46mbBJ4tFGsr1WuVmyg xQuvWCK3Tx5+U4R86wwebG9tYfLBCH/Wpac35qIZ1mvcYxwktIPmsCP99DaiI3Lhzbrf 76+ME2ynffaEg/GsrbE6VHXgNUHsN89ztcfniXb1bKV9pNBauRsgvFdpPjHmH3dg+dPc Xgstzd0+iz7AIdqR2TvRckXOVeDUlIhg7zXO25PTnWVF6LXLy4jSdIsLjy71HbPZP1y1 sCOg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781232734; x=1781837534; darn=lists.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=Boib9HRknacp2UPf2/aDW84wFXgl31twt17BacPI8c8=; b=II5FbmVyLVoTX6ix69jWPX2CGy2zKNLrCjvkwVJWiz9n7U/Tx/+NLsVkGR/cFoYDRh /sqmrtkSn7eil4yvCmK4wzhIMO2fLuuaTx56+hBYnxwXmwG1gDweIjnZkrmNUumde8qv FtzTSWEj05pGP8PgMv/HNP39ecevcqeevgpCtJOod3PN8M0K8Y51ORCTAZRTUXxqcWMb n3122UHXouHpJLy3wMZdWUVI4JK7qS9HAF+KQVeCN68CsvvwXrxRG3fKN3D1O0ga9q4h rmXc4SGxGLRHg7BY8mLJo4P20b7Yv1Vv44jPR27/djKVcmheoJCT0Y9yc0hH44eS1RqD H4dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781232734; x=1781837534; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Boib9HRknacp2UPf2/aDW84wFXgl31twt17BacPI8c8=; b=n2RO+wJ0NqvaKFlSBbuf1vn4b+4+2dl9tA8jeKmGVkF9iVv4V4n9vKvAiPEyk0bpVp oGr/fK1HZCCXB4YKZinuYkoAvQgak+sXv4hUgJ8c1MH3RT7T51yJ2v0BQQiJbGim9IZF XOGWcGwvRNloyLVCwScM+KFWWCAF3yH4LG0z0pAV/ofOeDBgPUC0bS+YVhzxnGiew/1k hx5whRpexm/9369pgcmO3ACkBU+WH0umylz1B5VvQUoa77ovgwYMStwKIwbiL755Poqv 0LfkAUBhmOxP0smJV7uqtIt5fD25mph+a+cXKS1HJvwaNWArUao9svmIob4Kt9bBTZ2I vGNw== X-Forwarded-Encrypted: i=1; AFNElJ+Ys0FFvNe997N3N427XS0AfHQS7EbnrfB6vFdvWHarvfCZwtL95sHsEs6rArNQ4SHsgeOlXlAplooAPmVp@lists.postgresql.org X-Gm-Message-State: AOJu0YwWFBYunZlyRRPxNlowGggdMr0fmRJ0fbGLO/7JpS2cGxWAOwq+ eLYH9iUD1I8Dmj8VZLWJ5Se2Wa4zv9aW10YsfcakfgwdL+8p5EEbEfnQDeseG8qNkR6qWcP3DK5 qVuDH8poL4UhHQ+iLJmY+CFlfpa+hFtU= X-Gm-Gg: Acq92OHDLeQ5UURtDPzsFMpyv2JXLFC4yDTjTxdONS+mHDQNsAyD9ZTwUh0MEauP9He rC4QXhn+FBdbHXNKqLx8X20fDL11YNjz17r8ZBAgjz/JtdteVWWgsl9Vj+he4W/H+LyvpyhRo7q 6GUdLH9WBHT60EqwdkuXP5NlSn9XLoKFm0kLmCxFAXo1qHH4XbZGYQKMGLRsl8LjH4xDvQ9tH4C QxcA5c+B+ou7biItvDO+Ne7As3A8uHblYtSFVmqCPDt4HYv33jo9w3jbUysYJ4pkssJwYjP96NQ 2zBTuOxQfAapJrr6zB0WqxmgQ//lVTHs0UnEEtTpwMmVTp77A8cTLmIIE+H4onjymUZHsCFunoG EliiS X-Received: by 2002:a17:907:b11:b0:bee:b5f2:639d with SMTP id a640c23a62f3a-bfe27e0ab85mr16528466b.10.1781232733493; Thu, 11 Jun 2026 19:52:13 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Xuneng Zhou Date: Fri, 12 Jun 2026 10:52:01 +0800 X-Gm-Features: AVVi8CdIl0hpTVbK0r5Fr0BVxf7Yk6FAGHkUaqpzTV0C2Sfr_bKxdihsRIOQib0 Message-ID: Subject: Re: Fix race in ReplicationSlotRelease for ephemeral slots To: Fujii Masao , Amit Kapila Cc: "Zhijie Hou (Fujitsu)" , Srinath Reddy Sadipiralla , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000057d83a06540590a6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000057d83a06540590a6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Fujii-san, Amit, The issues look real to me and could be dealt with patch v1 partially. On Thu, Jun 11, 2026 at 9:19=E2=80=AFPM Fujii Masao = wrote: > > On Thu, Jun 11, 2026 at 8:18=E2=80=AFPM Amit Kapila wrote: > > 1. Stale name read in local_sync_slot_required(): The reused cell > > holds a different name. local_sync_slot_required() might return false > > (drop needed). But then the in_use && synced spinlock check sees > > synced =3D false and skips the actual drop. The wrong decision is > > caught. > > Yes, we could skip the actual drop. But then wouldn't we still emit > the log message "dropped replication slot ..." even though no slot was > actually dropped? With v1, we won't emit the log message unless the log is factually dropped. However it did not prevent the stale read in local_sync_slot_required(). > > 2. Wrong database OID read at line 551: The reused cell holds OID_B > > from the new slot. We lock OID_B, then at lines 563=E2=80=93565 we see = synced > > =3D false, skip the drop, and unlock OID_B at line 579. Since no drop > > occurred, the cell is still the same non-synced slot, so the lock and > > unlock see the same OID_B. Symmetric =E2=80=94 no lock leak. > > What happens if the slot for OID_B is dropped after we lock > OID_B, and then a new slot for OID_C reuses the same array entry? In > that case, wouldn't the later unlock read OID_C from > local_slot->data.database even though the lock was originally taken on > OID_B? V1 stops doing the venerable second read of local_slot->data.database. So if the copied value was already stale and points to OID_B, v1 is at least symmetric: read OID_B once lock OID_B cell reused as OID_C unlock OID_B But v1 seems not to fully solve issue 1. It can still do this: cell already reused before slot_database is copied v1 copies OID_B from replacement slot locks OID_B recheck sees synced=3Dfalse skips drop unlocks OID_B That is still a stale read and possibly a wasted/wrong database lock, but it doesn't leak the lock, unlocks the wrong object, logs a false drop, or drops the replacement slot. In an off-list chat with Zhijie, we kinda thought that holding the lock of a wrong db for a brief time doesn't seem to harm a lot. The concurrent dropping-db operation leads to this issue seems rare in practice. He stated that the deletion of the slot seems unavoidable because we have to acquire the database lock after releasing the replication slot lock to avoid the deadlock with the startup/drop db operation. Therefore, he prefered keeping the design simple and avoiding the fatal issue over doing a broader refactoring work. I don't have a strong opinion on this. Still attaching the refactoring patch to do some clean-up in case someone thinks it's worthwhile. -- Regards, Xuneng Zhou HighGo Software Co., Ltd. --00000000000057d83a06540590a6 Content-Type: application/octet-stream; name="v1-0001-Avoid-stale-slot-access-after-dropping-obsolete-s.patch" Content-Disposition: attachment; filename="v1-0001-Avoid-stale-slot-access-after-dropping-obsolete-s.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqabvt111 RnJvbSBlOTIwYWRjYjVjMDE1MTBmOTRlZTc1ZjI2MTMzZTBlZmE2MDg5MDM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbHRlcmVnbzY1NSA8ODI0NjYyNTI2QHFxLmNvbT4KRGF0ZTog VHVlLCAyIEp1biAyMDI2IDEzOjE0OjU0ICswODAwClN1YmplY3Q6IFtQQVRDSCB2MV0gQXZvaWQg c3RhbGUgc2xvdCBhY2Nlc3MgYWZ0ZXIgZHJvcHBpbmcgb2Jzb2xldGUgc3luY2VkCiBzbG90cwoK ZHJvcF9sb2NhbF9vYnNvbGV0ZV9zbG90cygpIGtlcHQgdXNpbmcgbG9jYWxfc2xvdCBhZnRlciBj YWxsaW5nClJlcGxpY2F0aW9uU2xvdERyb3BBY3F1aXJlZCgpLiAgT25jZSB0aGUgZHJvcCBjb21w bGV0ZXMsIHRoZSBzbG90IGFycmF5IGVudHJ5IGNhbgpiZSByZXVzZWQgYnkgYW5vdGhlciBiYWNr ZW5kLCBzbyBsYXRlciByZWFkcyBvZiBsb2NhbF9zbG90LT5kYXRhIGNvdWxkIHJlZmVyIHRvIGEK ZGlmZmVyZW50IHNsb3QuCgpDb3B5IHRoZSBzbG90IG5hbWUgYW5kIGRhdGFiYXNlIE9JRCBiZWZv cmUgZHJvcHBpbmcgdGhlIHNsb3QsIGFuZCB1c2UgdGhvc2UKc2F2ZWQgdmFsdWVzIGZvciB1bmxv Y2tpbmcgYW5kIGxvZ2dpbmcgYWZ0ZXIgdGhlIGRyb3AuCi0tLQogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9zbG90c3luYy5jIHwgMjUgKysrKysrKysrKysrKystLS0tLS0tLQogMSBm aWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCmluZGV4IDkzZjQxYmUzMmFmLi5lYTcz ZjBhYTI2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90 c3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYwpA QCAtNTQxLDYgKzU0MSw5IEBAIGRyb3BfbG9jYWxfb2Jzb2xldGVfc2xvdHMoTGlzdCAqcmVtb3Rl X3Nsb3RfbGlzdCkKIAkJLyogRHJvcCB0aGUgbG9jYWwgc2xvdCBpZiBpdCBpcyBub3QgcmVxdWly ZWQgdG8gYmUgcmV0YWluZWQuICovCiAJCWlmICghbG9jYWxfc3luY19zbG90X3JlcXVpcmVkKGxv Y2FsX3Nsb3QsIHJlbW90ZV9zbG90X2xpc3QpKQogCQl7CisJCQlib29sCQlkcm9wcGVkID0gZmFs c2U7CisJCQlOYW1lRGF0YQlzbG90X25hbWUgPSB7MH07CisJCQlPaWQJCQlzbG90X2RhdGFiYXNl ID0gbG9jYWxfc2xvdC0+ZGF0YS5kYXRhYmFzZTsKIAkJCWJvb2wJCXN5bmNlZF9zbG90OwogCiAJ CQkvKgpAQCAtNTQ4LDggKzU1MSw4IEBAIGRyb3BfbG9jYWxfb2Jzb2xldGVfc2xvdHMoTGlzdCAq cmVtb3RlX3Nsb3RfbGlzdCkKIAkJCSAqIFJlcGxpY2F0aW9uU2xvdHNEcm9wREJTbG90cygpLCB0 cnlpbmcgdG8gZHJvcCB0aGUgc2FtZSBzbG90CiAJCQkgKiBkdXJpbmcgYSBkcm9wLWRhdGFiYXNl IG9wZXJhdGlvbi4KIAkJCSAqLwotCQkJTG9ja1NoYXJlZE9iamVjdChEYXRhYmFzZVJlbGF0aW9u SWQsIGxvY2FsX3Nsb3QtPmRhdGEuZGF0YWJhc2UsCi0JCQkJCQkJIDAsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQlMb2NrU2hhcmVkT2JqZWN0KERhdGFiYXNlUmVsYXRpb25JZCwgc2xvdF9kYXRhYmFz ZSwgMCwKKwkJCQkJCQkgQWNjZXNzU2hhcmVMb2NrKTsKIAogCQkJLyoKIAkJCSAqIEluIHRoZSBz bWFsbCB3aW5kb3cgYmV0d2VlbiBnZXR0aW5nIHRoZSBzbG90IHRvIGRyb3AgYW5kCkBAIC01NjIs NiArNTY1LDggQEAgZHJvcF9sb2NhbF9vYnNvbGV0ZV9zbG90cyhMaXN0ICpyZW1vdGVfc2xvdF9s aXN0KQogCQkJICovCiAJCQlTcGluTG9ja0FjcXVpcmUoJmxvY2FsX3Nsb3QtPm11dGV4KTsKIAkJ CXN5bmNlZF9zbG90ID0gbG9jYWxfc2xvdC0+aW5fdXNlICYmIGxvY2FsX3Nsb3QtPmRhdGEuc3lu Y2VkOworCQkJaWYgKHN5bmNlZF9zbG90KQorCQkJCXNsb3RfbmFtZSA9IGxvY2FsX3Nsb3QtPmRh dGEubmFtZTsKIAkJCVNwaW5Mb2NrUmVsZWFzZSgmbG9jYWxfc2xvdC0+bXV0ZXgpOwogCiAJCQlp ZiAoc3luY2VkX3Nsb3QpCkBAIC01NzIsMTcgKzU3NywxOSBAQCBkcm9wX2xvY2FsX29ic29sZXRl X3Nsb3RzKExpc3QgKnJlbW90ZV9zbG90X2xpc3QpCiAJCQkJICogYSBzdGFuZGJ5LCB3aGljaCBk ZXJpdmVzIGl0cyBsb2dpY2FsIGRlY29kaW5nIHN0YXRlIGZyb20KIAkJCQkgKiB0aGUgcHJpbWFy eSwgaXQgd291bGQgYmUgd3JvbmcgdG8gZG8gc28uCiAJCQkJICovCi0JCQkJUmVwbGljYXRpb25T bG90QWNxdWlyZShOYW1lU3RyKGxvY2FsX3Nsb3QtPmRhdGEubmFtZSksIHRydWUsIGZhbHNlKTsK KwkJCQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIoc2xvdF9uYW1lKSwgdHJ1ZSwgZmFs c2UpOwogCQkJCVJlcGxpY2F0aW9uU2xvdERyb3BBY3F1aXJlZChmYWxzZSk7CisJCQkJZHJvcHBl ZCA9IHRydWU7CiAJCQl9CiAKLQkJCVVubG9ja1NoYXJlZE9iamVjdChEYXRhYmFzZVJlbGF0aW9u SWQsIGxvY2FsX3Nsb3QtPmRhdGEuZGF0YWJhc2UsCi0JCQkJCQkJICAgMCwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJCVVubG9ja1NoYXJlZE9iamVjdChEYXRhYmFzZVJlbGF0aW9uSWQsIHNsb3RfZGF0 YWJhc2UsIDAsCisJCQkJCQkJICAgQWNjZXNzU2hhcmVMb2NrKTsKIAotCQkJZXJlcG9ydChMT0cs Ci0JCQkJCWVycm1zZygiZHJvcHBlZCByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBvZiBkYXRhYmFz ZSB3aXRoIE9JRCAldSIsCi0JCQkJCQkgICBOYW1lU3RyKGxvY2FsX3Nsb3QtPmRhdGEubmFtZSks Ci0JCQkJCQkgICBsb2NhbF9zbG90LT5kYXRhLmRhdGFiYXNlKSk7CisJCQlpZiAoZHJvcHBlZCkK KwkJCQllcmVwb3J0KExPRywKKwkJCQkJCWVycm1zZygiZHJvcHBlZCByZXBsaWNhdGlvbiBzbG90 IFwiJXNcIiBvZiBkYXRhYmFzZSB3aXRoIE9JRCAldSIsCisJCQkJCQkJICAgTmFtZVN0cihzbG90 X25hbWUpLAorCQkJCQkJCSAgIHNsb3RfZGF0YWJhc2UpKTsKIAkJfQogCX0KIH0KLS0gCjIuNTEu MAoK --00000000000057d83a06540590a6 Content-Type: application/octet-stream; name="v1-0002-Avoid-stale-slot-pointers-in-slotsync-cleanup.patch" Content-Disposition: attachment; filename="v1-0002-Avoid-stale-slot-pointers-in-slotsync-cleanup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqabvt0w0 RnJvbSBjNzQxZTVjMTIwNWVmZWRjYzY4NDFjODVhYjA1Mzk4MzJjNjU4NTc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbHRlcmVnbzY1NSA8ODI0NjYyNTI2QHFxLmNvbT4KRGF0ZTog RnJpLCAxMiBKdW4gMjAyNiAxMDoyNzowNCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjFdIEF2b2lk IHN0YWxlIHNsb3QgcG9pbnRlcnMgaW4gc2xvdHN5bmMgY2xlYW51cAoKZHJvcF9sb2NhbF9vYnNv bGV0ZV9zbG90cygpIGtlcHQgcmF3IFJlcGxpY2F0aW9uU2xvdCAqIHZhbHVlcyBhZnRlcgpzY2Fu bmluZyB0aGUgc2hhcmVkIHNsb3QgYXJyYXkuIE9uY2UgUmVwbGljYXRpb25TbG90Q29udHJvbExv Y2sgd2FzCnJlbGVhc2VkLCB0aG9zZSBhcnJheSBlbnRyaWVzIGNvdWxkIGJlIGRyb3BwZWQgYW5k IHJldXNlZCBiZWZvcmUgdGhlCmxhdGVyIHJldGVudGlvbiBjaGVjayBvciBkYXRhYmFzZS1sb2Nr L2Ryb3AgcGF0aC4KCkNvcHkgdGhlIGxvY2FsIHN5bmNlZCBzbG90IGlkZW50aXR5IHdoaWxlIHNj YW5uaW5nIHRoZSBhcnJheSwgYW5kIGNhcnJ5CnRob3NlIGNvcGllZCB2YWx1ZXMgaW5zdGVhZCBv ZiByYXcgc2xvdCBwb2ludGVycy4gUmV2YWxpZGF0ZSB0aGUgY29waWVkCmlkZW50aXR5IGJlZm9y ZSBhY3F1aXJpbmcgYW5kIGRyb3BwaW5nIHRoZSBzbG90LCBhbmQgdXNlIHRoZSBjb3BpZWQKbmFt ZSBhbmQgZGF0YWJhc2UgT0lEIGZvciBhY3F1aXJlLCB1bmxvY2ssIGFuZCBsb2dnaW5nLgoKVGhp cyBtYWtlcyB0aGUgY2xlYW51cCBwYXRoIGF2b2lkIGRlcGVuZGluZyBvbiBzbG90IGFycmF5IGVu dHJpZXMKcmVtYWluaW5nIHN0YWJsZSBhY3Jvc3MgdW5sb2NrZWQgd2luZG93cy4KLS0tCiBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgfCAyMDUgKysrKysrKysrKysr KysrKystLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgfCAg IDEgKwogMiBmaWxlcyBjaGFuZ2VkLCAxNjcgaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCmluZGV4IGVhNzNm MGFhMjYyLi5hMzIzZGY0NTJmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9zbG90c3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv c2xvdHN5bmMuYwpAQCAtMTc4LDYgKzE3OCwyMCBAQCB0eXBlZGVmIHN0cnVjdCBSZW1vdGVTbG90 CiAJUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgaW52YWxpZGF0ZWQ7CiB9IFJlbW90 ZVNsb3Q7CiAKKy8qCisgKiBDb3BpZWQgaWRlbnRpdHkgb2YgYSBsb2NhbCBzeW5jaHJvbml6ZWQg c2xvdC4KKyAqCisgKiBUaGUgc2xvdCBudW1iZXIgaXMgYSBjYWNoZWQgYXJyYXkgcG9zaXRpb24g dXNlZCB0byBhdm9pZCBhIGxhdGVyIG5hbWUgc2Nhbi4KKyAqIEl0IGlzIG5vdCBzdWZmaWNpZW50 IGFzIGlkZW50aXR5IGJ5IGl0c2VsZiBiZWNhdXNlIHNsb3QgYXJyYXkgZW50cmllcyBjYW4gYmUK KyAqIHJldXNlZCBhZnRlciBhIHNsb3QgaXMgZHJvcHBlZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg TG9jYWxTeW5jZWRTbG90Cit7CisJTmFtZURhdGEJbmFtZTsKKwlPaWQJCQlkYXRhYmFzZTsKKwlp bnQJCQlzbG90bm87Cit9IExvY2FsU3luY2VkU2xvdDsKKwogc3RhdGljIHZvaWQgc2xvdHN5bmNf ZmFpbHVyZV9jYWxsYmFjayhpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIHVwZGF0 ZV9zeW5jZWRfc2xvdHNfaW5hY3RpdmVfc2luY2Uodm9pZCk7CiAKQEAgLTQ0NCw3ICs0NTgsNyBA QCB1cGRhdGVfbG9jYWxfc3luY2VkX3Nsb3QoUmVtb3RlU2xvdCAqcmVtb3RlX3Nsb3QsIE9pZCBy ZW1vdGVfZGJpZCkKIH0KIAogLyoKLSAqIEdldCB0aGUgbGlzdCBvZiBsb2NhbCBsb2dpY2FsIHNs b3RzIHRoYXQgYXJlIHN5bmNocm9uaXplZCBmcm9tIHRoZQorICogR2V0IGNvcGllZCBpZGVudGl0 aWVzIG9mIGxvY2FsIGxvZ2ljYWwgc2xvdHMgdGhhdCBhcmUgc3luY2hyb25pemVkIGZyb20gdGhl CiAgKiBwcmltYXJ5IHNlcnZlci4KICAqLwogc3RhdGljIExpc3QgKgpAQCAtNDU5LDEwICs0NzMs MjkgQEAgZ2V0X2xvY2FsX3N5bmNlZF9zbG90cyh2b2lkKQogCQlSZXBsaWNhdGlvblNsb3QgKnMg PSAmUmVwbGljYXRpb25TbG90Q3RsLT5yZXBsaWNhdGlvbl9zbG90c1tpXTsKIAogCQkvKiBDaGVj ayBpZiBpdCBpcyBhIHN5bmNocm9uaXplZCBzbG90ICovCi0JCWlmIChzLT5pbl91c2UgJiYgcy0+ ZGF0YS5zeW5jZWQpCisJCWlmIChzLT5pbl91c2UpCiAJCXsKLQkJCUFzc2VydChTbG90SXNMb2dp Y2FsKHMpKTsKLQkJCWxvY2FsX3Nsb3RzID0gbGFwcGVuZChsb2NhbF9zbG90cywgcyk7CisJCQlM b2NhbFN5bmNlZFNsb3QgbG9jYWxfc2xvdDsKKwkJCWJvb2wJCXN5bmNlZDsKKworCQkJU3Bpbkxv Y2tBY3F1aXJlKCZzLT5tdXRleCk7CisJCQlzeW5jZWQgPSBzLT5kYXRhLnN5bmNlZDsKKwkJCWlm IChzeW5jZWQpCisJCQl7CisJCQkJbG9jYWxfc2xvdC5uYW1lID0gcy0+ZGF0YS5uYW1lOworCQkJ CWxvY2FsX3Nsb3QuZGF0YWJhc2UgPSBzLT5kYXRhLmRhdGFiYXNlOworCQkJCWxvY2FsX3Nsb3Qu c2xvdG5vID0gaTsKKwkJCX0KKwkJCVNwaW5Mb2NrUmVsZWFzZSgmcy0+bXV0ZXgpOworCisJCQlp ZiAoc3luY2VkKQorCQkJeworCQkJCUxvY2FsU3luY2VkU2xvdCAqc2xvdCA9IHBhbGxvYyhzaXpl b2YoTG9jYWxTeW5jZWRTbG90KSk7CisKKwkJCQlBc3NlcnQobG9jYWxfc2xvdC5kYXRhYmFzZSAh PSBJbnZhbGlkT2lkKTsKKwkJCQkqc2xvdCA9IGxvY2FsX3Nsb3Q7CisJCQkJbG9jYWxfc2xvdHMg PSBsYXBwZW5kKGxvY2FsX3Nsb3RzLCBzbG90KTsKKwkJCX0KIAkJfQogCX0KIApAQCAtNDcxLDM0 ICs1MDQsMTI1IEBAIGdldF9sb2NhbF9zeW5jZWRfc2xvdHModm9pZCkKIAlyZXR1cm4gbG9jYWxf c2xvdHM7CiB9CiAKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSBwcmV2aW91c2x5IG9ic2VydmVk IHNsb3QgYXJyYXkgY2VsbCBzdGlsbCBjb250YWlucyBhCisgKiBzeW5jaHJvbml6ZWQgbG9naWNh bCBzbG90IG1hdGNoaW5nIHRoZSBjb3BpZWQgaWRlbnRpdHkuIElmIHJlcXVlc3RlZCwgY29weQor ICogdGhlIGN1cnJlbnQgaW52YWxpZGF0aW9uIGNhdXNlLgorICovCitzdGF0aWMgYm9vbAorbG9j YWxfc3luY2VkX3Nsb3RfbWF0Y2hlcyhjb25zdCBMb2NhbFN5bmNlZFNsb3QgKmxvY2FsX3Nsb3Qs CisJCQkJCQkgIFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlICppbnZhbGlkYXRlZCkK K3sKKwlSZXBsaWNhdGlvblNsb3QgKnNsb3Q7CisJYm9vbAkJbWF0Y2hlcyA9IGZhbHNlOworCisJ TFdMb2NrQWNxdWlyZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jaywgTFdfU0hBUkVEKTsKKwor CUFzc2VydChsb2NhbF9zbG90LT5zbG90bm8gPj0gMCk7CisJQXNzZXJ0KGxvY2FsX3Nsb3QtPnNs b3RubyA8CisJCSAgIG1heF9yZXBsaWNhdGlvbl9zbG90cyArIG1heF9yZXBhY2tfcmVwbGljYXRp b25fc2xvdHMpOworCisJc2xvdCA9ICZSZXBsaWNhdGlvblNsb3RDdGwtPnJlcGxpY2F0aW9uX3Ns b3RzW2xvY2FsX3Nsb3QtPnNsb3Rub107CisJaWYgKHNsb3QtPmluX3VzZSkKKwl7CisJCU5hbWVE YXRhCXNsb3RfbmFtZTsKKwkJT2lkCQkJc2xvdF9kYXRhYmFzZTsKKwkJYm9vbAkJc2xvdF9zeW5j ZWQ7CisJCVJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIHNsb3RfaW52YWxpZGF0ZWQ7 CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZzbG90LT5tdXRleCk7CisJCXNsb3RfbmFtZSA9IHNsb3Qt PmRhdGEubmFtZTsKKwkJc2xvdF9kYXRhYmFzZSA9IHNsb3QtPmRhdGEuZGF0YWJhc2U7CisJCXNs b3Rfc3luY2VkID0gc2xvdC0+ZGF0YS5zeW5jZWQ7CisJCXNsb3RfaW52YWxpZGF0ZWQgPSBzbG90 LT5kYXRhLmludmFsaWRhdGVkOworCQlTcGluTG9ja1JlbGVhc2UoJnNsb3QtPm11dGV4KTsKKwor CQkvKgorCQkgKiBBIHN5bmNlZCBzbG90J3MgZGF0YWJhc2UgY2FuIGJlIHVwZGF0ZWQgYnkgc2xv dCBzeW5jaHJvbml6YXRpb24sIHNvCisJCSAqIGRhdGFiYXNlIGlzIG5vdCBnbG9iYWxseSBpbW11 dGFibGUuIEl0IGlzIHN0aWxsIHBhcnQgb2YgdGhlIGNvcGllZAorCQkgKiBpZGVudGl0eSBoZXJl IGJlY2F1c2Ugc2xvdCBzeW5jaHJvbml6YXRpb24gaXMgc2VyaWFsaXplZCBieQorCQkgKiBTbG90 U3luY0N0eC0+c3luY2luZy4KKwkJICovCisJCW1hdGNoZXMgPSBzbG90X2RhdGFiYXNlICE9IElu dmFsaWRPaWQgJiYKKwkJCXNsb3Rfc3luY2VkICYmCisJCQlzdHJjbXAoTmFtZVN0cihzbG90X25h bWUpLCBOYW1lU3RyKGxvY2FsX3Nsb3QtPm5hbWUpKSA9PSAwICYmCisJCQlzbG90X2RhdGFiYXNl ID09IGxvY2FsX3Nsb3QtPmRhdGFiYXNlOworCisJCWlmIChtYXRjaGVzICYmIGludmFsaWRhdGVk KQorCQkJKmludmFsaWRhdGVkID0gc2xvdF9pbnZhbGlkYXRlZDsKKwl9CisKKwlMV0xvY2tSZWxl YXNlKFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrKTsKKworCXJldHVybiBtYXRjaGVzOworfQor CisvKgorICogQ2hlY2sgd2hldGhlciB0aGUgYWNxdWlyZWQgc2xvdCBzdGlsbCBtYXRjaGVzIGEg cHJldmlvdXNseSBjb3BpZWQgbG9jYWwgc2xvdAorICogaWRlbnRpdHkuCisgKi8KK3N0YXRpYyBi b29sCithY3F1aXJlZF9zbG90X21hdGNoZXMoY29uc3QgTG9jYWxTeW5jZWRTbG90ICpsb2NhbF9z bG90KQoreworCVJlcGxpY2F0aW9uU2xvdCAqc2xvdCA9IE15UmVwbGljYXRpb25TbG90OworCU5h bWVEYXRhCXNsb3RfbmFtZTsKKwlPaWQJCQlzbG90X2RhdGFiYXNlOworCWJvb2wJCXNsb3Rfc3lu Y2VkOworCWludAkJCXNsb3RubzsKKworCUFzc2VydChzbG90ICE9IE5VTEwpOworCisJLyoKKwkg KiBXZSBvd24gTXlSZXBsaWNhdGlvblNsb3QsIHNvIHNsb3QuaCBhbGxvd3MgcmVhZGluZyBpdHMg ZmllbGRzIHdpdGhvdXQKKwkgKiB0YWtpbmcgdGhlIHNsb3QgbXV0ZXguCisJICovCisJc2xvdF9u YW1lID0gc2xvdC0+ZGF0YS5uYW1lOworCXNsb3RfZGF0YWJhc2UgPSBzbG90LT5kYXRhLmRhdGFi YXNlOworCXNsb3Rfc3luY2VkID0gc2xvdC0+ZGF0YS5zeW5jZWQ7CisJc2xvdG5vID0gUmVwbGlj YXRpb25TbG90SW5kZXgoc2xvdCk7CisKKwlyZXR1cm4gc2xvdG5vID09IGxvY2FsX3Nsb3QtPnNs b3RubyAmJgorCQlzbG90X2RhdGFiYXNlICE9IEludmFsaWRPaWQgJiYKKwkJc2xvdF9zeW5jZWQg JiYKKwkJc3RyY21wKE5hbWVTdHIoc2xvdF9uYW1lKSwgTmFtZVN0cihsb2NhbF9zbG90LT5uYW1l KSkgPT0gMCAmJgorCQlzbG90X2RhdGFiYXNlID09IGxvY2FsX3Nsb3QtPmRhdGFiYXNlOworfQor CiAvKgogICogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGxvY2FsX3Nsb3QgaXMgcmVxdWly ZWQgdG8gYmUgcmV0YWluZWQuCiAgKgogICogUmV0dXJuIGZhbHNlIGVpdGhlciBpZiBsb2NhbF9z bG90IGRvZXMgbm90IGV4aXN0IGluIHRoZSByZW1vdGVfc2xvdHMgbGlzdAotICogb3IgaXMgaW52 YWxpZGF0ZWQgd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlIHNsb3QgaXMgc3RpbGwgdmFs aWQsCi0gKiBvdGhlcndpc2UgdHJ1ZS4KKyAqIG9yIGlzIGludmFsaWRhdGVkIHdoaWxlIHRoZSBj b3JyZXNwb25kaW5nIHJlbW90ZSBzbG90IGlzIHN0aWxsIHZhbGlkLCBvciBpZgorICogdGhlIGNv cGllZCBsb2NhbCBzbG90IG5vIGxvbmdlciBtYXRjaGVzIHRoZSBjdXJyZW50IHNsb3QgYXJyYXkg ZW50cnkuCisgKiBPdGhlcndpc2UsIHJldHVybiB0cnVlLgogICovCiBzdGF0aWMgYm9vbAotbG9j YWxfc3luY19zbG90X3JlcXVpcmVkKFJlcGxpY2F0aW9uU2xvdCAqbG9jYWxfc2xvdCwgTGlzdCAq cmVtb3RlX3Nsb3RzKQorbG9jYWxfc3luY19zbG90X3JlcXVpcmVkKGNvbnN0IExvY2FsU3luY2Vk U2xvdCAqbG9jYWxfc2xvdCwgTGlzdCAqcmVtb3RlX3Nsb3RzKQogewogCWJvb2wJCXJlbW90ZV9l eGlzdHMgPSBmYWxzZTsKIAlib29sCQlsb2NhbGx5X2ludmFsaWRhdGVkID0gZmFsc2U7CiAKIAlm b3JlYWNoX3B0cihSZW1vdGVTbG90LCByZW1vdGVfc2xvdCwgcmVtb3RlX3Nsb3RzKQogCXsKLQkJ aWYgKHN0cmNtcChyZW1vdGVfc2xvdC0+bmFtZSwgTmFtZVN0cihsb2NhbF9zbG90LT5kYXRhLm5h bWUpKSA9PSAwKQorCQlpZiAoc3RyY21wKHJlbW90ZV9zbG90LT5uYW1lLCBOYW1lU3RyKGxvY2Fs X3Nsb3QtPm5hbWUpKSA9PSAwKQogCQl7CiAJCQlyZW1vdGVfZXhpc3RzID0gdHJ1ZTsKIAogCQkJ LyoKIAkJCSAqIElmIHJlbW90ZSBzbG90IGlzIG5vdCBpbnZhbGlkYXRlZCBidXQgbG9jYWwgc2xv dCBpcyBtYXJrZWQgYXMKLQkJCSAqIGludmFsaWRhdGVkLCB0aGVuIHNldCBsb2NhbGx5X2ludmFs aWRhdGVkIGZsYWcuCisJCQkgKiBpbnZhbGlkYXRlZCwgdGhlbiBzZXQgbG9jYWxseV9pbnZhbGlk YXRlZCBmbGFnLiBXaGVuIHRoZSByZW1vdGUKKwkJCSAqIHNsb3QgaXMgYWxyZWFkeSBpbnZhbGlk YXRlZCwga2VlcCB0aGUgbG9jYWwgc2xvdCBhcyBiZWZvcmUgYW5kCisJCQkgKiBhdm9pZCBhbiB1 bm5lY2Vzc2FyeSByZXZhbGlkYXRpb24uCiAJCQkgKi8KLQkJCVNwaW5Mb2NrQWNxdWlyZSgmbG9j YWxfc2xvdC0+bXV0ZXgpOwotCQkJbG9jYWxseV9pbnZhbGlkYXRlZCA9Ci0JCQkJKHJlbW90ZV9z bG90LT5pbnZhbGlkYXRlZCA9PSBSU19JTlZBTF9OT05FKSAmJgotCQkJCShsb2NhbF9zbG90LT5k YXRhLmludmFsaWRhdGVkICE9IFJTX0lOVkFMX05PTkUpOwotCQkJU3BpbkxvY2tSZWxlYXNlKCZs b2NhbF9zbG90LT5tdXRleCk7CisJCQlpZiAocmVtb3RlX3Nsb3QtPmludmFsaWRhdGVkID09IFJT X0lOVkFMX05PTkUpCisJCQl7CisJCQkJUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2Ug aW52YWxpZGF0ZWQ7CisKKwkJCQlpZiAoIWxvY2FsX3N5bmNlZF9zbG90X21hdGNoZXMobG9jYWxf c2xvdCwgJmludmFsaWRhdGVkKSkKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJbG9jYWxseV9p bnZhbGlkYXRlZCA9IGludmFsaWRhdGVkICE9IFJTX0lOVkFMX05PTkU7CisJCQl9CiAKIAkJCWJy ZWFrOwogCQl9CkBAIC01MzYsNDAgKzY2MCwzMSBAQCBkcm9wX2xvY2FsX29ic29sZXRlX3Nsb3Rz KExpc3QgKnJlbW90ZV9zbG90X2xpc3QpCiB7CiAJTGlzdAkgICAqbG9jYWxfc2xvdHMgPSBnZXRf bG9jYWxfc3luY2VkX3Nsb3RzKCk7CiAKLQlmb3JlYWNoX3B0cihSZXBsaWNhdGlvblNsb3QsIGxv Y2FsX3Nsb3QsIGxvY2FsX3Nsb3RzKQorCWZvcmVhY2hfcHRyKExvY2FsU3luY2VkU2xvdCwgbG9j YWxfc2xvdCwgbG9jYWxfc2xvdHMpCiAJewogCQkvKiBEcm9wIHRoZSBsb2NhbCBzbG90IGlmIGl0 IGlzIG5vdCByZXF1aXJlZCB0byBiZSByZXRhaW5lZC4gKi8KIAkJaWYgKCFsb2NhbF9zeW5jX3Ns b3RfcmVxdWlyZWQobG9jYWxfc2xvdCwgcmVtb3RlX3Nsb3RfbGlzdCkpCiAJCXsKIAkJCWJvb2wJ CWRyb3BwZWQgPSBmYWxzZTsKLQkJCU5hbWVEYXRhCXNsb3RfbmFtZSA9IHswfTsKLQkJCU9pZAkJ CXNsb3RfZGF0YWJhc2UgPSBsb2NhbF9zbG90LT5kYXRhLmRhdGFiYXNlOwotCQkJYm9vbAkJc3lu Y2VkX3Nsb3Q7CiAKIAkJCS8qCiAJCQkgKiBVc2Ugc2hhcmVkIGxvY2sgdG8gcHJldmVudCBhIGNv bmZsaWN0IHdpdGgKIAkJCSAqIFJlcGxpY2F0aW9uU2xvdHNEcm9wREJTbG90cygpLCB0cnlpbmcg dG8gZHJvcCB0aGUgc2FtZSBzbG90CiAJCQkgKiBkdXJpbmcgYSBkcm9wLWRhdGFiYXNlIG9wZXJh dGlvbi4KIAkJCSAqLwotCQkJTG9ja1NoYXJlZE9iamVjdChEYXRhYmFzZVJlbGF0aW9uSWQsIHNs b3RfZGF0YWJhc2UsIDAsCisJCQlMb2NrU2hhcmVkT2JqZWN0KERhdGFiYXNlUmVsYXRpb25JZCwg bG9jYWxfc2xvdC0+ZGF0YWJhc2UsIDAsCiAJCQkJCQkJIEFjY2Vzc1NoYXJlTG9jayk7CiAKIAkJ CS8qCi0JCQkgKiBJbiB0aGUgc21hbGwgd2luZG93IGJldHdlZW4gZ2V0dGluZyB0aGUgc2xvdCB0 byBkcm9wIGFuZAotCQkJICogbG9ja2luZyB0aGUgZGF0YWJhc2UsIHRoZXJlIGlzIGEgcG9zc2li aWxpdHkgb2YgYSBwYXJhbGxlbAotCQkJICogZGF0YWJhc2UgZHJvcCBieSB0aGUgc3RhcnR1cCBw cm9jZXNzIGFuZCB0aGUgY3JlYXRpb24gb2YgYSBuZXcKLQkJCSAqIHNsb3QgYnkgdGhlIHVzZXIu IFRoaXMgbmV3IHVzZXItY3JlYXRlZCBzbG90IG1heSBlbmQgdXAgdXNpbmcKLQkJCSAqIHRoZSBz YW1lIHNoYXJlZCBtZW1vcnkgYXMgdGhhdCBvZiAnbG9jYWxfc2xvdCcuIFRodXMgY2hlY2sgaWYK LQkJCSAqIGxvY2FsX3Nsb3QgaXMgc3RpbGwgdGhlIHN5bmNlZCBvbmUgYmVmb3JlIHBlcmZvcm1p bmcgdGhlIGFjdHVhbAotCQkJICogZHJvcC4KKwkJCSAqIEluIHRoZSB3aW5kb3cgYmV0d2VlbiBj b3B5aW5nIHRoZSBzbG90IGlkZW50aXR5IGFuZCBsb2NraW5nIHRoZQorCQkJICogZGF0YWJhc2Us IHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgb2YgYSBwYXJhbGxlbCBkYXRhYmFzZSBkcm9wIGJ5CisJ CQkgKiB0aGUgc3RhcnR1cCBwcm9jZXNzIGFuZCB0aGUgY3JlYXRpb24gb2YgYSBuZXcgc2xvdCBi eSB0aGUgdXNlci4KKwkJCSAqIFRoaXMgbmV3IHVzZXItY3JlYXRlZCBzbG90IG1heSBlbmQgdXAg dXNpbmcgdGhlIHNhbWUgc2hhcmVkCisJCQkgKiBtZW1vcnkgY2VsbCBhcyB0aGUgY29waWVkIHNs b3QuIFRodXMgY2hlY2sgd2hldGhlciB0aGUgY2FjaGVkCisJCQkgKiBzbG90IHBvc2l0aW9uIHN0 aWxsIGNvbnRhaW5zIHRoZSBzYW1lIHN5bmNlZCBzbG90IGJlZm9yZQorCQkJICogcGVyZm9ybWlu ZyB0aGUgYWN0dWFsIGRyb3AuCiAJCQkgKi8KLQkJCVNwaW5Mb2NrQWNxdWlyZSgmbG9jYWxfc2xv dC0+bXV0ZXgpOwotCQkJc3luY2VkX3Nsb3QgPSBsb2NhbF9zbG90LT5pbl91c2UgJiYgbG9jYWxf c2xvdC0+ZGF0YS5zeW5jZWQ7Ci0JCQlpZiAoc3luY2VkX3Nsb3QpCi0JCQkJc2xvdF9uYW1lID0g bG9jYWxfc2xvdC0+ZGF0YS5uYW1lOwotCQkJU3BpbkxvY2tSZWxlYXNlKCZsb2NhbF9zbG90LT5t dXRleCk7Ci0KLQkJCWlmIChzeW5jZWRfc2xvdCkKKwkJCWlmIChsb2NhbF9zeW5jZWRfc2xvdF9t YXRjaGVzKGxvY2FsX3Nsb3QsIE5VTEwpKQogCQkJewogCQkJCS8qCiAJCQkJICogTm93IGFjcXVp cmUgYW5kIGRyb3AgdGhlIHNsb3QuICBOb3RlIHdlIHB1cnBvc2VseSBkb24ndApAQCAtNTc3LDIx ICs2OTIsMzMgQEAgZHJvcF9sb2NhbF9vYnNvbGV0ZV9zbG90cyhMaXN0ICpyZW1vdGVfc2xvdF9s aXN0KQogCQkJCSAqIGEgc3RhbmRieSwgd2hpY2ggZGVyaXZlcyBpdHMgbG9naWNhbCBkZWNvZGlu ZyBzdGF0ZSBmcm9tCiAJCQkJICogdGhlIHByaW1hcnksIGl0IHdvdWxkIGJlIHdyb25nIHRvIGRv IHNvLgogCQkJCSAqLwotCQkJCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUoTmFtZVN0cihzbG90X25h bWUpLCB0cnVlLCBmYWxzZSk7Ci0JCQkJUmVwbGljYXRpb25TbG90RHJvcEFjcXVpcmVkKGZhbHNl KTsKLQkJCQlkcm9wcGVkID0gdHJ1ZTsKKwkJCQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVT dHIobG9jYWxfc2xvdC0+bmFtZSksIHRydWUsIGZhbHNlKTsKKworCQkJCS8qCisJCQkJICogUmVj aGVjayB0aGUgYWNxdWlyZWQgc2xvdCBkZWZlbnNpdmVseSBpbiBjYXNlIHRoZSBzbG90CisJCQkJ ICogY2hhbmdlZCBiZXR3ZWVuIHJldmFsaWRhdGlvbiBhbmQgYWNxdWlzaXRpb24uCisJCQkJICov CisJCQkJaWYgKGFjcXVpcmVkX3Nsb3RfbWF0Y2hlcyhsb2NhbF9zbG90KSkKKwkJCQl7CisJCQkJ CVJlcGxpY2F0aW9uU2xvdERyb3BBY3F1aXJlZChmYWxzZSk7CisJCQkJCWRyb3BwZWQgPSB0cnVl OworCQkJCX0KKwkJCQllbHNlCisJCQkJCVJlcGxpY2F0aW9uU2xvdFJlbGVhc2UoKTsKIAkJCX0K IAotCQkJVW5sb2NrU2hhcmVkT2JqZWN0KERhdGFiYXNlUmVsYXRpb25JZCwgc2xvdF9kYXRhYmFz ZSwgMCwKKwkJCVVubG9ja1NoYXJlZE9iamVjdChEYXRhYmFzZVJlbGF0aW9uSWQsIGxvY2FsX3Ns b3QtPmRhdGFiYXNlLCAwLAogCQkJCQkJCSAgIEFjY2Vzc1NoYXJlTG9jayk7CiAKIAkJCWlmIChk cm9wcGVkKQogCQkJCWVyZXBvcnQoTE9HLAogCQkJCQkJZXJybXNnKCJkcm9wcGVkIHJlcGxpY2F0 aW9uIHNsb3QgXCIlc1wiIG9mIGRhdGFiYXNlIHdpdGggT0lEICV1IiwKLQkJCQkJCQkgICBOYW1l U3RyKHNsb3RfbmFtZSksCi0JCQkJCQkJICAgc2xvdF9kYXRhYmFzZSkpOworCQkJCQkJCSAgIE5h bWVTdHIobG9jYWxfc2xvdC0+bmFtZSksCisJCQkJCQkJICAgbG9jYWxfc2xvdC0+ZGF0YWJhc2Up KTsKIAkJfQogCX0KKworCWxpc3RfZnJlZV9kZWVwKGxvY2FsX3Nsb3RzKTsKIH0KIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOGNmNDBjODcwNDMuLjY2MzM4M2IwNTMxIDEwMDY0 NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTY0Niw2ICsxNjQ2LDcgQEAgTG9JbmZvCiBMb2Fk U3RtdAogTG9jYWxCdWZmZXJMb29rdXBFbnQKIExvY2FsUGdCYWNrZW5kU3RhdHVzCitMb2NhbFN5 bmNlZFNsb3QKIExvY2FsVHJhbnNhY3Rpb25JZAogTG9jYXRpb24KIExvY2F0aW9uSW5kZXgKLS0g CjIuNTEuMAoK --00000000000057d83a06540590a6--