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 1w6lk9-004dEH-2j for pgsql-bugs@arkaria.postgresql.org; Sun, 29 Mar 2026 08:43:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w6lk6-00G4Dc-13 for pgsql-bugs@arkaria.postgresql.org; Sun, 29 Mar 2026 08:43: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.96) (envelope-from ) id 1w6lk5-00G4DU-2e for pgsql-bugs@lists.postgresql.org; Sun, 29 Mar 2026 08:43:34 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w6lk3-00000001cSv-2jg8 for pgsql-bugs@lists.postgresql.org; Sun, 29 Mar 2026 08:43:32 +0000 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-439d8df7620so2452713f8f.0 for ; Sun, 29 Mar 2026 01:43:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774773809; cv=none; d=google.com; s=arc-20240605; b=d4wFFt7y/OleITPGYNvwPP7C1vBsi4nA8HSZPmrpHXEgBsLnLIdgWIvibIngSYZpcR 2c6ytDptWPB7MQ+BJj6znx002FcF2OVo/hLziIESEIFOG29Kn5yno5oTZVvrYhLNIU8Z tvzj+/IWc1TJJ6u2qZ5mNNnAntLUP42Fv4HaH7MVuxCRlY/M4XI5hAD2dWHIZPvWPvgs +3bd2bzQO/m1BI10X9NRGGlkx6SGwnfWFpz03WGpa+iMs2Cai4tdnbnHaGHD3TTUKQcL AU6zyExldT8MyVDuBB/QLGJOo9l6HUtbhpCK6VwoMGZMQOhw8jYhnCh0C4WqEZjy+T9i DxFw== 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=GLbgZlbpn3Z/Y+SbctZz2TYgWOH6rZ+QgzA6r8U8RgY=; fh=EzgXHNxt81jDDonaKFj2R4CwgWakXHMaiPz+4kO8E14=; b=ONKsjP1tBkpYAodde7TP32hr8EV3XNemhS8eNcM9qtnOD8dbypX4uXM4pkcSU66jgn PrOsR61Vxzoim06Yov8RXplnWPSVCGHSInd4iIfYu6l4vytgyFuI1piQEgSPjOb9UOnf otyd2ZLcuPZuSIbNdoWrK9E9uS453MLXgTpOCnqor2P3yCqI1aQW3tXKri11RgRHIr5a qSorA6rggmpWhpqC77RC0G8FMDr1ooJcg1bvLcp5pqd8HGoWj3B2GPTQZqC80oIBOh0H wPJnKHDQBhenBbkp9ZaQ3J5arvVWdhhhYjW6sHtKqXz2kv6EdbaAqE9pg8lakcJICFvu r6oQ==; 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=1774773809; x=1775378609; 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=GLbgZlbpn3Z/Y+SbctZz2TYgWOH6rZ+QgzA6r8U8RgY=; b=O+oaWzxmUhrKdmiwNCaHo4MyDqD25seDNZmpTrwryjGx+Phfhs8RuX3AYaoj6vAdqX JixwRjeZ6PZj1QBy2fcpTNia0Z8QnnmfkuqpQAwP/a7MleOgQ3l/5YozAOAsO52OAYFV LVzSDbnunXKp6T5PU86LFQU0nqLcYGdeCR4IGz6GdZDhHskwuf8+lLqxnulfvZiUnXNL X/S9wnMcLMBdjuSI/63Hfvda40e5IDLU4Uti6pKBFBEI0nzMD1zkecdi7jMWuZ3pXbPE dC8CniEO4jCkDlxC+0BCnbSSgUBX9UgBmhcO6BBrGTUgQG0hExl84rv4xCXEJniim7JB rRzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774773809; x=1775378609; 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=GLbgZlbpn3Z/Y+SbctZz2TYgWOH6rZ+QgzA6r8U8RgY=; b=BLzEkD9/uriGQglZegiZEqODFTGjMESqPc21iUm8Pl/wsnQrlCd38NkZKclNgujDtu skKNK1L5S556QUdoR8ssNxMl6Ukx3F1WR+ovqjlAmHHPJnPjLLAc8ZblDjyQVZ7d4j8U raIzaHRPPNwtlP5fE9NcToX8oPvyN1FUiPXHudtasGTUQFZ6A/DubwPhxOedRW1dNT0y sO63G6TjrQVMwzy9KfrkL1rynFexCJsMT8Owpq3HVsY/jxURWtKRq941rk/bD4QKc28L TUo0KoRZ1BD/mLJATJBv6+/w3KASr72KncywZMAuha5vsxWs6hxvdddXqy7Q5pfqQLyQ /Hlg== X-Forwarded-Encrypted: i=1; AJvYcCXE9gbK2qmAQR1OFu5cYfsDYT8cCSoSdHDYC+06oh0SG5e1qWFwQkjY78lHcJBn4hAvI9HkERVYYDGL@lists.postgresql.org X-Gm-Message-State: AOJu0YzVMKB27K5+bmJzDNCV4X04V+Cg/agAhfIU8PcD2OZWc1iyge3o b3pdahQ+CZfs/BCETO6I7zncP4+Pp5fMF6xs+Q/+k7XgG/XlumITCFD//Qq53b9dfALiY2cziEl +oyf/fA05FQbUPDSmxNPO+FOzGQbUH8U= X-Gm-Gg: ATEYQzxYEQ8fO9z8J1PD+odpM0WEPTA9R+fw+3mzYXDfobhNHIY2FjykuZLqCvXsHMT aHY2jae9sJvmNS7HBpzDIvj8y8OyQh+3JvAIGMLHo+/AYn/YczZdCbEm5i+pzLMWAjfHeaI3BhX RbVjhtn1+0DxZjifGCRc0xDoFPi4I6VylQcMiyW6JfJgyvr4G51uNDZXbCpBDJAsBr/GWnjwkvp ODbmlDwe6mz+1trhwXFUi5LEOIQuYdfcGZ6vMdkuU37wM+GSr6/9kXt755O6f98o7fHmAvm4GXR OyTy3LJJqOb9IJLJfcaYE4q5MjHtcPfJVlg1KG585qnAMQc0rHPAxWcgkAtON6Zsv5N3dbpuVWO 83nfPc9Gi X-Received: by 2002:a05:6000:4310:b0:439:b2d9:cf35 with SMTP id ffacd0b85a97d-43b9e9d602dmr14581401f8f.8.1774773808933; Sun, 29 Mar 2026 01:43:28 -0700 (PDT) MIME-Version: 1.0 References: <19438-9d37b179c56d43aa@postgresql.org> <1106026.1774573371@sss.pgh.pa.us> <1338824.1774633289@sss.pgh.pa.us> In-Reply-To: <1338824.1774633289@sss.pgh.pa.us> From: David Rowley Date: Sun, 29 Mar 2026 21:43:16 +1300 X-Gm-Features: AQROBzD4Df-wgmbGBlD7t3yf_Da5uEaqWoINHGJVDunbKb66lGXGB7-DuhN3COI Message-ID: Subject: Re: BUG #19438: segfault with temp_file_limit inside cursor To: Tom Lane Cc: kuzmin.db4@gmail.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000007069fd064e25ba86" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007069fd064e25ba86 Content-Type: text/plain; charset="UTF-8" On Sat, 28 Mar 2026 at 06:41, Tom Lane wrote: > In MEMORY_CONTEXT_CHECKING builds, we can cheaply detect double frees > by using the existing behavior that requested_size is set to > InvalidAllocSize during AllocSetFree. Another plausible idea is to > change a freed chunk's MemoryContextMethodID to something invalid, > which'd permit detection of double frees even in > non-MEMORY_CONTEXT_CHECKING builds. > > I made draft patches showing how to do it both ways. (Both patches > pass check-world and are able to detect the bug in v17.) The > methodid-change way seems like the better alternative to me, > but it is more invasive and does add a cycle or two when freeing or > reusing a chunk. I do think it's quite nice that we can detect the double free in production builds by switching the MemoryContextMethodID to an unused one. However, I did spend quite a bit of time making all that code as fast as possible. For example, storing the freelist index in the chunk header rather than the size, just to save the (pretty cheap) AllocSetFreeIndex() call during pfree to get the freelist index from the chunk size. That sort of thing was done because I could measure a speedup from doing it. For the switching MemoryContextMethodID patch, I applied the memory context benchmarking patch I used when writing that code to test out the overhead in a tight palloc/pfree loop (attached). I can see an overhead of a little over 6.5%. select run,pg_allocate_memory_test(8,512,1024::bigint*1024*1024,'aset') as seconds from generate_Series(1,3) run; master run | seconds -----+---------- 1 | 0.823345 2 | 0.834834 3 | 0.835506 patched run | seconds -----+---------- 1 | 0.887794 2 | 0.884866 3 | 0.88592 I would rather see us using the requested_size method in MEMORY_CONTEXT_CHECKING enabled builds. Thanks for working on the patches. David --0000000000007069fd064e25ba86 Content-Type: text/plain; charset="US-ASCII"; name="0001-Function-to-test-palloc-pfree-performance.patch.txt" Content-Disposition: attachment; filename="0001-Function-to-test-palloc-pfree-performance.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnbibt350 RnJvbSA2YjBhNzVmZThlY2FiNmQwZDI0OGU3ODljYjdlMGIwMmQyN2IzODMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyNSBNYXkgMjAyMiAxNDoyNDozNyArMTIwMApTdWJqZWN0OiBbUEFUQ0hdIEZ1bmN0 aW9uIHRvIHRlc3QgcGFsbG9jL3BmcmVlIHBlcmZvcm1hbmNlCgotLS0KIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9tY3h0ZnVuY3MuYyB8IDIxMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICB8ICAxMiArKwogMiBmaWxlcyBjaGFu Z2VkLCAyMjUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9tY3h0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwppbmRleCAx YTRkYmJlYjhkYi4uODliYTkxZDZkZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9tY3h0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKQEAg LTEzLDYgKzEzLDggQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKyNpbmNsdWRlIDx0aW1l Lmg+CisKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl X2QuaCIKQEAgLTMwOCwzICszMTAsMjE0IEBAIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0 cyhQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7CiB9CisKK3R5cGVk ZWYgc3RydWN0IEFsbG9jYXRlVGVzdE5leHQKK3sKKwlzdHJ1Y3QgQWxsb2NhdGVUZXN0TmV4dCAq bmV4dDsJCS8qIHB0ciB0byB0aGUgbmV4dCBhbGxvY2F0aW9uICovCit9IEFsbG9jYXRlVGVzdE5l eHQ7CisKKy8qICNkZWZpbmUgQUxMT0NBVEVfVEVTVF9ERUJVRyAqLworLyoKKyAqIHBnX2FsbG9j YXRlX21lbW9yeV90ZXN0CisgKgkJVXNlZCB0byB0ZXN0IHRoZSBwZXJmb3JtYW5jZSBvZiBhIG1l bW9yeSBjb250ZXh0IHR5cGVzCisgKi8KK0RhdHVtCitwZ19hbGxvY2F0ZV9tZW1vcnlfdGVzdChQ R19GVU5DVElPTl9BUkdTKQoreworCWludDMyCWNodW5rX3NpemUgPSBQR19HRVRBUkdfSU5UMzIo MCk7CisJaW50NjQJa2VlcF9tZW1vcnkgPSBQR19HRVRBUkdfSU5UNjQoMSk7CisJaW50NjQJdG90 YWxfYWxsb2MgPSBQR19HRVRBUkdfSU5UNjQoMik7CisJdGV4dCAgICpjb250ZXh0X3R5cGVfdGV4 dCA9IFBHX0dFVEFSR19URVhUX1BQKDMpOworCWNoYXIgICAqY29udGV4dF90eXBlOworCWludDY0 CWN1cnJfbWVtb3J5X3VzZSA9IDA7CisJaW50NjQJcmVtYWluaW5nX2FsbG9jX2J5dGVzID0gdG90 YWxfYWxsb2M7CisJTWVtb3J5Q29udGV4dCBjb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkQ29u dGV4dDsKKwlBbGxvY2F0ZVRlc3ROZXh0CSAgICpuZXh0X2ZyZWVfcHRyID0gTlVMTDsKKwlBbGxv Y2F0ZVRlc3ROZXh0CSAgICpsYXN0X2FsbG9jID0gTlVMTDsKKwljbG9ja190CXN0YXJ0LCBlbmQ7 CisKKwlpZiAoY2h1bmtfc2l6ZSA8IHNpemVvZihBbGxvY2F0ZVRlc3ROZXh0KSkKKwkJZWxvZyhF UlJPUiwgImNodW5rX3NpemUgKCVkKSBtdXN0IGJlIGF0IGxlYXN0ICVsZCBieXRlcyIsIGNodW5r X3NpemUsCisJCQkgc2l6ZW9mKEFsbG9jYXRlVGVzdE5leHQpKTsKKwlpZiAoa2VlcF9tZW1vcnkg PiB0b3RhbF9hbGxvYykKKwkJZWxvZyhFUlJPUiwgImtlZXBfbWVtb3J5ICgiIElOVDY0X0ZPUk1B VCAiKSBtdXN0IGJlIGxlc3MgdGhhbiB0b3RhbF9hbGxvYyAoIiBJTlQ2NF9GT1JNQVQgIikiLAor CQkJIGtlZXBfbWVtb3J5LCB0b3RhbF9hbGxvYyk7CisKKwljb250ZXh0X3R5cGUgPSB0ZXh0X3Rv X2NzdHJpbmcoY29udGV4dF90eXBlX3RleHQpOworCisJc3RhcnQgPSBjbG9jaygpOworCisJaWYg KHN0cmNtcChjb250ZXh0X3R5cGUsICJnZW5lcmF0aW9uIikgPT0gMCkKKwkJY29udGV4dCA9IEdl bmVyYXRpb25Db250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCSAg InBnX2FsbG9jYXRlX21lbW9yeV90ZXN0IiwKKwkJCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRf U0laRVMpOworCWVsc2UgaWYgKHN0cmNtcChjb250ZXh0X3R5cGUsICJhc2V0IikgPT0gMCkKKwkJ Y29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJCQkicGdfYWxsb2NhdGVfbWVtb3J5X3Rlc3QiLAorCQkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOworCWVsc2UgaWYgKHN0cmNtcChjb250ZXh0X3R5cGUsICJzbGFiIikgPT0g MCkKKwkJY29udGV4dCA9IFNsYWJDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAor CQkJCQkJCQkJInBnX2FsbG9jYXRlX21lbW9yeV90ZXN0IiwKKwkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfTUFYU0laRSwKKwkJCQkJCQkJCWNodW5rX3NpemUpOworCWVsc2UKKwkJZWxvZyhFUlJP UiwgImNvbnRleHRfdHlwZSBtdXN0IGJlIFwiZ2VuZXJhdGlvblwiLCBcImFzZXRcIiBvciBcInNs YWJcIiIpOworCisJb2xkQ29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjb250ZXh0KTsK KworCXdoaWxlIChyZW1haW5pbmdfYWxsb2NfYnl0ZXMgPiAwKQorCXsKKwkJQWxsb2NhdGVUZXN0 TmV4dCAqY3Vycl9hbGxvYzsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIEFs bG9jYXRlIHRoZSBtZW1vcnkgYW5kIHVwZGF0ZSB0aGUgY291bnRlcnMgKi8KKwkJY3Vycl9hbGxv YyA9IChBbGxvY2F0ZVRlc3ROZXh0ICopIHBhbGxvYyhjaHVua19zaXplKTsKKwkJcmVtYWluaW5n X2FsbG9jX2J5dGVzIC09IGNodW5rX3NpemU7CisJCWN1cnJfbWVtb3J5X3VzZSArPSBjaHVua19z aXplOworCisjaWZkZWYgQUxMT0NBVEVfVEVTVF9ERUJVRworCQllbG9nKE5PVElDRSwgImFsbG9j ICVwIChjdXJyX21lbW9yeV91c2UgIiBJTlQ2NF9GT1JNQVQgIiBieXRlcywgcmVtYWluaW5nX2Fs bG9jX2J5dGVzICIgSU5UNjRfRk9STUFUICIpIiwgY3Vycl9hbGxvYywgY3Vycl9tZW1vcnlfdXNl LCByZW1haW5pbmdfYWxsb2NfYnl0ZXMpOworI2VuZGlmCisKKwkJLyoKKwkJICogUG9pbnQgdGhl IGxhc3QgYWxsb2NhdGUgdG8gdGhpcyBvbmUgc28gdGhhdCB3ZSBjYW4gZnJlZSBhbGxvY2F0aW9u cworCQkgKiBzdGFydGluZyB3aXRoIHRoZSBvbGRlc3QgZmlyc3QuCisJCSAqLworCQljdXJyX2Fs bG9jLT5uZXh0ID0gTlVMTDsKKwkJaWYgKGxhc3RfYWxsb2MgIT0gTlVMTCkKKwkJCWxhc3RfYWxs b2MtPm5leHQgPSBjdXJyX2FsbG9jOworCisJCWlmIChuZXh0X2ZyZWVfcHRyID09IE5VTEwpCisJ CXsKKwkJCS8qCisJCQkgKiBSZW1lbWJlciB0aGUgZmlyc3QgY2h1bmsgdG8gZnJlZS4gV2Ugd2ls bCBmb2xsb3cgdGhlIC0+bmV4dAorCQkJICogcG9pbnRlcnMgdG8gZmluZCB0aGUgbmV4dCBjaHVu ayB0byBmcmVlIHdoZW4gZnJlZWluZyBtZW1vcnkKKwkJCSAqLworCQkJbmV4dF9mcmVlX3B0ciA9 IGN1cnJfYWxsb2M7CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGUgY3VycmVudGx5IGFsbG9jYXRl ZCBtZW1vcnkgaGFzIHJlYWNoZWQgb3IgZXhjZWVkZWQgdGhlIGFtb3VudAorCQkgKiBvZiBtZW1v cnkgd2Ugd2FudCB0byBrZWVwIGFsbG9jYXRlZCBhdCBvbmNlIHRoZW4gd2UnZCBiZXR0ZXIgZnJl ZQorCQkgKiBzb21lLiAgU2luY2UgYWxsIGFsbG9jYXRpb25zIGFyZSB0aGUgc2FtZSBzaXplIHdl IG9ubHkgbmVlZCB0byBmcmVlCisJCSAqIG9uZSBhbGxvY2F0aW9uIHBlciBsb29wLgorCQkgKi8K KwkJaWYgKGN1cnJfbWVtb3J5X3VzZSA+PSBrZWVwX21lbW9yeSkKKwkJeworCQkJQWxsb2NhdGVU ZXN0TmV4dAkgKm5leHQgPSBuZXh0X2ZyZWVfcHRyLT5uZXh0OworCisJCQkvKiBmcmVlIHRoZSBt ZW1vcnkgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBtZW1vcnkgdXNhZ2UgKi8KKwkJCXBmcmVlKG5l eHRfZnJlZV9wdHIpOworCQkJY3Vycl9tZW1vcnlfdXNlIC09IGNodW5rX3NpemU7CisKKyNpZmRl ZiBBTExPQ0FURV9URVNUX0RFQlVHCisJCQllbG9nKE5PVElDRSwgImZyZWUgJXAgKGN1cnJfbWVt b3J5X3VzZSAiIElOVDY0X0ZPUk1BVCAiIGJ5dGVzLCByZW1haW5pbmdfYWxsb2NfYnl0ZXMgIiBJ TlQ2NF9GT1JNQVQgIikiLCBuZXh0X2ZyZWVfcHRyLCBjdXJyX21lbW9yeV91c2UsIHJlbWFpbmlu Z19hbGxvY19ieXRlcyk7CisjZW5kaWYKKwkJCS8qIGdldCB0aGUgbmV4dCBjaHVuayB0byBmcmVl ICovCisJCQluZXh0X2ZyZWVfcHRyID0gbmV4dDsKKwkJfQorCisJCWlmIChjdXJyX21lbW9yeV91 c2UgPiAwKQorCQkJbGFzdF9hbGxvYyA9IGN1cnJfYWxsb2M7CisJCWVsc2UKKwkJCWxhc3RfYWxs b2MgPSBOVUxMOworCX0KKworCS8qIGNsZWFudXAgbG9vcCAtLSBwZnJlZSByZW1haW5pbmcgbWVt b3J5ICovCisJd2hpbGUgKG5leHRfZnJlZV9wdHIgIT0gTlVMTCkKKwl7CisJCUFsbG9jYXRlVGVz dE5leHQJICpuZXh0ID0gbmV4dF9mcmVlX3B0ci0+bmV4dDsKKworCQkvKiBmcmVlIHRoZSBtZW1v cnkgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBtZW1vcnkgdXNhZ2UgKi8KKwkJcGZyZWUobmV4dF9m cmVlX3B0cik7CisJCWN1cnJfbWVtb3J5X3VzZSAtPSBjaHVua19zaXplOworCisjaWZkZWYgQUxM T0NBVEVfVEVTVF9ERUJVRworCQllbG9nKE5PVElDRSwgImZyZWUgJXAgKGN1cnJfbWVtb3J5X3Vz ZSAiIElOVDY0X0ZPUk1BVCAiIGJ5dGVzLCByZW1haW5pbmdfYWxsb2NfYnl0ZXMgIiBJTlQ2NF9G T1JNQVQgIikiLCBuZXh0X2ZyZWVfcHRyLCBjdXJyX21lbW9yeV91c2UsIHJlbWFpbmluZ19hbGxv Y19ieXRlcyk7CisjZW5kaWYKKworCQluZXh0X2ZyZWVfcHRyID0gbmV4dDsKKwl9CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisKKwllbmQgPSBjbG9jaygpOworCisJUEdf UkVUVVJOX0ZMT0FUOCgoZG91YmxlKSAoZW5kIC0gc3RhcnQpIC8gQ0xPQ0tTX1BFUl9TRUMpOwor fQorCitEYXR1bQorcGdfYWxsb2NhdGVfbWVtb3J5X3Rlc3RfcmVzZXQoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlpbnQzMgljaHVua19zaXplID0gUEdfR0VUQVJHX0lOVDMyKDApOworCWludDY0CWtl ZXBfbWVtb3J5ID0gUEdfR0VUQVJHX0lOVDY0KDEpOworCWludDY0CXRvdGFsX2FsbG9jID0gUEdf R0VUQVJHX0lOVDY0KDIpOworCXRleHQgICAqY29udGV4dF90eXBlX3RleHQgPSBQR19HRVRBUkdf VEVYVF9QUCgzKTsKKwljaGFyICAgKmNvbnRleHRfdHlwZTsKKwlpbnQ2NAljdXJyX21lbW9yeV91 c2UgPSAwOworCWludDY0CXJlbWFpbmluZ19hbGxvY19ieXRlcyA9IHRvdGFsX2FsbG9jOworCU1l bW9yeUNvbnRleHQgY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZENvbnRleHQ7CisJY2xvY2tf dAlzdGFydCwgZW5kOworCisJaWYgKGNodW5rX3NpemUgPCAxKQorCQllbG9nKEVSUk9SLCAic2l6 ZSBvZiBjaHVuayBtdXN0IGJlIGFib3ZlIDAiKTsKKwlpZiAoa2VlcF9tZW1vcnkgPiB0b3RhbF9h bGxvYykKKwkJZWxvZyhFUlJPUiwgImtlZXBfbWVtb3J5ICgiIElOVDY0X0ZPUk1BVCAiKSBtdXN0 IGJlIGxlc3MgdGhhbiB0b3RhbF9hbGxvYyAoIiBJTlQ2NF9GT1JNQVQgIikiLAorCQkJIGtlZXBf bWVtb3J5LCB0b3RhbF9hbGxvYyk7CisKKwljb250ZXh0X3R5cGUgPSB0ZXh0X3RvX2NzdHJpbmco Y29udGV4dF90eXBlX3RleHQpOworCisJc3RhcnQgPSBjbG9jaygpOworCisJaWYgKHN0cmNtcChj b250ZXh0X3R5cGUsICJnZW5lcmF0aW9uIikgPT0gMCkKKwkJY29udGV4dCA9IEdlbmVyYXRpb25D b250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCSAgInBnX2FsbG9j YXRlX21lbW9yeV90ZXN0IiwKKwkJCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOwor CWVsc2UgaWYgKHN0cmNtcChjb250ZXh0X3R5cGUsICJhc2V0IikgPT0gMCkKKwkJY29udGV4dCA9 IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQki cGdfYWxsb2NhdGVfbWVtb3J5X3Rlc3QiLAorCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0la RVMpOworCWVsc2UgaWYgKHN0cmNtcChjb250ZXh0X3R5cGUsICJzbGFiIikgPT0gMCkKKwkJY29u dGV4dCA9IFNsYWJDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJ InBnX2FsbG9jYXRlX21lbW9yeV90ZXN0IiwKKwkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfTUFY U0laRSwKKwkJCQkJCQkJCWNodW5rX3NpemUpOworCWVsc2UKKwkJZWxvZyhFUlJPUiwgImNvbnRl eHRfdHlwZSBtdXN0IGJlIFwiZ2VuZXJhdGlvblwiLCBcImFzZXRcIiBvciBcInNsYWJcIiIpOwor CisJb2xkQ29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjb250ZXh0KTsKKworCXdoaWxl IChyZW1haW5pbmdfYWxsb2NfYnl0ZXMgPiAwKQorCXsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKworCQkvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5IGFuZCB1cGRhdGUgdGhlIGNvdW50ZXJzICov CisJCSh2b2lkKSBwYWxsb2MoY2h1bmtfc2l6ZSk7CisJCXJlbWFpbmluZ19hbGxvY19ieXRlcyAt PSBjaHVua19zaXplOworCQljdXJyX21lbW9yeV91c2UgKz0gY2h1bmtfc2l6ZTsKKworI2lmZGVm IEFMTE9DQVRFX1RFU1RfREVCVUcKKwkJZWxvZyhOT1RJQ0UsICJhbGxvYyAlcCAoY3Vycl9tZW1v cnlfdXNlICIgSU5UNjRfRk9STUFUICIgYnl0ZXMsIHJlbWFpbmluZ19hbGxvY19ieXRlcyAiIElO VDY0X0ZPUk1BVCAiKSIsIGN1cnJfYWxsb2MsIGN1cnJfbWVtb3J5X3VzZSwgcmVtYWluaW5nX2Fs bG9jX2J5dGVzKTsKKyNlbmRpZgorCisJCS8qCisJCSAqIElmIHRoZSBjdXJyZW50bHkgYWxsb2Nh dGVkIG1lbW9yeSBoYXMgcmVhY2hlZCBvciBleGNlZWRlZCB0aGUgYW1vdW50CisJCSAqIG9mIG1l bW9yeSB3ZSB3YW50IHRvIGtlZXAgYWxsb2NhdGVkIGF0IG9uY2UgdGhlbiByZXNldCB0aGUgY29u dGV4dC4KKwkJICovCisJCWlmIChjdXJyX21lbW9yeV91c2UgPj0ga2VlcF9tZW1vcnkpCisJCXsK KwkJCWN1cnJfbWVtb3J5X3VzZSA9IDA7CisJCQlNZW1vcnlDb250ZXh0UmVzZXQoY29udGV4dCk7 CisJCX0KKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisJTWVtb3J5 Q29udGV4dERlbGV0ZShjb250ZXh0KTsKKworCWVuZCA9IGNsb2NrKCk7CisKKwlQR19SRVRVUk5f RkxPQVQ4KChkb3VibGUpIChlbmQgLSBzdGFydCkgLyBDTE9DS1NfUEVSX1NFQyk7Cit9CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAppbmRleCAwMTE4ZTk3MGRkYS4uYzQzNDY4ZGEyOGIgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdApAQCAtODcxMCw2ICs4NzEwLDE4IEBACiAgIHByb3NyYyA9PiAncGdf bG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJywKICAgcHJvYWNsID0+ICd7UE9TVEdSRVM9WH0n IH0sCiAKKyMganVzdCBmb3IgdGVzdGluZyBtZW1vcnkgY29udGV4dCBhbGxvY2F0aW9uIHNwZWVk Cit7IG9pZCA9PiAnOTMxOScsIGRlc2NyID0+ICdmb3IgdGVzdGluZyBwZXJmb3JtYW5jZSBvZiBh bGxvY2F0aW9uIGFuZCBmcmVlaW5nJywKKyAgcHJvbmFtZSA9PiAncGdfYWxsb2NhdGVfbWVtb3J5 X3Rlc3QnLCBwcm92b2xhdGlsZSA9PiAndicsCisgIHByb3JldHR5cGUgPT4gJ2Zsb2F0OCcsIHBy b2FyZ3R5cGVzID0+ICdpbnQ0IGludDggaW50OCB0ZXh0JywKKyAgcHJvc3JjID0+ICdwZ19hbGxv Y2F0ZV9tZW1vcnlfdGVzdCcgfSwKKworIyBqdXN0IGZvciB0ZXN0aW5nIG1lbW9yeSBjb250ZXh0 IGFsbG9jYXRpb24gc3BlZWQKK3sgb2lkID0+ICc5MzIwJywgZGVzY3IgPT4gJ2ZvciB0ZXN0aW5n IHBlcmZvcm1hbmNlIG9mIGFsbG9jYXRpb24gYW5kIHJlc2V0dGluZycsCisgIHByb25hbWUgPT4g J3BnX2FsbG9jYXRlX21lbW9yeV90ZXN0X3Jlc2V0JywgcHJvdm9sYXRpbGUgPT4gJ3YnLAorICBw cm9yZXR0eXBlID0+ICdmbG9hdDgnLCBwcm9hcmd0eXBlcyA9PiAnaW50NCBpbnQ4IGludDggdGV4 dCcsCisgIHByb3NyYyA9PiAncGdfYWxsb2NhdGVfbWVtb3J5X3Rlc3RfcmVzZXQnIH0sCisKICMg bm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcgogeyBvaWQgPT4gJzEwNjYnLCBkZXNjciA9 PiAnbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcicsCiAgIHByb25hbWUgPT4gJ2dlbmVy YXRlX3NlcmllcycsIHByb3Jvd3MgPT4gJzEwMDAnLAotLSAKMi41MS4wCgo= --0000000000007069fd064e25ba86--