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 1w2dvn-000TBO-0i for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 23:34:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2dvm-0065OH-06 for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 23:34:34 +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 1w2dvl-0065O9-2I for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 23:34:33 +0000 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2dvi-00000000kM9-3Sr9 for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 23:34:33 +0000 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-b97905516faso502238866b.1 for ; Tue, 17 Mar 2026 16:34:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773790470; cv=none; d=google.com; s=arc-20240605; b=VKDgwXI0GgE1IEeUa4TjMjPvIIpYrq6SulnA4FXUb9oZ45c+5/BQOAUPpWDi+2bKv+ yiCCIwIqgTpc1MoRB7RvOB1X0rxxIJ33tkx2I5WQf9+8QPIqdxsGUtqsHvQQDqTul7j2 9ihR/u3EQ4niW5aCEnDBIKzHxd6h5oLP9LTP7PeNbrYbRqCiRYIYUrBJfK4z1GBfpc25 v5rmHCycUmOkjB8VX4jPM4P3G+Y8vIBfijF8kAvxYBBgRB6UT9wVxzd8lP0cdCmFxvHm I4WfY1104w7/rtK94y1f5UCe8KJUPzpbDhIKBwxT38knY5N7HkVw4JLr3bxq8vPsVvN2 x9kQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=dbXagEAxraN+o0p8DKh6sahNTjyn1MePZIFOAeIBBhM=; fh=d1rOMzqe1RgKPPPDM1FqbNQnsOARihUL3TocOlKm9Qc=; b=PprKnfhvMBDTpCo5lDi2ciaCmlCvuSROSMigUv5aflx/zh/l5jWbBmwlHyklhIH5V3 /DTmmNfheWewMo4vQEIiwOLwlYEjhHZGgs2zApe3h7yFaJdEzfBiJdcaEq1fE+N7eLBX PhB7UAkl57UewQRCBu1yQQNqZzE/q6UseRh9hpeou5wYyvbGM8+8xezU30LN5HZoIYxx 1S4UWt615HYjtapIW+dhiq17K/Cgt2lGWA5+s3Hl1yq10x9C95FZT3ZFWaVnw96T4yjR sfWvdJAxEkK0sku5x5vAOHY0ycwzLRKD+9OjXNYsWRot26+nCPaeLI53cwfKNPL9XckL I2kQ==; 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=20230601; t=1773790470; x=1774395270; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=dbXagEAxraN+o0p8DKh6sahNTjyn1MePZIFOAeIBBhM=; b=dDorx0UmldX8EjERAEwr0yq8Ykl9uHQWGFjfbsVcQ3HCpmTvIb32DK3fPhLgKrChQA LyM4RIGuMidQQa/5jbsmRzNcCrkOcOq1CI5wfPSDDQAqy1ds2iQbq4BM2lF/mHDqZ+5C dlBAV2v5ZcWe69iN27LqK3OQl5RaC4gP1EAS+3IU2tYgR3AgwEgrhn7ZcRw2F0RF/R5V lG2SnsDWw/7URywnU+QWVDBPVUgAeZ33ZxTQZZXB40Mi9EGggkFt0hIQRLZRMMCYaFib r55EsEqi1kq56k0Adi3BWp9IqrnAzo/DOWY4osM/EFj6g+Ub0HY68we2lDuZTFlhh5Bh O1cQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773790470; x=1774395270; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=dbXagEAxraN+o0p8DKh6sahNTjyn1MePZIFOAeIBBhM=; b=U2TUaMho0Of213Nx1wR3etWggXYsnaQ2Pkw/uLQ9DTk/CIn5jr3vPcfLvsnqxScnoK ZSjMTepoRCbfKlNLLpTHvSgG+hVADYM03hAotrBfGOkYJIha2j3upYxJzITx/dYl7IAl 5LJIR18DX3mlQHbtDCSRRrlMn/avCPSZtiXj30f1jMy+fuDvrwBbSDVet2izl/wyclYc B/bSu5L/CfwSSsz12z8FijD4+hL83AMBeVY0cuZQm9IiUR35qaObKts+QvacZ7Ost49/ tL/pkSrvL1RMGAwpLcrhpR1A5EQ04TpQ7x/lbkC8vxrKfofDm7aKOYk/oaEmWIDUCkQ6 znOw== X-Gm-Message-State: AOJu0YzbqFxqCViaML63b8kOrSzWbqwXzr0DaD71KXuox9jZlJnq99fh 17x9XxAcHUsHSwFllldXJlXFTYwZGhzMma8Mx3tQBAh92UmT4hZhmgI4ZJh8u4knu4aGqv8g0iC 8DUhSkTienL5og6LmM64ozgIwHdTycFY3IoRy X-Gm-Gg: ATEYQzxcG2xdcsK5WH2A+oXgG0t8ILgheaULlwhxxivbvn8YSOTl4FCRk81RbfZPXI7 7k2r0W131wADszt60MzkfTnM4BuoKZai3yhe1w7NWK8f/sD/y+IZWPfUTaXASMs2mdtKzzdz6Z+ zZzSeGkw2lsC8m6fFCepvbBXNGEsrG4gwDAxNLLCl0hcHzgj+hy/LnAoHCKfS0gKcH4d2gJ3ua3 4H7xJxH1ZrioTN3zL/xI3kk62DkF01xYqrqOjF+pCuA1a2BDjoAuJsB5xEr5T8tolIPuoG7Xw8C HmkrH3igh4+At1QKwCcRSVWpqJpKEuZhcrMj5vw= X-Received: by 2002:a17:907:3e89:b0:b8e:a1ad:36d3 with SMTP id a640c23a62f3a-b97f4ac9dcamr68597666b.46.1773790469749; Tue, 17 Mar 2026 16:34:29 -0700 (PDT) MIME-Version: 1.0 From: Robert Haas Date: Tue, 17 Mar 2026 19:34:17 -0400 X-Gm-Features: AaiRm51diMxlbGSq0aufUBBan1w_-YGadQ0RsTkRXmhkAKdMStjrs9chT-KAOuM Message-ID: Subject: dshash_find_or_insert vs. OOM To: PostgreSQL Hackers , Andres Freund , Thomas Munro Content-Type: multipart/mixed; boundary="000000000000db2c07064d40c6c4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000db2c07064d40c6c4 Content-Type: text/plain; charset="UTF-8" Hi, For most memory allocation primitives, we offer a "no OOM" version. dshash_find_or_insert is an exception. Here's a small patch to fix that. I have some interest in slipping this into v19 even though I am submitting it quite late, because it would be useful for pg_stash_advice[1]. Let me know what you think about that. -- Robert Haas EDB: http://www.enterprisedb.com [1] As yet uncommitted. See pg_plan_advice thread. --000000000000db2c07064d40c6c4 Content-Type: application/octet-stream; name="v1-0001-dshash-Make-it-possible-to-suppress-out-of-memory.patch" Content-Disposition: attachment; filename="v1-0001-dshash-Make-it-possible-to-suppress-out-of-memory.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmv907i30 RnJvbSA2NTQ1MGIwNDk4YTQyYzI2NjAyYTk5YzYwYTA2OThjNzU1MTA1ZGM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMTcgTWFyIDIwMjYgMTc6Mjk6NDAgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxXSBk c2hhc2g6IE1ha2UgaXQgcG9zc2libGUgdG8gc3VwcHJlc3Mgb3V0IG9mIG1lbW9yeSBlcnJvcnMK CkludHJvZHVjZSBkc2hhc2hfZmluZF9vcl9pbnNlcnRfZXh0ZW5kZWQsIHdoaWNoIGlzIGp1c3Qg bGlrZQpkc2hhc2hfZmluZF9vcl9pbnNlcnQgZXhjZXB0IHRoYXQgaXQgdGFrZXMgYSBmbGFncyBh cmd1bWVudC4KQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpcyBEU0hBU0hfSU5T RVJUX05PX09PTSwgYnV0CkkgaGF2ZSBjaG9zZW4gdG8gdXNlIGFuIGludGVnZXIgcmF0aGVyIHRo YW4gYSBib29sZWFuIGluIGNhc2Ugd2UKZW5kIHVwIHdpdGggbW9yZSBmbGFncyBpbiB0aGUgZnV0 dXJlLgotLS0KIHNyYy9iYWNrZW5kL2xpYi9kc2hhc2guYyB8IDEwMSArKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2xpYi9kc2hhc2guaCB8ICAxMiAr KysrLQogMiBmaWxlcyBjaGFuZ2VkLCA4MyBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWIvZHNoYXNoLmMgYi9zcmMvYmFja2VuZC9saWIv ZHNoYXNoLmMKaW5kZXggMTNjZWY3Yjg5NGUuLmUxY2QzNDcwNzEyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9saWIvZHNoYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvbGliL2RzaGFzaC5jCkBAIC0x NjcsNyArMTY3LDggQEAgc3RydWN0IGRzaGFzaF90YWJsZQogCiBzdGF0aWMgdm9pZCBkZWxldGVf aXRlbShkc2hhc2hfdGFibGUgKmhhc2hfdGFibGUsCiAJCQkJCQlkc2hhc2hfdGFibGVfaXRlbSAq aXRlbSk7Ci1zdGF0aWMgdm9pZCByZXNpemUoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBzaXpl X3QgbmV3X3NpemVfbG9nMik7CitzdGF0aWMgYm9vbCByZXNpemUoZHNoYXNoX3RhYmxlICpoYXNo X3RhYmxlLCBzaXplX3QgbmV3X3NpemVfbG9nMiwKKwkJCQkgICBpbnQgZmxhZ3MpOwogc3RhdGlj IGlubGluZSB2b2lkIGVuc3VyZV92YWxpZF9idWNrZXRfcG9pbnRlcnMoZHNoYXNoX3RhYmxlICpo YXNoX3RhYmxlKTsKIHN0YXRpYyBpbmxpbmUgZHNoYXNoX3RhYmxlX2l0ZW0gKmZpbmRfaW5fYnVj a2V0KGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwKIAkJCQkJCQkJCQkJCWNvbnN0IHZvaWQgKmtl eSwKQEAgLTE3OCw3ICsxNzksOCBAQCBzdGF0aWMgdm9pZCBpbnNlcnRfaXRlbV9pbnRvX2J1Y2tl dChkc2hhc2hfdGFibGUgKmhhc2hfdGFibGUsCiAJCQkJCQkJCQlkc2FfcG9pbnRlciAqYnVja2V0 KTsKIHN0YXRpYyBkc2hhc2hfdGFibGVfaXRlbSAqaW5zZXJ0X2ludG9fYnVja2V0KGRzaGFzaF90 YWJsZSAqaGFzaF90YWJsZSwKIAkJCQkJCQkJCQkJIGNvbnN0IHZvaWQgKmtleSwKLQkJCQkJCQkJ CQkJIGRzYV9wb2ludGVyICpidWNrZXQpOworCQkJCQkJCQkJCQkgZHNhX3BvaW50ZXIgKmJ1Y2tl dCwKKwkJCQkJCQkJCQkJIGludCBmbGFncyk7CiBzdGF0aWMgYm9vbCBkZWxldGVfa2V5X2Zyb21f YnVja2V0KGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwKIAkJCQkJCQkJICAgY29uc3Qgdm9pZCAq a2V5LAogCQkJCQkJCQkgICBkc2FfcG9pbnRlciAqYnVja2V0X2hlYWQpOwpAQCAtNDIyLDE5ICs0 MjQsMjUgQEAgZHNoYXNoX2ZpbmQoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBjb25zdCB2b2lk ICprZXksIGJvb2wgZXhjbHVzaXZlKQogfQogCiAvKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8g YW4gZXhjbHVzaXZlbHkgbG9ja2VkIGl0ZW0gd2hpY2ggbXVzdCBiZSByZWxlYXNlZCB3aXRoCi0g KiBkc2hhc2hfcmVsZWFzZV9sb2NrLiAgSWYgdGhlIGtleSBpcyBmb3VuZCBpbiB0aGUgaGFzaCB0 YWJsZSwgJ2ZvdW5kJyBpcyBzZXQKLSAqIHRvIHRydWUgYW5kIGEgcG9pbnRlciB0byB0aGUgZXhp c3RpbmcgZW50cnkgaXMgcmV0dXJuZWQuICBJZiB0aGUga2V5IGlzIG5vdAotICogZm91bmQsICdm b3VuZCcgaXMgc2V0IHRvIGZhbHNlLCBhbmQgYSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBl bnRyeSBpcwotICogcmV0dXJuZWQuCisgKiBGaW5kIGFuIGV4aXN0aW5nIGVudHJ5IGluIGEgZHNo YXNoX3RhYmxlLCBvciBpbnNlcnQgYSBuZXcgb25lLgorICoKKyAqIERTSEFTSF9JTlNFUlRfTk9f T09NIGNhdXNlcyB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiBOVUxMIHdoZW4gbm8gbWVtb3J5IGlz CisgKiBhdmFpbGFibGUgZm9yIHRoZSBuZXcgZW50cnkuIE90aGVyd2lzZSwgc3VjaCBhbGxvY2F0 aW9ucyB3aWxsIHJlc3VsdCBpbgorICogYW4gRVJST1IuCisgKgorICogQW55IGVudHJ5IHJldHVy bmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgZXhjbHVzaXZlbHkgbG9ja2VkLCBhbmQgdGhlIGNhbGxl cgorICogbXVzdCByZWxlYXNlIHRoYXQgbG9jayB1c2luZyBkc2hhc2hfcmVsZWFzZV9sb2NrLiBO b3RlcyBhYm92ZSBkc2hhc2hfZmluZCgpCisgKiByZWdhcmRpbmcgbG9ja2luZyBhbmQgZXJyb3Ig aGFuZGxpbmcgZXF1YWxseSBhcHBseSBoZXJlLgorICoKKyAqIE9uIHJldHVybiwgKmZvdW5kIGlz IHNldCB0byB0cnVlIGlmIGFuIGV4aXN0aW5nIGVudHJ5IHdhcyBmb3VuZCBpbiB0aGUKKyAqIGhh c2ggdGFibGUsIGFuZCBvdGhlcndpc2UgZmFsc2UuCiAgKgotICogTm90ZXMgYWJvdmUgZHNoYXNo X2ZpbmQoKSByZWdhcmRpbmcgbG9ja2luZyBhbmQgZXJyb3IgaGFuZGxpbmcgZXF1YWxseQotICog YXBwbHkgaGVyZS4KICAqLwogdm9pZCAqCi1kc2hhc2hfZmluZF9vcl9pbnNlcnQoZHNoYXNoX3Rh YmxlICpoYXNoX3RhYmxlLAotCQkJCQkgIGNvbnN0IHZvaWQgKmtleSwKLQkJCQkJICBib29sICpm b3VuZCkKK2RzaGFzaF9maW5kX29yX2luc2VydF9leHRlbmRlZChkc2hhc2hfdGFibGUgKmhhc2hf dGFibGUsCisJCQkJCQkJICAgY29uc3Qgdm9pZCAqa2V5LAorCQkJCQkJCSAgIGJvb2wgKmZvdW5k LAorCQkJCQkJCSAgIGludCBmbGFncykKIHsKIAlkc2hhc2hfaGFzaCBoYXNoOwogCXNpemVfdAkJ cGFydGl0aW9uX2luZGV4OwpAQCAtNDc3LDE0ICs0ODUsMjIgQEAgcmVzdGFydDoKIAkJCSAqIHJl YWNxdWlyZSBhbGwgdGhlIGxvY2tzIGluIHRoZSByaWdodCBvcmRlciB0byBhdm9pZCBkZWFkbG9j a3MuCiAJCQkgKi8KIAkJCUxXTG9ja1JlbGVhc2UoUEFSVElUSU9OX0xPQ0soaGFzaF90YWJsZSwg cGFydGl0aW9uX2luZGV4KSk7Ci0JCQlyZXNpemUoaGFzaF90YWJsZSwgaGFzaF90YWJsZS0+c2l6 ZV9sb2cyICsgMSk7CisJCQlpZiAoIXJlc2l6ZShoYXNoX3RhYmxlLCBoYXNoX3RhYmxlLT5zaXpl X2xvZzIgKyAxLCBmbGFncykpCisJCQkJcmV0dXJuIE5VTEw7CiAKIAkJCWdvdG8gcmVzdGFydDsK IAkJfQogCiAJCS8qIEZpbmFsbHkgd2UgY2FuIHRyeSB0byBpbnNlcnQgdGhlIG5ldyBpdGVtLiAq LwogCQlpdGVtID0gaW5zZXJ0X2ludG9fYnVja2V0KGhhc2hfdGFibGUsIGtleSwKLQkJCQkJCQkJ ICAmQlVDS0VUX0ZPUl9IQVNIKGhhc2hfdGFibGUsIGhhc2gpKTsKKwkJCQkJCQkJICAmQlVDS0VU X0ZPUl9IQVNIKGhhc2hfdGFibGUsIGhhc2gpLAorCQkJCQkJCQkgIGZsYWdzKTsKKwkJaWYgKGl0 ZW0gPT0gTlVMTCkKKwkJeworCQkJQXNzZXJ0KChmbGFncyAmIERTSEFTSF9JTlNFUlRfTk9fT09N KSAhPSAwKTsKKwkJCUxXTG9ja1JlbGVhc2UoUEFSVElUSU9OX0xPQ0soaGFzaF90YWJsZSwgcGFy dGl0aW9uX2luZGV4KSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCQlpdGVtLT5oYXNoID0gaGFz aDsKIAkJLyogQWRqdXN0IHBlci1sb2NrLXBhcnRpdGlvbiBjb3VudGVyIGZvciBsb2FkIGZhY3Rv ciBrbm93bGVkZ2UuICovCiAJCSsrcGFydGl0aW9uLT5jb3VudDsKQEAgLTg1NCwxMCArODcwLDE0 IEBAIGRlbGV0ZV9pdGVtKGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwgZHNoYXNoX3RhYmxlX2l0 ZW0gKml0ZW0pCiAgKiBHcm93IHRoZSBoYXNoIHRhYmxlIGlmIG5lY2Vzc2FyeSB0byB0aGUgcmVx dWVzdGVkIG51bWJlciBvZiBidWNrZXRzLiAgVGhlCiAgKiByZXF1ZXN0ZWQgc2l6ZSBtdXN0IGJl IGRvdWJsZSBzb21lIHByZXZpb3VzbHkgb2JzZXJ2ZWQgc2l6ZS4KICAqCisgKiBJZiBhbiBvdXQt b2YtbWVtb3J5IGNvbmRpdGlvbiBpcyBvYnNlcnZlZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGZh bHNlIGlmCisgKiBmbGFncyBpbmNsdWRlcyBEU0hBU0hfSU5TRVJUX05PX09PTSwgYW5kIG90aGVy d2lzZSB0aHJvd3MgYW4gRVJST1IuIEluIGFsbAorICogb3RoZXIgY2FzZXMsIGl0IHJldHVybnMg dHJ1ZS4KKyAqCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRob3V0IGFueSBwYXJ0aXRpb24gbG9jayBo ZWxkLgogICovCi1zdGF0aWMgdm9pZAotcmVzaXplKGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwg c2l6ZV90IG5ld19zaXplX2xvZzIpCitzdGF0aWMgYm9vbAorcmVzaXplKGRzaGFzaF90YWJsZSAq aGFzaF90YWJsZSwgc2l6ZV90IG5ld19zaXplX2xvZzIsIGludCBmbGFncykKIHsKIAlkc2FfcG9p bnRlciBvbGRfYnVja2V0czsKIAlkc2FfcG9pbnRlciBuZXdfYnVja2V0c19zaGFyZWQ7CkBAIC04 ODIsMjMgKzkwMiwzOSBAQCByZXNpemUoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBzaXplX3Qg bmV3X3NpemVfbG9nMikKIAkJCSAqIG9idGFpbmluZyBhbGwgdGhlIGxvY2tzIGFuZCByZXR1cm4g ZWFybHkuCiAJCQkgKi8KIAkJCUxXTG9ja1JlbGVhc2UoUEFSVElUSU9OX0xPQ0soaGFzaF90YWJs ZSwgMCkpOwotCQkJcmV0dXJuOworCQkJcmV0dXJuIHRydWU7CiAJCX0KIAl9CiAKIAlBc3NlcnQo bmV3X3NpemVfbG9nMiA9PSBoYXNoX3RhYmxlLT5jb250cm9sLT5zaXplX2xvZzIgKyAxKTsKIAog CS8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgdGhlIG5ldyB0YWJsZS4gKi8KLQluZXdfYnVja2V0 c19zaGFyZWQgPQotCQlkc2FfYWxsb2NhdGVfZXh0ZW5kZWQoaGFzaF90YWJsZS0+YXJlYSwKLQkJ CQkJCQkgIHNpemVvZihkc2FfcG9pbnRlcikgKiBuZXdfc2l6ZSwKLQkJCQkJCQkgIERTQV9BTExP Q19IVUdFIHwgRFNBX0FMTE9DX1pFUk8pOwotCW5ld19idWNrZXRzID0gZHNhX2dldF9hZGRyZXNz KGhhc2hfdGFibGUtPmFyZWEsIG5ld19idWNrZXRzX3NoYXJlZCk7CisJeworCQlpbnQJCQlkc2Ff ZmxhZ3MgPSBEU0FfQUxMT0NfSFVHRSB8IERTQV9BTExPQ19aRVJPOworCisJCWlmIChmbGFncyAm IERTSEFTSF9JTlNFUlRfTk9fT09NKQorCQkJZHNhX2ZsYWdzIHw9IERTQV9BTExPQ19OT19PT007 CisJCW5ld19idWNrZXRzX3NoYXJlZCA9CisJCQlkc2FfYWxsb2NhdGVfZXh0ZW5kZWQoaGFzaF90 YWJsZS0+YXJlYSwKKwkJCQkJCQkJICBzaXplb2YoZHNhX3BvaW50ZXIpICogbmV3X3NpemUsCisJ CQkJCQkJCSAgZHNhX2ZsYWdzKTsKKwl9CisKKwkvKiBJZiBEU0hBU0hfSU5TRVJUX05PX09PTSB3 YXMgc3BlY2lmaWVkLCBhbGxvY2F0aW9uIG1heSBoYXZlIGZhaWxlZC4gKi8KKwlpZiAoIURzYVBv aW50ZXJJc1ZhbGlkKG5ld19idWNrZXRzX3NoYXJlZCkpCisJeworCQkvKiBSZWxlYXNlIGFsbCB0 aGUgbG9ja3MgYW5kIHJldHVybiB3aXRob3V0IHJlc2l6aW5nLiAqLworCQlBc3NlcnQoKGZsYWdz ICYgRFNIQVNIX0lOU0VSVF9OT19PT00pICE9IDApOworCQlmb3IgKGkgPSAwOyBpIDwgRFNIQVNI X05VTV9QQVJUSVRJT05TOyArK2kpCisJCQlMV0xvY2tSZWxlYXNlKFBBUlRJVElPTl9MT0NLKGhh c2hfdGFibGUsIGkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAogCS8qCiAJICogV2UndmUgYWxs b2NhdGVkIHRoZSBuZXcgYnVja2V0IGFycmF5OyBhbGwgdGhhdCByZW1haW5zIHRvIGRvIG5vdyBp cyB0bwogCSAqIHJlaW5zZXJ0IGFsbCBpdGVtcywgd2hpY2ggYW1vdW50cyB0byBhZGp1c3Rpbmcg YWxsIHRoZSBwb2ludGVycy4KIAkgKi8KKwluZXdfYnVja2V0cyA9IGRzYV9nZXRfYWRkcmVzcyho YXNoX3RhYmxlLT5hcmVhLCBuZXdfYnVja2V0c19zaGFyZWQpOwogCXNpemUgPSAoKHNpemVfdCkg MSkgPDwgaGFzaF90YWJsZS0+Y29udHJvbC0+c2l6ZV9sb2cyOwogCWZvciAoaSA9IDA7IGkgPCBz aXplOyArK2kpCiAJewpAQCAtOTI4LDYgKzk2NCw4IEBAIHJlc2l6ZShkc2hhc2hfdGFibGUgKmhh c2hfdGFibGUsIHNpemVfdCBuZXdfc2l6ZV9sb2cyKQogCS8qIFJlbGVhc2UgYWxsIHRoZSBsb2Nr cy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgRFNIQVNIX05VTV9QQVJUSVRJT05TOyArK2kpCiAJCUxX TG9ja1JlbGVhc2UoUEFSVElUSU9OX0xPQ0soaGFzaF90YWJsZSwgaSkpOworCisJcmV0dXJuIHRy dWU7CiB9CiAKIC8qCkBAIC05ODIsMTkgKzEwMjAsMjYgQEAgaW5zZXJ0X2l0ZW1faW50b19idWNr ZXQoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLAogCiAvKgogICogQWxsb2NhdGUgc3BhY2UgZm9y IGFuIGVudHJ5IHdpdGggdGhlIGdpdmVuIGtleSBhbmQgaW5zZXJ0IGl0IGludG8gdGhlCi0gKiBw cm92aWRlZCBidWNrZXQuCisgKiBwcm92aWRlZCBidWNrZXQuICBSZXR1cm5zIE5VTEwgaWYgb3V0 IG9mIG1lbW9yeSBhbmQgRFNIQVNIX0lOU0VSVF9OT19PT00KKyAqIHdhcyBzcGVjaWZpZWQgaW4g ZmxhZ3MuCiAgKi8KIHN0YXRpYyBkc2hhc2hfdGFibGVfaXRlbSAqCiBpbnNlcnRfaW50b19idWNr ZXQoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLAogCQkJCSAgIGNvbnN0IHZvaWQgKmtleSwKLQkJ CQkgICBkc2FfcG9pbnRlciAqYnVja2V0KQorCQkJCSAgIGRzYV9wb2ludGVyICpidWNrZXQsCisJ CQkJICAgaW50IGZsYWdzKQogewogCWRzYV9wb2ludGVyIGl0ZW1fcG9pbnRlcjsKIAlkc2hhc2hf dGFibGVfaXRlbSAqaXRlbTsKLQotCWl0ZW1fcG9pbnRlciA9IGRzYV9hbGxvY2F0ZShoYXNoX3Rh YmxlLT5hcmVhLAotCQkJCQkJCQloYXNoX3RhYmxlLT5wYXJhbXMuZW50cnlfc2l6ZSArCi0JCQkJ CQkJCU1BWEFMSUdOKHNpemVvZihkc2hhc2hfdGFibGVfaXRlbSkpKTsKKwlpbnQJCQlkc2FfZmxh Z3M7CisKKwlkc2FfZmxhZ3MgPSAoZmxhZ3MgJiBEU0hBU0hfSU5TRVJUX05PX09PTSkgPyBEU0Ff QUxMT0NfTk9fT09NIDogMDsKKwlpdGVtX3BvaW50ZXIgPSBkc2FfYWxsb2NhdGVfZXh0ZW5kZWQo aGFzaF90YWJsZS0+YXJlYSwKKwkJCQkJCQkJCQkgaGFzaF90YWJsZS0+cGFyYW1zLmVudHJ5X3Np emUgKworCQkJCQkJCQkJCSBNQVhBTElHTihzaXplb2YoZHNoYXNoX3RhYmxlX2l0ZW0pKSwKKwkJ CQkJCQkJCQkgZHNhX2ZsYWdzKTsKKwlpZiAoIURzYVBvaW50ZXJJc1ZhbGlkKGl0ZW1fcG9pbnRl cikpCisJCXJldHVybiBOVUxMOwogCWl0ZW0gPSBkc2FfZ2V0X2FkZHJlc3MoaGFzaF90YWJsZS0+ YXJlYSwgaXRlbV9wb2ludGVyKTsKIAljb3B5X2tleShoYXNoX3RhYmxlLCBFTlRSWV9GUk9NX0lU RU0oaXRlbSksIGtleSk7CiAJaW5zZXJ0X2l0ZW1faW50b19idWNrZXQoaGFzaF90YWJsZSwgaXRl bV9wb2ludGVyLCBpdGVtLCBidWNrZXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL2Rz aGFzaC5oIGIvc3JjL2luY2x1ZGUvbGliL2RzaGFzaC5oCmluZGV4IDQ2YTNjYTc4ODRmLi42NGI3 NThiMzgxYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGliL2RzaGFzaC5oCisrKyBiL3NyYy9p bmNsdWRlL2xpYi9kc2hhc2guaApAQCAtOTIsMTUgKzkyLDIzIEBAIGV4dGVybiB2b2lkIGRzaGFz aF9kZXRhY2goZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlKTsKIGV4dGVybiBkc2hhc2hfdGFibGVf aGFuZGxlIGRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUoZHNoYXNoX3RhYmxlICpoYXNoX3Rh YmxlKTsKIGV4dGVybiB2b2lkIGRzaGFzaF9kZXN0cm95KGRzaGFzaF90YWJsZSAqaGFzaF90YWJs ZSk7CiAKKy8qIEZsYWdzIGZvciBkc2hhc2hfZmluZF9vcl9pbnNlcnRfZXh0ZW5kZWQuICovCisj ZGVmaW5lIERTSEFTSF9JTlNFUlRfTk9fT09NCTB4MDEJLyogbm8gZmFpbHVyZSBpZiBvdXQtb2Yt bWVtb3J5ICovCisKIC8qIEZpbmRpbmcsIGNyZWF0aW5nLCBkZWxldGluZyBlbnRyaWVzLiAqLwog ZXh0ZXJuIHZvaWQgKmRzaGFzaF9maW5kKGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwKIAkJCQkJ CSBjb25zdCB2b2lkICprZXksIGJvb2wgZXhjbHVzaXZlKTsKLWV4dGVybiB2b2lkICpkc2hhc2hf ZmluZF9vcl9pbnNlcnQoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLAotCQkJCQkJCQkgICBjb25z dCB2b2lkICprZXksIGJvb2wgKmZvdW5kKTsKK2V4dGVybiB2b2lkICpkc2hhc2hfZmluZF9vcl9p bnNlcnRfZXh0ZW5kZWQoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLAorCQkJCQkJCQkJCQljb25z dCB2b2lkICprZXksIGJvb2wgKmZvdW5kLAorCQkJCQkJCQkJCQlpbnQgZmxhZ3MpOwogZXh0ZXJu IGJvb2wgZHNoYXNoX2RlbGV0ZV9rZXkoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBjb25zdCB2 b2lkICprZXkpOwogZXh0ZXJuIHZvaWQgZHNoYXNoX2RlbGV0ZV9lbnRyeShkc2hhc2hfdGFibGUg Kmhhc2hfdGFibGUsIHZvaWQgKmVudHJ5KTsKIGV4dGVybiB2b2lkIGRzaGFzaF9yZWxlYXNlX2xv Y2soZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCB2b2lkICplbnRyeSk7CiAKKy8qIEZpbmQgb3Ig aW5zZXJ0IHdpdGggZXJyb3Igb24gb3V0LW9mLW1lbW9yeS4gKi8KKyNkZWZpbmUgZHNoYXNoX2Zp bmRfb3JfaW5zZXJ0KGhhc2hfdGFibGUsIGtleSwgZm91bmQpIFwKKwlkc2hhc2hfZmluZF9vcl9p bnNlcnRfZXh0ZW5kZWQoaGFzaF90YWJsZSwga2V5LCBmb3VuZCwgMCkKKwogLyogc2VxIHNjYW4g c3VwcG9ydCAqLwogZXh0ZXJuIHZvaWQgZHNoYXNoX3NlcV9pbml0KGRzaGFzaF9zZXFfc3RhdHVz ICpzdGF0dXMsIGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwKIAkJCQkJCQlib29sIGV4Y2x1c2l2 ZSk7Ci0tIAoyLjUxLjAKCg== --000000000000db2c07064d40c6c4--