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 1vvlD5-000YX8-2X for pgsql-bugs@arkaria.postgresql.org; Thu, 26 Feb 2026 23:56:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvlD4-00GUPM-1f for pgsql-bugs@arkaria.postgresql.org; Thu, 26 Feb 2026 23:55:58 +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 1vvlD3-00GUP8-2l for pgsql-bugs@lists.postgresql.org; Thu, 26 Feb 2026 23:55:58 +0000 Received: from mail-oo1-xc2a.google.com ([2607:f8b0:4864:20::c2a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vvlD0-00000001O2N-2Q34 for pgsql-bugs@lists.postgresql.org; Thu, 26 Feb 2026 23:55:56 +0000 Received: by mail-oo1-xc2a.google.com with SMTP id 006d021491bc7-662f5c5507cso1255512eaf.3 for ; Thu, 26 Feb 2026 15:55:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772150155; cv=none; d=google.com; s=arc-20240605; b=bOEWTVfGNMSapv3c8lUzi6lgKzvYlakE4zteYx5SmbuUxXJfjpCditFVEAv1TqoErr ke3p03WLkY1c7PWSDuOquwAonZjT27AyvIGbec1t+9LH1XdpHEYH/WKuZE0EuuxxNYsA dTvIlNFV4pqoTjQ0TERKAoCJ2kyJZtdM5QEsw2Vgg/5xFznElf5jrPRoZvPZpuHdb0By 14ZZcviyZKZ5ypq/NwJV+Kapy3c+84v4/ULDz8tIhjTWo2KnKhb0mCZHgYXddXn8aRoD TYl2ssS4rdZJ6AP8NRfjvP+bdiYTL+a302RzTWxU1EAzCvlpiej6i1db9YWasMwvHjP4 ZftA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=f52Qb8TBPXUMKnBXxVqZejXZ4+R29UUkwQJbiBQT28A=; fh=QRyD1K2+NB3lJMLqq7X7mQufHf4zhfxNyFIGAAmiEqM=; b=h4pF0Ja93hE/Sj8ZKKO1wit6+gtlywuuer5Dt2XkD4ddSOoMNk2Mhl9hF2ZTT6byqw V4VDcnI2/eLCucdgNG9J4PCtQQUxduvmC1FvpOjaGMulvP/VeD9bJW9oUW0g6GNVbyWm a+TsJTfTTXfSIq1xk4NdF3Tcrg7xl5F0H8FSe0kT+HJWT6BHaVomWEGYERZcIyliADkL 9BLjp7BiTbWwH3K2lyNm5pBI4VQwPzP+pzrXhyKof4bktJjAx4hrl+5vpDjz1IWh3Pfg tsYBOsuFifWhwyrrYauOkJ1VQ6/zauhU52UrklL3D6LG+AMGjYCO4jlYu7TL7r7u+Mwp JIvA==; 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=1772150155; x=1772754955; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=f52Qb8TBPXUMKnBXxVqZejXZ4+R29UUkwQJbiBQT28A=; b=CspwFxn6fsdvxLcJjogdcsZ1BBfP0EMsjDWX7nYzzl+foR8xQ8MtckuQxKY1QDUhwJ xY5DA+aWuxkLgy+Eeoqw1sQo752MnjLnZ9Chi23QenahYnWw+Qo9JI1nTV1vSl2GOT+z y+Mc5bp90GU+J2K85r+69p4bJjExIlQodg3+9GwVfRYyjTgK+jc/mlI4UyNlWR4YbVNT XuH/Nrfs/7fNLXKsS0NQjBLluANHIXuLmScsuwom94CVjZvGlJqCsNTuyiq5Runyly0J JPh88+DL1xWRa1dCL0TaKis7k/lRvv0gfm12RxQpL8bn/HN9/vT+St3KJYkx2U1nSVxe uwJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772150155; x=1772754955; h=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=f52Qb8TBPXUMKnBXxVqZejXZ4+R29UUkwQJbiBQT28A=; b=rCj04JcMke7dCi3GutMrN+o5TQI5BWNav5LbP3q5Fl3z037/AbQ97FQ1zaelgRGGZM AP6abR4JjmmDjz2p5QKqhpgIjCGNNIjipSpgNFgp3TYoeNY0q65QOQO4uFGRsTIx56Bt GzDpE22hBx2mKHQdl4CbJqL5VG8M53TyOTL9aHEZX+WwvP/guBZjVtcHSZD/RKZLqiEb uzJQ6ldMBgMmKFbR4050/twlNs+BvhBNyBMy4uDzM1Rr5nZ+ALpmb061vZG41BLlzIcg JBJjZtV1nDIk+h8wI9nRdOA+1eF+sql8EMVg6no71i4e17Qycx+vGM/Nn0C8qzt7qyOA 0doA== X-Forwarded-Encrypted: i=1; AJvYcCVpRTuJ1FSMvJh/DmZqPqIBGQFcdoxZr74CArtfu35agEGIH91QGGT6zs1vX2Jomxxz24foYFdI3v+m@lists.postgresql.org X-Gm-Message-State: AOJu0YxYexTUUXg9mnLGqhZ73UqnBU5rvczpJHNjrLXsGifOFeLetRsR WqTkpB21juXRsSrELrpvIv2iVSO2HOAJQ6dXBUzBpdvHOAttRytWRFoTKVgcv0ASgeeJuCBW9TO m8nPa0ma+bHl0c0B8mFMqgikLH/B/xLQdKyOrbgI= X-Gm-Gg: ATEYQzwiWzhW6xKJKPXf7I6plbvafpjTCA6csQlze5NhTdmsShe2h6vlnhVpAM7bbFo paApcrSoJDvAoKHs/XjsL9qvfsqxkIY4OlPddZtLQ4v8HddGaEyUv3rYVVQHvBkJnoC8FH+xLPZ +Nv8WFRmGInWzUcY5BLGChJwdueJ3C11Yf13Xpp88eZGbaW6i1nLj/7x2rG8OI1T+/CLYFgGDNm qTJ/GSGPE0MjPVzVCshLgn85YpM51P2z5atMzOudExvkA0vxvRZw6axxddSUrXYtYPSfxt2buV4 3CBySxi2TCfMSQ== X-Received: by 2002:a05:6820:1b10:b0:662:b70c:a414 with SMTP id 006d021491bc7-679fadc2923mr769945eaf.14.1772150154952; Thu, 26 Feb 2026 15:55:54 -0800 (PST) MIME-Version: 1.0 References: <19382-4c2060ffee72759b@postgresql.org> In-Reply-To: From: surya poondla Date: Thu, 26 Feb 2026 15:55:43 -0800 X-Gm-Features: AaiRm52pRwHhCyzNeNuXFKC_XWIGBiBcavaCT-mLnOOpHy3Xmfttsgz-ACHDaRI Message-ID: Subject: Re: BUG #19382: Server crash at __nss_database_lookup To: dllggyx@outlook.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000079c9ec064bc2dc4d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000079c9ec064bc2dc4d Content-Type: multipart/alternative; boundary="00000000000079c9eb064bc2dc4b" --00000000000079c9eb064bc2dc4b Content-Type: text/plain; charset="UTF-8" Hi All, CFBot on the commitfest asked me to rebase my code, and during the rebase (rebase to 17 Stable version) I realized my initial patch v1 might have a memory management issue. When conversion of type was needed, the old record object was never properly freed, and the new record was being created in the wrong memory context. v2 fixes this by passing the record variable directly to convert_record_for_altered_type() and using assign_record_var() internally to replace a record variable and this way correctly frees the old value, transfers the new one into the right memory context. Testing: 1) All 224 core regression tests pass 2) All 13 PL/pgSQL regression tests pass 3) All original test cases from the bug report produce correct results (same results as my v1 patch) (adding them here again for quick reference) and we no longer see the crash of the database. psql (17.9) Type "help" for help. postgres=# DROP FUNCTION IF EXISTS bar(); DROP FUNCTION postgres=# DROP TYPE IF EXISTS foo CASCADE; DROP TYPE postgres=# CREATE TYPE foo AS (a INT, b INT); CREATE TYPE postgres=# CREATE FUNCTION bar() RETURNS RECORD AS $$ postgres$# DECLARE postgres$# r foo := ROW(123, power(2, 30)); postgres$# BEGIN postgres$# ALTER TYPE foo ALTER ATTRIBUTE b TYPE TEXT; postgres$# RETURN r; postgres$# END; postgres$# $$ LANGUAGE plpgsql; CREATE FUNCTION postgres=# SELECT bar(); bar ------------------ (123,1073741824) (1 row) postgres=# DROP FUNCTION IF EXISTS bar1(); DROP FUNCTION postgres=# DROP TYPE IF EXISTS foo1 CASCADE; DROP TYPE postgres=# CREATE TYPE foo1 AS (a INT, b INT); CREATE TYPE postgres=# CREATE FUNCTION bar1(OUT r1 foo1) AS $$ postgres$# BEGIN postgres$# r1 := ROW(1, 2); postgres$# ALTER TYPE foo1 ALTER ATTRIBUTE b TYPE TEXT; postgres$# RETURN; postgres$# END; postgres$# $$ LANGUAGE plpgsql; CREATE FUNCTION postgres=# SELECT bar1(); bar1 ------- (1,2) (1 row) postgres=# DROP TYPE IF EXISTS foo2 CASCADE; NOTICE: drop cascades to function bar2() DROP TYPE postgres=# CREATE TYPE foo2 AS (a INT, b TEXT); CREATE TYPE postgres=# CREATE FUNCTION bar2() RETURNS foo2 AS $$ postgres$# DECLARE postgres$# r foo2 := ROW(1, 'hello'); postgres$# BEGIN postgres$# ALTER TYPE foo2 ALTER ATTRIBUTE b TYPE INT; postgres$# RETURN r; postgres$# END; postgres$# $$ LANGUAGE plpgsql; CREATE FUNCTION postgres=# SELECT bar2(); ERROR: invalid input syntax for type integer: "hello" CONTEXT: PL/pgSQL function bar2() line 6 at RETURN postgres=# quit Regards, Surya Poondla > --00000000000079c9eb064bc2dc4b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi All,

CFBot on the commitfest as= ked me to rebase my code, and during the=C2=A0rebase (rebase to 17 Stable v= ersion) I realized my initial patch v1 might have a=C2=A0memory management = issue.
When conversion of type was needed, the old record object was ne= ver properly freed, and the new record was being created in the wrong memor= y context. v2 fixes this by passing the record variable directly to convert= _record_for_altered_type() and using assign_record_var() internally to repl= ace a record variable and this way correctly frees the old value, transfers= the new one into the right memory context.

Testing:
1) All 224 core regression tests pass
2) All 13 PL/pgSQL regres= sion tests pass
3) All original test cases from the bug report produce c= orrect results (same results as my v1 patch) (adding them here again for qu= ick reference) and we no longer see the crash of the database.

psql (= 17.9)

Type &= quot;help" for help.


postgr= es=3D# DROP FUNCTION IF EXISTS bar();=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0

DROP F= UNCTION

postgr= es=3D# =C2=A0 DROP TYPE = IF EXISTS foo CASCADE;=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0

DROP T= YPE

postgr= es=3D# =C2=A0 CREATE TYP= E foo AS (a INT, b INT);=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0

CREATE= TYPE

postgr= es=3D# =C2=A0 CREATE FUN= CTION bar() RETURNS RECORD AS $$=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0

postgr= es$# =C2=A0 DECLARE =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0

postgr= es$# =C2=A0 =C2=A0 =C2=A0 r foo :=3D ROW(123, power(2, 30));=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0

postgr= es$# =C2=A0 BEGIN =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0

postgr= es$# =C2=A0 =C2=A0 =C2=A0 ALTER TYPE foo ALTER ATTRIBUTE b TYPE TEXT;

postgr= es$# =C2=A0 =C2=A0 =C2=A0 RETURN r;

postgr= es$# =C2=A0 END;<= /p>

postgr= es$# =C2=A0 $$ LANGUAGE = plpgsql;

CREATE= FUNCTION

postgr= es=3D# SELECT bar();

=C2=A0=C2=A0 =C2=A0 =C2=A0 bar= =C2=A0 =C2=A0 =C2=A0 =C2=A0

------= ------------

=C2=A0(123,1073741824)<= /p>

(1 row= )


postgr= es=3D# DROP FUNCTION IF EXISTS bar1();

DROP F= UNCTION

postgr= es=3D# =C2=A0 DROP TYPE = IF EXISTS foo1 CASCADE;

DROP T= YPE

postgr= es=3D# =C2=A0 CREATE TYP= E foo1 AS (a INT, b INT);

CREATE= TYPE

postgr= es=3D# =C2=A0 CREATE FUN= CTION bar1(OUT r1 foo1) AS $$

postgr= es$# =C2=A0 BEGIN=

postgr= es$# =C2=A0 =C2=A0 =C2=A0 r1 :=3D ROW(1, 2);

postgr= es$# =C2=A0 =C2=A0 =C2=A0 ALTER TYPE foo1 ALTER ATTRIBUTE b TYPE TEXT;

postgr= es$# =C2=A0 =C2=A0 =C2=A0 RETURN;

postgr= es$# =C2=A0 END;<= /p>

postgr= es$# =C2=A0 $$ LANGUAGE = plpgsql;

CREATE= FUNCTION

postgr= es=3D# SELECT bar1();

=C2=A0bar1 =C2=A0

------= -

=C2=A0(1,2)

(1 row= )


postgr= es=3D# DROP TYPE IF EXISTS foo2 CASCADE;

NOTICE= :=C2=A0 drop cascades to= function bar2()

DROP T= YPE

postgr= es=3D# =C2=A0 CREATE TYP= E foo2 AS (a INT, b TEXT);

CREATE= TYPE

postgr= es=3D# =C2=A0 CREATE FUN= CTION bar2() RETURNS foo2 AS $$

postgr= es$# =C2=A0 DECLARE

postgr= es$# =C2=A0 =C2=A0 =C2=A0 r foo2 :=3D ROW(1, 'hello');

postgr= es$# =C2=A0 BEGIN=

postgr= es$# =C2=A0 =C2=A0 =C2=A0 ALTER TYPE foo2 ALTER ATTRIBUTE b TYPE INT;

postgr= es$# =C2=A0 =C2=A0 =C2=A0 RETURN r;

postgr= es$# =C2=A0 END;<= /p>

postgr= es$# =C2=A0 $$ LANGUAGE = plpgsql;

CREATE= FUNCTION

postgr= es=3D# SELECT bar2();

ERROR:= =C2=A0 invalid input syn= tax for type integer: "hello"

CONTEX= T:=C2=A0 PL/pgSQL functi= on bar2() line 6 at RETURN

postgr= es=3D# quit



Regards,
Surya Poondla
--00000000000079c9eb064bc2dc4b-- --00000000000079c9ec064bc2dc4d Content-Type: application/octet-stream; name="0002-Fix-bug-19382-server-crash-when-ALTER-TYPE-is-used-m.patch" Content-Disposition: attachment; filename="0002-Fix-bug-19382-server-crash-when-ALTER-TYPE-is-used-m.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm449t7n0 RnJvbSAyY2MxNjFkM2Y4ZDFjMDgxZjBhZmQ5YTg0MzhhYjkzNThjYmRiZWUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzcG9vbmRsYSA8c19wb29uZGxhQGFwcGxlLmNvbT4KRGF0ZTog RnJpLCAyMyBKYW4gMjAyNiAxNzoyODo1NCAtMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIEZpeCAo YnVnICMxOTM4Mikgc2VydmVyIGNyYXNoIHdoZW4gQUxURVIgVFlQRSBpcyB1c2VkCiBtaWQtdHJh bnNhY3Rpb24gaW4gUEwvcGdTUUwKCldoZW4gQUxURVIgVFlQRSBjaGFuZ2VzIGEgY29tcG9zaXRl IHR5cGUncyBjb2x1bW4gdHlwZXMgd2l0aGluIGEKdHJhbnNhY3Rpb24sIFBML3BnU1FMIHJlY29y ZCB2YXJpYWJsZXMgdGhhdCB3ZXJlIHBvcHVsYXRlZCBiZWZvcmUKdGhlIEFMVEVSIHN0aWxsIGhv bGQgZGF0YSBpbiB0aGUgb2xkIGZvcm1hdC4gUmV0dXJuaW5nIHN1Y2ggcmVjb3JkcwpjYXVzZXMg YSBjcmFzaCBiZWNhdXNlIHRoZSBvdXRwdXQgZnVuY3Rpb25zIGV4cGVjdCBkYXRhIG1hdGNoaW5n IHRoZQpuZXcgdHlwZSBkZWZpbml0aW9uLCBub3QgdGhlIG9sZCBvbmUuCgpUaGUgY3Jhc2ggbWFu aWZlc3RlZCBhcyBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiByZWNvcmRfb3V0KCkgd2hlbiBpdAph dHRlbXB0ZWQgdG8gaW50ZXJwcmV0IGludGVnZXIgZGF0YSBhcyBhIHRleHQgcG9pbnRlciwgZHVl IHRvIHRoZQptaXNtYXRjaCBiZXR3ZWVuIHRoZSBzdG9yZWQgZGF0YSBhbmQgdGhlIGN1cnJlbnQg dHlwZSBkZWZpbml0aW9uLgotLS0KIHNyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMgfCAxNjUg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAxNjQg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3Fs L3NyYy9wbF9leGVjLmMgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCmluZGV4IDZiMDc3 ZmViZGM4Li5mMmZmMWFhMjVlYyAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4 ZWMuYworKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCkBAIC00NTgsNiArNDU4LDgg QEAgc3RhdGljIGNoYXIgKmZvcm1hdF9wcmVwYXJlZHBhcmFtc2RhdGEoUExwZ1NRTF9leGVjc3Rh dGUgKmVzdGF0ZSwKIHN0YXRpYyBQTHBnU1FMX3ZhcmlhYmxlICptYWtlX2NhbGxzdG10X3Rhcmdl dChQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAogCQkJCQkJCQkJCQkgIFBMcGdTUUxfZXhwciAq ZXhwcik7CiAKK3N0YXRpYyB2b2lkIGNvbnZlcnRfcmVjb3JkX2Zvcl9hbHRlcmVkX3R5cGUoUExw Z1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkJCQkJUExwZ1NRTF9yZWMgKnJlYyk7CiAK IC8qIC0tLS0tLS0tLS0KICAqIHBscGdzcWxfZXhlY19mdW5jdGlvbglDYWxsZWQgYnkgdGhlIGNh bGwgaGFuZGxlciBmb3IKQEAgLTMyNDQsOCArMzI0NiwyMiBAQCBleGVjX3N0bXRfcmV0dXJuKFBM cGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdTUUxfc3RtdF9yZXR1cm4gKnN0bXQpCiAJCQkJ fQogCQkJCWJyZWFrOwogCi0JCQljYXNlIFBMUEdTUUxfRFRZUEVfUk9XOgogCQkJY2FzZSBQTFBH U1FMX0RUWVBFX1JFQzoKKwkJCQl7CisJCQkJCVBMcGdTUUxfcmVjICpyZWMgPSAoUExwZ1NRTF9y ZWMgKikgcmV0dmFyOworCisJCQkJCS8qCisJCQkJCSAqIENoZWNrIGlmIHRoZSByZWNvcmQncyBj b21wb3NpdGUgdHlwZSB3YXMgYWx0ZXJlZCBzaW5jZQorCQkJCQkgKiB0aGUgcmVjb3JkIHdhcyBw b3B1bGF0ZWQuIElmIHNvLCBjb252ZXJ0IHRoZSBkYXRhIHRvCisJCQkJCSAqIHByZXZlbnQgY3Jh c2hlcyB3aGVuIG91dHB1dHRpbmcgdGhlIHJlY29yZC4KKwkJCQkJICovCisJCQkJCWlmIChyZWMt PnJlY3R5cGVpZCAhPSBSRUNPUkRPSUQgJiYgcmVjLT5lcmggIT0gTlVMTCAmJgorCQkJCQkJIUV4 cGFuZGVkUmVjb3JkSXNFbXB0eShyZWMtPmVyaCkpCisJCQkJCQljb252ZXJ0X3JlY29yZF9mb3Jf YWx0ZXJlZF90eXBlKGVzdGF0ZSwgcmVjKTsKKwkJCQl9CisJCQkJLyogRkFMTCBUSFJPVUdIICov CisKKwkJCWNhc2UgUExQR1NRTF9EVFlQRV9ST1c6CiAJCQkJewogCQkJCQkvKiBleGVjX2V2YWxf ZGF0dW0gY2FuIGhhbmRsZSB0aGVzZSBjYXNlcyAqLwogCQkJCQlpbnQzMgkJcmV0dHlwbW9kOwpA QCAtMzM5MCw2ICszNDA2LDE0IEBAIGV4ZWNfc3RtdF9yZXR1cm5fbmV4dChQTHBnU1FMX2V4ZWNz dGF0ZSAqZXN0YXRlLAogCQkJCQlUdXBsZURlc2MJcmVjX3R1cGRlc2M7CiAJCQkJCVR1cGxlQ29u dmVyc2lvbk1hcCAqdHVwbWFwOwogCisJCQkJCS8qCisJCQkJCSAqIENoZWNrIGlmIHRoZSByZWNv cmQncyBjb21wb3NpdGUgdHlwZSB3YXMgYWx0ZXJlZCBzaW5jZQorCQkJCQkgKiB0aGUgcmVjb3Jk IHdhcyBwb3B1bGF0ZWQuIElmIHNvLCBjb252ZXJ0IHRoZSBkYXRhIHRvCisJCQkJCSAqIHByZXZl bnQgY3Jhc2hlcyB3aGVuIHN0b3JpbmcgdG8gdGhlIHR1cGxlc3RvcmUuCisJCQkJCSAqLworCQkJ CQlpZiAocmVjLT5yZWN0eXBlaWQgIT0gUkVDT1JET0lEICYmIHJlYy0+ZXJoICE9IE5VTEwpCisJ CQkJCQljb252ZXJ0X3JlY29yZF9mb3JfYWx0ZXJlZF90eXBlKGVzdGF0ZSwgcmVjKTsKKwogCQkJ CQkvKiBJZiByZWMgaXMgbnVsbCwgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gYSByb3cgb2YgbnVsbHMg Ki8KIAkJCQkJaWYgKHJlYy0+ZXJoID09IE5VTEwpCiAJCQkJCQlpbnN0YW50aWF0ZV9lbXB0eV9y ZWNvcmRfdmFyaWFibGUoZXN0YXRlLCByZWMpOwpAQCAtODg4MywzICs4OTA3LDE0MiBAQCBmb3Jt YXRfcHJlcGFyZWRwYXJhbXNkYXRhKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCiAKIAlyZXR1 cm4gcGFyYW1zdHIuZGF0YTsKIH0KKworLyoKKyAqIGNvbnZlcnRfcmVjb3JkX2Zvcl9hbHRlcmVk X3R5cGUKKyAqCisgKiBDaGVjayBpZiBhIHJlY29yZCdzIGNvbXBvc2l0ZSB0eXBlIGhhcyBiZWVu IGFsdGVyZWQgc2luY2UgdGhlIHJlY29yZAorICogd2FzIHBvcHVsYXRlZCwgYW5kIGlmIHNvLCBj b252ZXJ0IHRoZSByZWNvcmQgZGF0YSB0byBtYXRjaCB0aGUgbmV3CisgKiB0eXBlIGRlZmluaXRp b24uIFRoaXMgcHJldmVudHMgY3Jhc2hlcyB0aGF0IGNhbiBvY2N1ciB3aGVuIHRoZSBzdG9yZWQK KyAqIGRhdGEgZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCB0eXBlIGRlZmluaXRpb24uCisgKgor ICogSWYgY29udmVyc2lvbiBpcyBuZWVkZWQsIGFzc2lnbnMgdGhlIG5ldyByZWNvcmQgdG8gcmVj IHZpYQorICogYXNzaWduX3JlY29yZF92YXIoKSwgd2hpY2ggdHJhbnNmZXJzIGl0IHRvIGRhdHVt X2NvbnRleHQgYW5kIGZyZWVzCisgKiB0aGUgb2xkIHJlY29yZC4KKyAqLworc3RhdGljIHZvaWQK K2NvbnZlcnRfcmVjb3JkX2Zvcl9hbHRlcmVkX3R5cGUoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0 ZSwKKwkJCQkJCQkJUExwZ1NRTF9yZWMgKnJlYykKK3sKKwlFeHBhbmRlZFJlY29yZEhlYWRlciAq ZXJoID0gcmVjLT5lcmg7CisJT2lkCQkJCXJlY3R5cGVpZCA9IHJlYy0+cmVjdHlwZWlkOworCVR1 cGxlRGVzYwkJb2xkX3R1cGRlc2M7CisJVHVwbGVEZXNjCQluZXdfdHVwZGVzYzsKKwlUeXBlQ2Fj aGVFbnRyeSAqdHlwZW50cnk7CisJdWludDY0CQkJY3VycmVudF90dXBkZXNjX2lkOworCUV4cGFu ZGVkUmVjb3JkSGVhZGVyICpuZXdfZXJoOworCURhdHVtCQkgICAqb2xkX3ZhbHVlczsKKwlib29s CQkgICAqb2xkX251bGxzOworCURhdHVtCQkgICAqbmV3X3ZhbHVlczsKKwlib29sCQkgICAqbmV3 X251bGxzOworCWludAkJCQluYXR0czsKKwlpbnQJCQkJaTsKKwlNZW1vcnlDb250ZXh0CW9sZGN4 dDsKKwlib29sCQkJbmVlZF9jb252ZXJzaW9uID0gZmFsc2U7CisKKwkvKiBOb3RoaW5nIHRvIGRv IGZvciBhbm9ueW1vdXMgUkVDT1JEIHR5cGUgKi8KKwlpZiAocmVjdHlwZWlkID09IFJFQ09SRE9J RCkKKwkJcmV0dXJuOworCisJLyogR2V0IGN1cnJlbnQgdHlwZSBkZWZpbml0aW9uIGZyb20gdHlw Y2FjaGUgKi8KKwl0eXBlbnRyeSA9IGxvb2t1cF90eXBlX2NhY2hlKHJlY3R5cGVpZCwKKwkJCQkJ CQkJIFRZUEVDQUNIRV9UVVBERVNDIHwKKwkJCQkJCQkJIFRZUEVDQUNIRV9ET01BSU5fQkFTRV9J TkZPKTsKKwlpZiAodHlwZW50cnktPnR5cHR5cGUgPT0gVFlQVFlQRV9ET01BSU4pCisJCXR5cGVu dHJ5ID0gbG9va3VwX3R5cGVfY2FjaGUodHlwZW50cnktPmRvbWFpbkJhc2VUeXBlLAorCQkJCQkJ CQkJIFRZUEVDQUNIRV9UVVBERVNDKTsKKworCWN1cnJlbnRfdHVwZGVzY19pZCA9IHR5cGVudHJ5 LT50dXBEZXNjX2lkZW50aWZpZXI7CisKKwkvKiBJZiB0eXBlIGhhc24ndCBjaGFuZ2VkLCBub3Ro aW5nIHRvIGRvIChmYXN0IHBhdGgpICovCisJaWYgKGVyaC0+ZXJfdHVwZGVzY19pZCA9PSBjdXJy ZW50X3R1cGRlc2NfaWQpCisJCXJldHVybjsKKworCS8qCisJICogVHlwZSB2ZXJzaW9uIGhhcyBj aGFuZ2VkLiBOZWVkIHRvIGNoZWNrIGlmIGZpZWxkIHR5cGVzIGFjdHVhbGx5IGRpZmZlcgorCSAq IGFuZCBjb252ZXJ0IGlmIG5lY2Vzc2FyeS4KKwkgKi8KKwlvbGRfdHVwZGVzYyA9IGVyaC0+ZXJf dHVwZGVzYzsKKwluZXdfdHVwZGVzYyA9IHR5cGVudHJ5LT50dXBEZXNjOworCisJLyogU2FuaXR5 IGNoZWNrOiBtdXN0IGhhdmUgc2FtZSBudW1iZXIgb2YgYXR0cmlidXRlcyAqLworCWlmIChvbGRf dHVwZGVzYy0+bmF0dHMgIT0gbmV3X3R1cGRlc2MtPm5hdHRzKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAorCQkJCSBlcnJtc2coInJl Y29yZCB0eXBlIFwiJXNcIiBzdHJ1Y3R1cmUgaGFzIGNoYW5nZWQiLAorCQkJCQkJZm9ybWF0X3R5 cGVfYmUocmVjdHlwZWlkKSksCisJCQkJIGVycmRldGFpbCgiTnVtYmVyIG9mIGNvbHVtbnMgY2hh bmdlZCBmcm9tICVkIHRvICVkLiIsCisJCQkJCQkgICBvbGRfdHVwZGVzYy0+bmF0dHMsIG5ld190 dXBkZXNjLT5uYXR0cykpKTsKKworCW5hdHRzID0gb2xkX3R1cGRlc2MtPm5hdHRzOworCisJLyog RGVjb25zdHJ1Y3QgdGhlIG9sZCByZWNvcmQgdG8gYWNjZXNzIGZpZWxkIHZhbHVlcyAqLworCWRl Y29uc3RydWN0X2V4cGFuZGVkX3JlY29yZChlcmgpOworCW9sZF92YWx1ZXMgPSBlcmgtPmR2YWx1 ZXM7CisJb2xkX251bGxzID0gZXJoLT5kbnVsbHM7CisKKwkvKiBBbGxvY2F0ZSBhcnJheXMgZm9y IG5ldyB2YWx1ZXMgKi8KKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZ2V0X2V2YWxf bWNvbnRleHQoZXN0YXRlKSk7CisJbmV3X3ZhbHVlcyA9IChEYXR1bSAqKSBwYWxsb2MobmF0dHMg KiBzaXplb2YoRGF0dW0pKTsKKwluZXdfbnVsbHMgPSAoYm9vbCAqKSBwYWxsb2MobmF0dHMgKiBz aXplb2YoYm9vbCkpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCisJLyogQ29u dmVydCBlYWNoIGZpZWxkICovCisJZm9yIChpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJeworCQlG b3JtX3BnX2F0dHJpYnV0ZSBvbGRfYXR0ID0gVHVwbGVEZXNjQXR0cihvbGRfdHVwZGVzYywgaSk7 CisJCUZvcm1fcGdfYXR0cmlidXRlIG5ld19hdHQgPSBUdXBsZURlc2NBdHRyKG5ld190dXBkZXNj LCBpKTsKKworCQkvKiBTa2lwIGRyb3BwZWQgY29sdW1ucyAqLworCQlpZiAob2xkX2F0dC0+YXR0 aXNkcm9wcGVkIHx8IG5ld19hdHQtPmF0dGlzZHJvcHBlZCkKKwkJeworCQkJbmV3X3ZhbHVlc1tp XSA9IChEYXR1bSkgMDsKKwkJCW5ld19udWxsc1tpXSA9IHRydWU7CisJCQljb250aW51ZTsKKwkJ fQorCisJCS8qIElmIG51bGwsIHN0YXlzIG51bGwgKi8KKwkJaWYgKG9sZF9udWxsc1tpXSkKKwkJ eworCQkJbmV3X3ZhbHVlc1tpXSA9IChEYXR1bSkgMDsKKwkJCW5ld19udWxsc1tpXSA9IHRydWU7 CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIElmIHNhbWUgdHlwZSwgbm8gY29udmVyc2lvbiBu ZWVkZWQgKi8KKwkJaWYgKG9sZF9hdHQtPmF0dHR5cGlkID09IG5ld19hdHQtPmF0dHR5cGlkICYm CisJCQkob2xkX2F0dC0+YXR0dHlwbW9kID09IG5ld19hdHQtPmF0dHR5cG1vZCB8fAorCQkJIG5l d19hdHQtPmF0dHR5cG1vZCA9PSAtMSkpCisJCXsKKwkJCW5ld192YWx1ZXNbaV0gPSBvbGRfdmFs dWVzW2ldOworCQkJbmV3X251bGxzW2ldID0gZmFsc2U7CisJCQljb250aW51ZTsKKwkJfQorCisJ CS8qIERpZmZlcmVudCB0eXBlOiBjb252ZXJ0IHVzaW5nIGV4ZWNfY2FzdF92YWx1ZSAqLworCQlu ZWVkX2NvbnZlcnNpb24gPSB0cnVlOworCQluZXdfbnVsbHNbaV0gPSBmYWxzZTsKKwkJbmV3X3Zh bHVlc1tpXSA9IGV4ZWNfY2FzdF92YWx1ZShlc3RhdGUsCisJCQkJCQkJCQkJb2xkX3ZhbHVlc1tp XSwKKwkJCQkJCQkJCQkmbmV3X251bGxzW2ldLAorCQkJCQkJCQkJCW9sZF9hdHQtPmF0dHR5cGlk LAorCQkJCQkJCQkJCW9sZF9hdHQtPmF0dHR5cG1vZCwKKwkJCQkJCQkJCQluZXdfYXR0LT5hdHR0 eXBpZCwKKwkJCQkJCQkJCQluZXdfYXR0LT5hdHR0eXBtb2QpOworCX0KKworCS8qIElmIG5vIGFj dHVhbCBjb252ZXJzaW9uIHdhcyBuZWVkZWQsIHJldHVybiB3aXRob3V0IG1vZGlmeWluZyByZWMg Ki8KKwlpZiAoIW5lZWRfY29udmVyc2lvbikKKwkJcmV0dXJuOworCisJLyogQnVpbGQgbmV3IGV4 cGFuZGVkIHJlY29yZCB3aXRoIGNvbnZlcnRlZCB2YWx1ZXMgKi8KKwluZXdfZXJoID0gbWFrZV9l eHBhbmRlZF9yZWNvcmRfZnJvbV90eXBlaWQocmVjdHlwZWlkLCAtMSwKKwkJCQkJCQkJCQkJICAg Z2V0X2V2YWxfbWNvbnRleHQoZXN0YXRlKSk7CisJZXhwYW5kZWRfcmVjb3JkX3NldF9maWVsZHMo bmV3X2VyaCwgbmV3X3ZhbHVlcywgbmV3X251bGxzLCB0cnVlKTsKKworCS8qCisJICogQXNzaWdu IHRoZSBuZXcgcmVjb3JkIHRvIHJlYywgdHJhbnNmZXJyaW5nIGl0IHRvIGRhdHVtX2NvbnRleHQK KwkgKiBhbmQgZnJlZWluZyB0aGUgb2xkIHJlY29yZC4KKwkgKi8KKwlhc3NpZ25fcmVjb3JkX3Zh cihlc3RhdGUsIHJlYywgbmV3X2VyaCk7Cit9Ci0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --00000000000079c9ec064bc2dc4d--