Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qEuRl-0000Id-Il for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Jun 2023 16:24:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qEuRk-0004eA-Ba for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Jun 2023 16:24:40 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qEuRj-0004e0-Ul for pgsql-hackers@lists.postgresql.org; Thu, 29 Jun 2023 16:24:40 +0000 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qEuRg-001CZF-50 for pgsql-hackers@lists.postgresql.org; Thu, 29 Jun 2023 16:24:39 +0000 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-666ecf9a0ceso575681b3a.2 for ; Thu, 29 Jun 2023 09:24:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=timescale.com; s=google; t=1688055874; x=1690647874; h=in-reply-to:cc:to:from:references:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=Im+PK122T55MAKOIa2t582c5caK455RwF9BXUZd3JlI=; b=PHqvyWIxdlaf+V5+KvcXN6z2pRsZbEf4d6gTWhBl8vUj3qMTV18d14FeOFcHzziazN h9iLU9f7vBbOZZTMx4O7mvq1ffs8EKW5HvgZyb8LJd36axvNV5SoXaraxUiQJC53aw+k FQlEweR9X71EUQhUCFtZ5SSBStiWyZdz8Gl+n1sAGrOPs9zBdJfhvrU2m2mWxIluaIzX BwGdCg8rxhihixo8djwnyzD722SqyopvdtHiWefoKTL1vseiBvINlLO9FBgqkpRTpOC6 8akuDgeIWHUTjlqwFxpe0bJYaEEQ2zC1oCaDZqM1BzHqvgcJBRTESL/bJ5KGY8kShnne tOhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688055874; x=1690647874; h=in-reply-to:cc:to:from:references:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Im+PK122T55MAKOIa2t582c5caK455RwF9BXUZd3JlI=; b=YWJEhzlOXUMULdt6y089gSgR1APEngATlMblOj+aNYsLue21swmoZTEwyCENFCClqL L+nLVARbSNvvWNu5N/u4/A6tggPSQduCxZMSn+aydiOwqjCuY1XKiWom8QirjL16Xm63 SrouptAzenovB+6KFLZf2oxL7aXN1ReuR9738NUpXOSxxG0cfjZL2LmL8UJAwqUzv3l2 zROxftil1r147l8xVg9iyGqJwDL9tsL14ceASXD4Jhlx4S/xtUrI/EwjxDumNGKD4i0w eiH79oG1xwlU4ZW42oaBR5GN8vVkoEAqr1FrLFr4Esjzg5dJ3WLhXza5CguuKvsnIOJx BhDw== X-Gm-Message-State: AC+VfDxm9p48XNy/xk3XXvj0PwSHKVqsJiPwHiIZu50qkmMQQDU3H83k y7Q+an8rolKJQMdGhbYmhLvq/dVsBE/ocSd0fhtzVQ== X-Google-Smtp-Source: ACHHUZ7hJWwredCWPeYx0q6notMov7BnAYUBj+Ol/9LGlU94Q2bUY0hxOjYXjfe26ODIGRqEIz5ueQ== X-Received: by 2002:a05:6a20:8f0c:b0:117:a2f3:3c93 with SMTP id b12-20020a056a208f0c00b00117a2f33c93mr293297pzk.2.1688055874027; Thu, 29 Jun 2023 09:24:34 -0700 (PDT) Received: from [192.168.1.21] ([50.53.8.205]) by smtp.gmail.com with ESMTPSA id e25-20020aa78c59000000b00675701f456csm7030305pfd.54.2023.06.29.09.24.33 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 29 Jun 2023 09:24:33 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------keKq0kQkPtu3vEciRSgHaXNP" Message-ID: Date: Thu, 29 Jun 2023 09:24:32 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: pg_dump needs SELECT privileges on irrelevant extension table Content-Language: en-US References: <00d46a48-3324-d9a0-49bf-e7f0f11d1038@timescale.com> <954419.1679334206@sss.pgh.pa.us> From: Jacob Champion To: PostgreSQL Hackers Cc: Tom Lane In-Reply-To: <954419.1679334206@sss.pgh.pa.us> 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. --------------keKq0kQkPtu3vEciRSgHaXNP Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 3/20/23 10:43, Tom Lane wrote: > I'd be more willing to consider the proposed patch if it weren't such > a hack --- as you say, it doesn't fix the problem when the table has > policies, so it's hardly a general-purpose solution. I fear that it's > also fairly expensive: adding sub-selects to the query we must do > before we can lock any tables is not appetizing, because making that > window wider adds to the risk of deadlocks, dump failures, etc. (moving to -hackers and July CF) = Recap for Potential Reviewers = The timescaledb extension has an internal table that's owned by the superuser. It's not dumpable, and other users can only access its contents through a filtered view. For our cloud deployments, we additionally have that common trope where the most privileged users aren't actually superusers, but we still want them to be able to perform a subset of maintenance tasks, including pg_dumping their data. When cloud users try to dump that data, pg_dump sees that this internal table is an extension member and plans to dump ACLs, security labels, and RLS policies for it. (This behavior cannot be overridden with --exclude-table. pg_dump ignores that flag for extension members.) Dumping policies requires the use of pg_get_expr() on the backend; this, in turn, requires a lock on the table with ACCESS SHARE. So pg_dump tries to lock a table, with no policies, that it's not going to dump the schema or data for anyway, and it fails because our users don't have (and shouldn't need) SELECT access to it. For an example of this in action, I've attached a test case in v2-0001. = Proposal = Since this is affecting users on released Postgres versions, my end goal is to find a fix that's backportable. This situation looks very similar to [1], where non-superusers couldn't perform a dump because we were eagerly grabbing table locks to read (non-existent) ACLs. But that was solved with the realization that ACLs don't need locks anyway, which is unfortunately not applicable to policies. My initial patch to -bugs was a riff on a related performance fix [2], which figured out which tables had interesting ACLs and skipped that part if nothing was found. I added the same kind of subselect for RLS policies as well, but that had nasty corner cases where it would perform terribly, as Tom alluded to above. (In a cluster of 200k tables, where one single table had 10M policies, the query ground to a halt.) So v2-0002 is instead inspired by Tom's rewrite of that ACL dump logic [3]. It scans pg_policy separately, stores the tables it finds into the catalog map on the client side, and then again skips the policy dump (and therefore the lock) if no policies exist. The performance hit now scales with the size of pg_policy alone. This is a bit more invasive than the subselect, but hopefully still straightforward enough to be applicable to the back branches' old catalog map strategy. It's still not a general-purpose fix, as Tom pointed out above, but that was true of the discussion in [1] as well, so I'm optimistic. WDYT? --Jacob [1] https://postgr.es/m/CAGPqQf3Uzo-yU1suYyoZR83h6QTxXxkGTtEyeMV7EAVBqn%3DPcQ%40mail.gmail.com [2] https://git.postgresql.org/cgit/postgresql.git/commit/?id=5d589993 [3] https://git.postgresql.org/cgit/postgresql.git/commit/?id=0c9d8442 --------------keKq0kQkPtu3vEciRSgHaXNP Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Add-failing-test-for-undumped-extension-table.patch" Content-Disposition: attachment; filename*0="v2-0001-Add-failing-test-for-undumped-extension-table.patch" Content-Transfer-Encoding: base64 RnJvbSA2MWEwNjYyNWE4ZTZmNDkzN2U2MzExYmUzMmVkYjY3N2QzN2I2YTMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amNoYW1waW9uQHRpbWVz Y2FsZS5jb20+CkRhdGU6IFRodSwgMjIgSnVuIDIwMjMgMTY6MjE6NDEgLTA3MDAKU3ViamVj dDogW1BBVENIIHYyIDEvMl0gQWRkIGZhaWxpbmcgdGVzdCBmb3IgdW5kdW1wZWQgZXh0ZW5z aW9uIHRhYmxlCgpDdXJyZW50bHksIFNFTEVDVCBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkIGZv ciBleHRlbnNpb24gdGFibGVzIGV2ZW4KaWYgdGhleSdyZSBpbnRlcm5hbCAoaS5lLiB1bmR1 bXBhYmxlKSBhbmQgaGF2ZSBubyBSTFMgcG9saWNpZXMuIEFkZCBhCmZhaWxpbmcgdGVzdCBm b3IgdGhpcyBzaXR1YXRpb24uCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BnX2R1bXAv dC8wMDFfYmFzZS5wbCAgIHwgMjcgKysrKysrKysrKysrKysrKysrKwogLi4uL3Rlc3RfcGdf ZHVtcC90ZXN0X3BnX2R1bXAtLTEuMC5zcWwgICAgICAgIHwgIDIgKysKIDIgZmlsZXMgY2hh bmdlZCwgMjkgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9wZ19kdW1wL3QvMDAxX2Jhc2UucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGdf ZHVtcC90LzAwMV9iYXNlLnBsCmluZGV4IGQwMGMzNTQ0ZTkuLjY4YTc2N2QyZjUgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wZ19kdW1wL3QvMDAxX2Jhc2UucGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BnX2R1bXAvdC8wMDFfYmFzZS5wbApAQCAtMTc1 LDYgKzE3NSwxOSBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQkncG9zdGdyZXMnLAogCQld LAogCX0sCisKKwkjIHJlZ3Jlc3NfZHVtcF9sb2dpbl9yb2xlIHNob3VsZG4ndCBuZWVkIFNF TEVDVCByaWdodHMgb24gaW50ZXJuYWwKKwkjICh1bmR1bXBlZCkgZXh0ZW5zaW9uIHRhYmxl cworCXByaXZpbGVnZWRfaW50ZXJuYWxzID0+IHsKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3Bn X2R1bXAnLCAnLS1uby1zeW5jJywgIi0tZmlsZT0kdGVtcGRpci9wcml2aWxlZ2VkX2ludGVy bmFscy5zcWwiLAorCQkJIyB0aGVzZSB0d28gdGFibGVzIGFyZSBpcnJlbGV2YW50IHRvIHRo ZSB0ZXN0IGNhc2UKKwkJCSctLWV4Y2x1ZGUtdGFibGU9cmVncmVzc19wZ19kdW1wX3NjaGVt YS5leHRlcm5hbF90YWInLAorCQkJJy0tZXhjbHVkZS10YWJsZT1yZWdyZXNzX3BnX2R1bXBf c2NoZW1hLmV4dGRlcGVuZHRhYicsCisJCQknLS11c2VybmFtZT1yZWdyZXNzX2R1bXBfbG9n aW5fcm9sZScsICdwb3N0Z3JlcycsCisJCV0sCisJfSwKKwogCXNjaGVtYV9vbmx5ID0+IHsK IAkJZHVtcF9jbWQgPT4gWwogCQkJJ3BnX2R1bXAnLCAnLS1uby1zeW5jJywgIi0tZmlsZT0k dGVtcGRpci9zY2hlbWFfb25seS5zcWwiLApAQCAtMjg0LDYgKzI5Nyw3IEBAIG15ICVmdWxs X3J1bnMgPSAoCiAJZXhjbHVkZV90YWJsZSA9PiAxLAogCW5vX3ByaXZzID0+IDEsCiAJbm9f b3duZXIgPT4gMSwKKwlwcml2aWxlZ2VkX2ludGVybmFscyA9PiAxLAogCXdpdGhfZXh0ZW5z aW9uID0+IDEsCiAJd2l0aG91dF9leHRlbnNpb24gPT4gMSk7CiAKQEAgLTMyMSw2ICszMzUs MTYgQEAgbXkgJXRlc3RzID0gKAogCQlsaWtlID0+IHsgcGdfZHVtcGFsbF9nbG9iYWxzID0+ IDEsIH0sCiAJfSwKIAorCSdDUkVBVEUgUk9MRSByZWdyZXNzX2R1bXBfbG9naW5fcm9sZScg PT4geworCQljcmVhdGVfb3JkZXIgPT4gMSwKKwkJY3JlYXRlX3NxbCA9PiAnQ1JFQVRFIFJP TEUgcmVncmVzc19kdW1wX2xvZ2luX3JvbGUgTE9HSU47JywKKwkJcmVnZXhwID0+IHFyL14K KwkJCVxRQ1JFQVRFIFJPTEUgcmVncmVzc19kdW1wX2xvZ2luX3JvbGU7XEUKKwkJCVxuXFFB TFRFUiBST0xFIHJlZ3Jlc3NfZHVtcF9sb2dpbl9yb2xlIFdJVEggXEUuKlxRIExPR0lOIFxF Lio7CisJCQlcbi94bSwKKwkJbGlrZSA9PiB7IHBnX2R1bXBhbGxfZ2xvYmFscyA9PiAxLCB9 LAorCX0sCisKIAknR1JBTlQgQUxURVIgU1lTVEVNIE9OIFBBUkFNRVRFUiBmdWxsX3BhZ2Vf d3JpdGVzIFRPIHJlZ3Jlc3NfZHVtcF90ZXN0X3JvbGUnCiAJICA9PiB7CiAJCWNyZWF0ZV9v cmRlciA9PiAyLApAQCAtNzA0LDYgKzcyOCw3IEBAIG15ICV0ZXN0cyA9ICgKIAkJCWRhdGFf b25seSA9PiAxLAogCQkJZXh0ZW5zaW9uX3NjaGVtYSA9PiAxLAogCQkJcGdfZHVtcGFsbF9n bG9iYWxzID0+IDEsCisJCQlwcml2aWxlZ2VkX2ludGVybmFscyA9PiAxLAogCQkJc2VjdGlv bl9kYXRhID0+IDEsCiAJCQlzZWN0aW9uX3ByZV9kYXRhID0+IDEsCiAJCQkjIEV4Y2x1ZGVz IHRoaXMgc2NoZW1hIGFzIGV4dGVuc2lvbiBpcyBub3QgbGlzdGVkLgpAQCAtNzIwLDYgKzc0 NSw3IEBAIG15ICV0ZXN0cyA9ICgKIAkJCWRhdGFfb25seSA9PiAxLAogCQkJZXh0ZW5zaW9u X3NjaGVtYSA9PiAxLAogCQkJcGdfZHVtcGFsbF9nbG9iYWxzID0+IDEsCisJCQlwcml2aWxl Z2VkX2ludGVybmFscyA9PiAxLAogCQkJc2VjdGlvbl9kYXRhID0+IDEsCiAJCQlzZWN0aW9u X3ByZV9kYXRhID0+IDEsCiAJCQkjIEV4Y2x1ZGVzIHRoaXMgc2NoZW1hIGFzIGV4dGVuc2lv biBpcyBub3QgbGlzdGVkLgpAQCAtNzQzLDYgKzc2OSw3IEBAIG15ICV0ZXN0cyA9ICgKIAkJ CSMgRXhjbHVkZXMgdGhlIGV4dGVuc2lvbiBhbmQga2VlcHMgdGhlIHNjaGVtYSdzIGRhdGEu CiAJCQl3aXRob3V0X2V4dGVuc2lvbl9pbnRlcm5hbF9zY2hlbWEgPT4gMSwKIAkJfSwKKwkJ dW5saWtlID0+IHsgcHJpdmlsZWdlZF9pbnRlcm5hbHMgPT4gMSB9LAogCX0sKTsKIAogIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9wZ19kdW1wL3Rlc3RfcGdfZHVtcC0tMS4wLnNxbCBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9wZ19kdW1wL3Rlc3RfcGdfZHVtcC0tMS4wLnNxbAppbmRl eCAxMTBmN2VlZjY2Li4xYzY4ZTE0NmQ5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfcGdfZHVtcC90ZXN0X3BnX2R1bXAtLTEuMC5zcWwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3BnX2R1bXAvdGVzdF9wZ19kdW1wLS0xLjAuc3FsCkBAIC0xMiwxMSArMTIs MTMgQEAgQ1JFQVRFIFNFUVVFTkNFIHJlZ3Jlc3NfcGdfZHVtcF9zZXE7CiAKIENSRUFURSBT RVFVRU5DRSByZWdyZXNzX3NlcV9kdW1wYWJsZTsKIFNFTEVDVCBwZ19jYXRhbG9nLnBnX2V4 dGVuc2lvbl9jb25maWdfZHVtcCgncmVncmVzc19zZXFfZHVtcGFibGUnLCAnJyk7CitHUkFO VCBTRUxFQ1QgT04gU0VRVUVOQ0UgcmVncmVzc19zZXFfZHVtcGFibGUgVE8gcHVibGljOwog CiBDUkVBVEUgVEFCTEUgcmVncmVzc190YWJsZV9kdW1wYWJsZSAoCiAJY29sMSBpbnQgY2hl Y2sgKGNvbDEgPiAwKQogKTsKIFNFTEVDVCBwZ19jYXRhbG9nLnBnX2V4dGVuc2lvbl9jb25m aWdfZHVtcCgncmVncmVzc190YWJsZV9kdW1wYWJsZScsICcnKTsKK0dSQU5UIFNFTEVDVCBP TiByZWdyZXNzX3RhYmxlX2R1bXBhYmxlIFRPIHB1YmxpYzsKIAogQ1JFQVRFIFNDSEVNQSBy ZWdyZXNzX3BnX2R1bXBfc2NoZW1hOwogCi0tIAoyLjI1LjEKCg== --------------keKq0kQkPtu3vEciRSgHaXNP Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-pg_dump-skip-lock-for-extension-tables-without-po.patch" Content-Disposition: attachment; filename*0="v2-0002-pg_dump-skip-lock-for-extension-tables-without-po.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhNzBhYmEyZDBmMzMxMDQyMDEwZjdlMzMzOTU3NjAzNzU5NjhlYTE3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amNoYW1waW9uQHRpbWVz Y2FsZS5jb20+CkRhdGU6IFRodSwgMTYgTWFyIDIwMjMgMTE6NDY6MDggLTA3MDAKU3ViamVj dDogW1BBVENIIHYyIDIvMl0gcGdfZHVtcDogc2tpcCBsb2NrIGZvciBleHRlbnNpb24gdGFi bGVzIHdpdGhvdXQKIHBvbGljaWVzCgpJZiBhIHVzZXIgd2l0aG91dCBTRUxFQ1QgcGVybWlz c2lvbnMgb24gYW4gaW50ZXJuYWwgZXh0ZW5zaW9uIHRhYmxlCnRyaWVzIHRvIGR1bXAgdGhl IGV4dGVuc2lvbiwgdGhlIGR1bXAgd2lsbCBmYWlsIHdoaWxlIHRyeWluZyB0byBsb2NrIHRo ZQp0YWJsZSB3aXRoIEFDQ0VTUyBTSEFSRSwgZXZlbiB0aG91Z2ggdGhlIHVzZXIgZG9lc24n dCB3YW50IG9yIG5lZWQgdG8KZHVtcCB0aGUgdGFibGUgaW4gcXVlc3Rpb24uIChUaGUgbG9j ayBpcyB0YWtlbiB0byBhbGxvdyBsYXRlcgpwZ19nZXRfZXhwcigpIGNhbGxzIG9uIHBnX3Bv bGljeSB0byByZW1haW4gY29uc2lzdGVudCBpbiB0aGUgZmFjZSBvZgpjb25jdXJyZW50IHNj aGVtYSBjaGFuZ2VzLikKCkl0J2QgYmUgaWRlYWwgbm90IHRvIHJlcXVpcmUgU0VMRUNUIHBl cm1pc3Npb25zIG9uIGEgdGFibGUgdG8gYmUgYWJsZSB0bwpkdW1wIGl0cyBwb2xpY2llcywg YnV0IEkgZG9uJ3QgaGF2ZSBhIGdyZWF0IGlkZWEgZm9yIGhvdyB0byBpbXBsZW1lbnQKdGhh dCB3aXRob3V0IHJhY2VzLiBBcyBhIHdvcmthcm91bmQsIHNraXAgdGhlIHBvbGljeSBxdWVy aWVzIGVudGlyZWx5IGlmCndlIGNhbiBkZXRlcm1pbmUgdGhhdCBubyBwb2xpY2llcyBleGlz dCBmb3IgYSB0YWJsZSBhdCB0aGUgdGltZSBvZgpnZXRUYWJsZXMoKS4KCkZpeGVzIHRoZSBw cmV2aW91cyBjb21taXQncyBmYWlsaW5nIHRlc3QuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL2Nv bW1vbi5jICB8IDU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyB8IDU4ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCB8ICA0ICsrKwogMyBm aWxlcyBjaGFuZ2VkLCAxMTYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9jb21tb24uYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb24uYwppbmRleCA1ZDk4 ODk4NmVkLi42OWRmMzU2N2Y5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tbW9u LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbi5jCkBAIC01OSw2ICs1OSw3IEBAIHR5 cGVkZWYgc3RydWN0IF9jYXRhbG9nSWRNYXBFbnRyeQogCXVpbnQzMgkJaGFzaHZhbDsJCS8q IGhhc2ggY29kZSBmb3IgdGhlIENhdGFsb2dJZCAqLwogCUR1bXBhYmxlT2JqZWN0ICpkb2Jq OwkJLyogdGhlIGFzc29jaWF0ZWQgRHVtcGFibGVPYmplY3QsIGlmIGFueSAqLwogCUV4dGVu c2lvbkluZm8gKmV4dDsJCQkvKiBvd25pbmcgZXh0ZW5zaW9uLCBpZiBhbnkgKi8KKwlib29s CQloYXNfcG9saWNpZXM7CS8qIHJlZmVyZW5jZWQgYnkgcGdfcG9saWN5PyAqLwogfSBDYXRh bG9nSWRNYXBFbnRyeTsKIAogI2RlZmluZSBTSF9QUkVGSVgJCWNhdGFsb2dpZApAQCAtMTM1 LDYgKzEzNiwxMyBAQCBnZXRTY2hlbWFEYXRhKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtVGFi bGVzUHRyKQogCXBnX2xvZ19pbmZvKCJpZGVudGlmeWluZyBleHRlbnNpb24gbWVtYmVycyIp OwogCWdldEV4dGVuc2lvbk1lbWJlcnNoaXAoZm91dCwgZXh0aW5mbywgbnVtRXh0ZW5zaW9u cyk7CiAKKwkvKgorCSAqIFNpbWlsYXJseSwgdGhlIGV4aXN0ZW5jZSBvZiBSTFMgcG9saWNp ZXMgaW5mbHVlbmNlcyB3aGV0aGVyIHNvbWUgdGFibGVzCisJICogbmVlZCB0byBiZSBsb2Nr ZWQuCisJICovCisJcGdfbG9nX2luZm8oImNoZWNraW5nIGZvciByb3ctbGV2ZWwgc2VjdXJp dHkgcG9saWNpZXMiKTsKKwlnZXRUYWJsZXNXaXRoUG9saWNpZXMoZm91dCk7CisKIAlwZ19s b2dfaW5mbygicmVhZGluZyBzY2hlbWFzIik7CiAJKHZvaWQpIGdldE5hbWVzcGFjZXMoZm91 dCwgJm51bU5hbWVzcGFjZXMpOwogCkBAIC02ODYsNiArNjk0LDcgQEAgQXNzaWduRHVtcElk KER1bXBhYmxlT2JqZWN0ICpkb2JqKQogCQl7CiAJCQllbnRyeS0+ZG9iaiA9IE5VTEw7CiAJ CQllbnRyeS0+ZXh0ID0gTlVMTDsKKwkJCWVudHJ5LT5oYXNfcG9saWNpZXMgPSBmYWxzZTsK IAkJfQogCQlBc3NlcnQoZW50cnktPmRvYmogPT0gTlVMTCk7CiAJCWVudHJ5LT5kb2JqID0g ZG9iajsKQEAgLTk5NSw2ICsxMDA0LDcgQEAgcmVjb3JkRXh0ZW5zaW9uTWVtYmVyc2hpcChD YXRhbG9nSWQgY2F0SWQsIEV4dGVuc2lvbkluZm8gKmV4dCkKIAl7CiAJCWVudHJ5LT5kb2Jq ID0gTlVMTDsKIAkJZW50cnktPmV4dCA9IE5VTEw7CisJCWVudHJ5LT5oYXNfcG9saWNpZXMg PSBmYWxzZTsKIAl9CiAJQXNzZXJ0KGVudHJ5LT5leHQgPT0gTlVMTCk7CiAJZW50cnktPmV4 dCA9IGV4dDsKQEAgLTEwMTksNiArMTAyOSw1MCBAQCBmaW5kT3duaW5nRXh0ZW5zaW9uKENh dGFsb2dJZCBjYXRhbG9nSWQpCiB9CiAKIAorLyoKKyAqIHJlY29yZFBvbGljaWVzRXhpc3QK KyAqCSAgUmVjb3JkIHRoYXQgdGhlIG9iamVjdCBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBj YXRhbG9nIElEIGhhcyBSTFMgcG9saWNpZXMKKyAqLwordm9pZAorcmVjb3JkUG9saWNpZXNF eGlzdChDYXRhbG9nSWQgY2F0SWQpCit7CisJQ2F0YWxvZ0lkTWFwRW50cnkgKmVudHJ5Owor CWJvb2wJCWZvdW5kOworCisJLyogSW5pdGlhbGl6ZSBDYXRhbG9nSWQgaGFzaCB0YWJsZSBp ZiBub3QgZG9uZSB5ZXQgKi8KKwlpZiAoY2F0YWxvZ0lkSGFzaCA9PSBOVUxMKQorCQljYXRh bG9nSWRIYXNoID0gY2F0YWxvZ2lkX2NyZWF0ZShDQVRBTE9HSURIQVNIX0lOSVRJQUxfU0la RSwgTlVMTCk7CisKKwkvKiBBZGQgcmVmZXJlbmNlIHRvIENhdGFsb2dJZCBoYXNoICovCisJ ZW50cnkgPSBjYXRhbG9naWRfaW5zZXJ0KGNhdGFsb2dJZEhhc2gsIGNhdElkLCAmZm91bmQp OworCWlmICghZm91bmQpCisJeworCQllbnRyeS0+ZG9iaiA9IE5VTEw7CisJCWVudHJ5LT5l eHQgPSBOVUxMOworCQllbnRyeS0+aGFzX3BvbGljaWVzID0gZmFsc2U7CisJfQorCWVudHJ5 LT5oYXNfcG9saWNpZXMgPSB0cnVlOworfQorCisvKgorICogaGFzUG9saWNpZXMKKyAqCSAg cmV0dXJuIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjYXRhbG9nIElEIGhhcyBSTFMgcG9saWNp ZXMKKyAqLworYm9vbAoraGFzUG9saWNpZXMoQ2F0YWxvZ0lkIGNhdElkKQoreworCUNhdGFs b2dJZE1hcEVudHJ5ICplbnRyeTsKKworCWlmIChjYXRhbG9nSWRIYXNoID09IE5VTEwpCisJ CXJldHVybiBmYWxzZTsJCQkvKiBubyBvYmplY3RzIGV4aXN0IHlldCAqLworCisJZW50cnkg PSBjYXRhbG9naWRfbG9va3VwKGNhdGFsb2dJZEhhc2gsIGNhdElkKTsKKwlpZiAoZW50cnkg PT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiBlbnRyeS0+aGFzX3BvbGljaWVz OworfQorCisKIC8qCiAgKiBwYXJzZU9pZEFycmF5CiAgKgkgIHBhcnNlIGEgc3RyaW5nIG9m IG51bWJlcnMgZGVsaW1pdGVkIGJ5IHNwYWNlcyBpbnRvIGEgY2hhcmFjdGVyIGFycmF5CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYwppbmRleCA1ZGFiMWJhOWVhLi4yZjNjMjBhNTg0IDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMKQEAgLTM3NDIsNiArMzc0Miw1MyBAQCBkdW1wTE9zKEFyY2hpdmUgKmZvdXQsIGNvbnN0 IHZvaWQgKmFyZykKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIGdldFRhYmxlc1dpdGhQb2xp Y2llcyBUT0RPCisgKi8KK3ZvaWQKK2dldFRhYmxlc1dpdGhQb2xpY2llcyhBcmNoaXZlICpm b3V0KQoreworCVBRRXhwQnVmZmVyIHF1ZXJ5OworCVBHcmVzdWx0ICAgKnJlczsKKwlpbnQJ CQlpX2NsYXNzaWQ7CisJaW50CQkJaV9wb2xyZWxpZDsKKwlpbnQJCQlpLAorCQkJCW50dXBz OworCisJLyogTm8gcG9saWNpZXMgYmVmb3JlIDkuNSAqLworCWlmIChmb3V0LT5yZW1vdGVW ZXJzaW9uIDwgOTA1MDApCisJCXJldHVybjsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKKworCS8qIEZpZ3VyZSBvdXQgd2hpY2ggdGFibGVzIGhhdmUgUkxTIHBvbGljaWVz LiAqLworCXByaW50ZlBRRXhwQnVmZmVyKHF1ZXJ5LAorCQkJCQkgICJTRUxFQ1QgRElTVElO Q1QgJ3BnX2NsYXNzJzo6cmVnY2xhc3M6Om9pZCBBUyBjbGFzc2lkLCAiCisJCQkJCSAgIiAg ICAgICAgICAgICAgICBwb2xyZWxpZCAiCisJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19w b2xpY3kiKTsKKworCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwg UEdSRVNfVFVQTEVTX09LKTsKKworCW50dXBzID0gUFFudHVwbGVzKHJlcyk7CisKKwlpX2Ns YXNzaWQgPSBQUWZudW1iZXIocmVzLCAiY2xhc3NpZCIpOworCWlfcG9scmVsaWQgPSBQUWZu dW1iZXIocmVzLCAicG9scmVsaWQiKTsKKworCWZvciAoaSA9IDA7IGkgPCBudHVwczsgaSsr KQorCXsKKwkJQ2F0YWxvZ0lkCW9iaklkOworCisJCW9iaklkLnRhYmxlb2lkID0gYXRvb2lk KFBRZ2V0dmFsdWUocmVzLCBpLCBpX2NsYXNzaWQpKTsKKwkJb2JqSWQub2lkID0gYXRvb2lk KFBRZ2V0dmFsdWUocmVzLCBpLCBpX3BvbHJlbGlkKSk7CisKKwkJcmVjb3JkUG9saWNpZXNF eGlzdChvYmpJZCk7CisJfQorCisJUFFjbGVhcihyZXMpOworCisJZGVzdHJveVBRRXhwQnVm ZmVyKHF1ZXJ5KTsKK30KKwogLyoKICAqIGdldFBvbGljaWVzCiAgKgkgIGdldCBpbmZvcm1h dGlvbiBhYm91dCBhbGwgUkxTIHBvbGljaWVzIG9uIGR1bXBhYmxlIHRhYmxlcy4KQEAgLTY2 NTgsNiArNjcwNSwxNyBAQCBnZXRUYWJsZXMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1UYWJs ZXMpCiAJCWVsc2UKIAkJCXNlbGVjdER1bXBhYmxlVGFibGUoJnRibGluZm9baV0sIGZvdXQp OwogCisJCS8qCisJCSAqIElmIHRoZSB0YWJsZSBoYXMgbm8gcG9saWNpZXMsIHdlIGRvbid0 IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhvc2UuCisJCSAqCisJCSAqIEZvciB0YWJsZXMgaW50 ZXJuYWwgdG8gYW4gZXh0ZW5zaW9uLCB0aGlzIG1heSBtZWFuIHdlIGRvbid0IG5lZWQgdG8K KwkJICogdGFrZSBhbiBBQ0NFU1MgU0hBUkUgbG9jaywgd2hpY2ggaW4gdHVybiBhbGxvd3Mg bGVzcyBwcml2aWxlZ2VkIHVzZXJzCisJCSAqIHRvIHN1Y2Nlc3NmdWxseSBwZXJmb3JtIGEg ZHVtcCBpZiB0aGV5IGRvbid0IGhhdmUgU0VMRUNUIGFjY2VzcyB0bworCQkgKiB0aG9zZSB0 YWJsZXMgKHdoaWNoIHRoZXkgd2VyZW4ndCB0cnlpbmcgdG8gZHVtcCBpbiB0aGUgZmlyc3Qg cGxhY2UpLgorCQkgKi8KKwkJaWYgKCFoYXNQb2xpY2llcyh0YmxpbmZvW2ldLmRvYmouY2F0 SWQpKQorCQkJdGJsaW5mb1tpXS5kb2JqLmR1bXAgJj0gfkRVTVBfQ09NUE9ORU5UX1BPTElD WTsKKwogCQkvKgogCQkgKiBOb3csIGNvbnNpZGVyIHRoZSB0YWJsZSAiaW50ZXJlc3Rpbmci IGlmIHdlIG5lZWQgdG8gZHVtcCBpdHMKIAkJICogZGVmaW5pdGlvbiBvciBpdHMgZGF0YS4g IExhdGVyIG9uLCB3ZSdsbCBza2lwIGEgbG90IG9mIGRhdGEKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4 IGJjOGYyZWMzNmQuLjVkZWEwYjYzZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjk1LDYgKzY5 NSw5IEBAIGV4dGVybiBQdWJsaWNhdGlvbkluZm8gKmZpbmRQdWJsaWNhdGlvbkJ5T2lkKE9p ZCBvaWQpOwogZXh0ZXJuIHZvaWQgcmVjb3JkRXh0ZW5zaW9uTWVtYmVyc2hpcChDYXRhbG9n SWQgY2F0SWQsIEV4dGVuc2lvbkluZm8gKmV4dCk7CiBleHRlcm4gRXh0ZW5zaW9uSW5mbyAq ZmluZE93bmluZ0V4dGVuc2lvbihDYXRhbG9nSWQgY2F0YWxvZ0lkKTsKIAorZXh0ZXJuIHZv aWQgcmVjb3JkUG9saWNpZXNFeGlzdChDYXRhbG9nSWQgY2F0SWQpOworZXh0ZXJuIGJvb2wg aGFzUG9saWNpZXMoQ2F0YWxvZ0lkIGNhdElkKTsKKwogZXh0ZXJuIHZvaWQgcGFyc2VPaWRB cnJheShjb25zdCBjaGFyICpzdHIsIE9pZCAqYXJyYXksIGludCBhcnJheXNpemUpOwogCiBl eHRlcm4gdm9pZCBzb3J0RHVtcGFibGVPYmplY3RzKER1bXBhYmxlT2JqZWN0ICoqb2Jqcywg aW50IG51bU9ianMsCkBAIC03NDMsNiArNzQ2LDcgQEAgZXh0ZXJuIHZvaWQgZ2V0RXh0ZW5z aW9uTWVtYmVyc2hpcChBcmNoaXZlICpmb3V0LCBFeHRlbnNpb25JbmZvIGV4dGluZm9bXSwK IGV4dGVybiB2b2lkIHByb2Nlc3NFeHRlbnNpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgRXh0 ZW5zaW9uSW5mbyBleHRpbmZvW10sCiAJCQkJCQkJCSAgIGludCBudW1FeHRlbnNpb25zKTsK IGV4dGVybiBFdmVudFRyaWdnZXJJbmZvICpnZXRFdmVudFRyaWdnZXJzKEFyY2hpdmUgKmZv dXQsIGludCAqbnVtRXZlbnRUcmlnZ2Vycyk7CitleHRlcm4gdm9pZCBnZXRUYWJsZXNXaXRo UG9saWNpZXMoQXJjaGl2ZSAqZm91dCk7CiBleHRlcm4gdm9pZCBnZXRQb2xpY2llcyhBcmNo aXZlICpmb3V0LCBUYWJsZUluZm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKTsKIGV4dGVy biBQdWJsaWNhdGlvbkluZm8gKmdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LAogCQkJ CQkJCQkJCWludCAqbnVtUHVibGljYXRpb25zKTsKLS0gCjIuMjUuMQoK --------------keKq0kQkPtu3vEciRSgHaXNP--