From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18541 invoked by alias); 19 Jul 2019 12:23:54 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 18430 invoked by uid 89); 19 Jul 2019 12:23:53 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LOTSOFHASH,KAM_SHORT,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=5.4 X-HELO: EUR02-HE1-obe.outbound.protection.outlook.com Received: from mail-eopbgr10058.outbound.protection.outlook.com (HELO EUR02-HE1-obe.outbound.protection.outlook.com) (40.107.1.58) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 19 Jul 2019 12:23:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jfMAU46y1vh1HalhFRZ+puML/cbYA3MTUIBgYySswmE=; b=ept2vLXIBez7Av0L4+MdkwikJlvyIw+p3UpaqiqxsqLAWMZrM7IVo9oyN5r3wNLC7YrG91/UEeGU2yA7iV429sMJoVXn6vvaO5Y8TJs8psUf4oeIyvABEfGezgfJXMQPsQQQTBv/JGXkZMoc+mCi4KCxywXOxrh2wwTjS+BI6fM= Received: from AM4PR08CA0074.eurprd08.prod.outlook.com (2603:10a6:205:2::45) by VI1PR0801MB1856.eurprd08.prod.outlook.com (2603:10a6:800:57::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2094.14; Fri, 19 Jul 2019 12:23:44 +0000 Received: from DB5EUR03FT014.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::202) by AM4PR08CA0074.outlook.office365.com (2603:10a6:205:2::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2094.14 via Frontend Transport; Fri, 19 Jul 2019 12:23:44 +0000 Authentication-Results: spf=temperror (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; sourceware.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;sourceware.org; dmarc=temperror action=none header.from=arm.com; Received-SPF: TempError (protection.outlook.com: error in processing during lookup of arm.com: DNS Timeout) Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT014.mail.protection.outlook.com (10.152.20.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2052.18 via Frontend Transport; Fri, 19 Jul 2019 12:23:42 +0000 Received: ("Tessian outbound 350ce6c32571:v24"); Fri, 19 Jul 2019 12:23:42 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 6b9469e6b7e244e1 X-CR-MTA-TID: 64aa7808 Received: from e5e1bd589c27.2 (cr-mta-lb-1.cr-mta-net [104.47.6.51]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id 1AD8BA37-8008-4DA0-8C3B-F2593032B0F3.1; Fri, 19 Jul 2019 12:23:36 +0000 Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-ve1eur02lp2051.outbound.protection.outlook.com [104.47.6.51]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e5e1bd589c27.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384); Fri, 19 Jul 2019 12:23:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LNqf9M7DGpPDSSGwZlBjPbQzpcQSntJCGRS5XEzY1AYiP+PqTSPMFVVlZq/b5f08AtSSvg969OYMnSV/UVQSo1EyZaye+Ed40UNbAb+2/XdJQK6AozEEFBjM0HrGwJyRnZTsZBD28Suaf+uURCWjv24ZTskJny/ICZQNYvVEruzob3DYksNrU8lyJceIHuAqw6kzuU47yiAdnesMj+TPkdwh2ttL7+v9SNI++QrRD7+ANtsbjum/icDd+KcTu4iFUczA5sR7v3LPFtlj0adzonkD6i2L7hP3NZFfD3g1cfQyrPTJOAesIJBzTIg8m6FanRNJXY/K9Dj3ipYyZlM+Tg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jfMAU46y1vh1HalhFRZ+puML/cbYA3MTUIBgYySswmE=; b=gku0Q9S2JtLPg/uWX+ewHWm5RuqGF82Two+vfvbNabOdPpfuEY14zSpCoYOOh2zHwTU+CXgCPcVPn3PqSG93QZ/3auCRvAEvhJEGD4Cy3675GOgLw0YqMcPL2FMTbQG4KOcKJBJa40/tMVJsDoYlFjdmf2X6Z6qM2c5tpxVW/vg8/W1MegBFJjoj2ckpje6ZD2h01Yzpa0Cqk5CA5swcyGbjNJKB2Sw7IVke1bEwc4kSY/MikysgfPZUR9Kff7wT2beaNOFhEwRUKOP3lyu9AFknDzKFFSIcdmY5Qd/viXaL+HA5zkKoq94aODO97iKzT9OPdwh0RpwvzkT5NCJ5Ng== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=arm.com;dmarc=pass action=none header.from=arm.com;dkim=pass header.d=arm.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jfMAU46y1vh1HalhFRZ+puML/cbYA3MTUIBgYySswmE=; b=ept2vLXIBez7Av0L4+MdkwikJlvyIw+p3UpaqiqxsqLAWMZrM7IVo9oyN5r3wNLC7YrG91/UEeGU2yA7iV429sMJoVXn6vvaO5Y8TJs8psUf4oeIyvABEfGezgfJXMQPsQQQTBv/JGXkZMoc+mCi4KCxywXOxrh2wwTjS+BI6fM= Received: from DBBPR08MB4775.eurprd08.prod.outlook.com (20.179.45.148) by DBBPR08MB4299.eurprd08.prod.outlook.com (20.179.41.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2073.14; Fri, 19 Jul 2019 12:23:34 +0000 Received: from DBBPR08MB4775.eurprd08.prod.outlook.com ([fe80::596c:3223:fc3c:69f5]) by DBBPR08MB4775.eurprd08.prod.outlook.com ([fe80::596c:3223:fc3c:69f5%3]) with mapi id 15.20.2094.013; Fri, 19 Jul 2019 12:23:34 +0000 From: Srinath Parvathaneni To: "gdb-patches@sourceware.org" CC: nd , Simon Marchi , Alan Hayward , "tom@tromey.com" Subject: [PATCH v2][GDB][ARM]: gdb cannot step across CMSE secure entry function code. Date: Fri, 19 Jul 2019 12:23:00 -0000 Message-ID: Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Srinath.Parvathaneni@arm.com; X-Microsoft-Antispam-Untrusted: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(49563074)(7193020);SRVR:DBBPR08MB4299; X-MS-Exchange-PUrlCount: 4 x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:7219;OLM:7219; X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4636009)(396003)(366004)(39860400002)(346002)(376002)(136003)(189003)(199004)(54534003)(66066001)(71190400001)(53936002)(71200400001)(6506007)(52116002)(66476007)(386003)(4326008)(52536014)(25786009)(102836004)(66616009)(2351001)(7696005)(99936001)(478600001)(66446008)(64756008)(6916009)(6436002)(15974865002)(186003)(55016002)(44832011)(5660300002)(9686003)(5640700003)(6306002)(476003)(54906003)(74316002)(5024004)(305945005)(66946007)(8676002)(486006)(81156014)(8936002)(7736002)(14454004)(66556008)(966005)(99286004)(26005)(256004)(3846002)(2906002)(86362001)(316002)(14444005)(33656002)(68736007)(81166006)(2501003)(6116002)(2004002);DIR:OUT;SFP:1101;SCL:1;SRVR:DBBPR08MB4299;H:DBBPR08MB4775.eurprd08.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info-Original: YYpEs/98t6iuH6ICHWzl7FRY/vv2ER2qfu/Gb5eRdkQfqWcQu3OZjBsvfYby7fsKran2Ewo6bM71v4K4Oj32rcF5Q5sgmjzlIMyDYnIyamrXql/5cKipj32odyf7/WM4mULgSOUvBNlghDeOQHEs2p+zb64nXHHBBn7xbHyHbBc3/ul+gY/R3h6Y48gfQO6hmstIKezo+oHwbzTxEvFYbf777YqIN4u0LAk+e8vvswfWnDezlATEcIepxH4kWOUZuFYC795+5m48YkxG0yI1r18q9ae1H8vSwgkcYFKOTp1rtsH/cRfSUcLtWonIKc3BWexJPgvt1Bx3ePHeExEobEpvnoc0oXDWfo7RzjqI0bq/S92sWXBdL+M9KUpoQC7kbRYgaYe22qqPd5xX7hJ3F0/B/+70Ub/0aS3/cRF7Aws= Content-Type: multipart/mixed; boundary="_002_DBBPR08MB4775278C11A77742825FC97E9BCB0DBBPR08MB4775eurp_" MIME-Version: 1.0 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Srinath.Parvathaneni@arm.com; Return-Path: Srinath.Parvathaneni@arm.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT014.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: c883dcf3-a075-4288-44fc-08d70c43eb4c X-IsSubscribed: yes X-SW-Source: 2019-07/txt/msg00453.txt.bz2 --_002_DBBPR08MB4775278C11A77742825FC97E9BCB0DBBPR08MB4775eurp_ Content-Type: text/plain; charset="us-ascii" Content-ID: <36CC7291439B1C41B149B6C6E1CA97EA@eurprd08.prod.outlook.com> Content-Transfer-Encoding: quoted-printable Content-length: 9839 Hello Alan, Simon and Tom. Thank you very much for reviewing my first patch to GDB and providing me yo= ur feedback. https://sourceware.org/ml/gdb-patches/2019-07/msg00392.html I have incorporating all your review comments and sending a new patch here. Hello, GDB is not able to execute "step" command on function calls of Armv8-M cmse= secure entry functions. Everytime GNU linker come across definition of any cmse secure entry functi= on in object file(s), it creates two new instructions secure gateway (sg) and original branch des= tination (b.w), place those two instructions in ".gnu.sgstubs" section of executable. Any function calls to these cmse secure entry functions is re-directed thro= ugh secure gateway (sg) present in ".gnu.sgstubs" section. Example: Following is a function call to cmse secure entry function "foo": ... bl xxxx --->(a) ... xxxx: push {r7, lr} GNU linker on finding out "foo" is a cmse secure entry function, created sg= and b.w instructions and place them in ".gnu.sgstubs" section (marked by c). The "bl" instruction (marked by a) which is a call to cmse secure entry fun= ction is modified by GNU linker (as marked by b) and call flow is re-directly through secure gateway (sg) i= n ".gnu.sgstubs" section. ... bl yyyy ---> (b) ... section .gnu.sgstubs: ---> (c) yyyy yyyy: sg // secure gateway b.w xxxx <__acle_se_foo> // original_branch_dest ... 0000xxxx <__acle_se_foo> xxxx: push {r7, lr} ---> (d) On invoking GDB, when the control is at "b" and we pass "step" command, the= pc returns "yyyy" (sg address) which is a trampoline and which does not exist in source code.= So GDB jumps to next line without jumping to "__acle_se_foo" (marked by d). The above details are published on the Arm website [1], please refer to sec= tion 5.4 (Entry functions) and section 3.4.4 (C level development flow of secure code). [1] https://developer.arm.com/architectures/cpu-architecture/m-profile/docs= /ecm0359818/latest/armv8-m-security-extensions-requirements-on-development-= tools-engineering-specification This patch fixes above problem by returning target pc "xxxx" to GDB on exec= uting "step" command at "b", so that the control jumps to "__acle_se_foo" (marked by d). This patch is tested by debugging the CMSE executable using GDB on Aarch32 = box. Regression tested for armv7hl-redhat-linux-gnueabi and found no regressions. Ok for master? If ok, could someone commit this on my behalf, I don't have the commit rights. gdb/ChangeLog: 2019-07-19 Srinath Parvathaneni * gdb/arm-tdep.c (arm_skip_cmse_entry):New function. When gdb encounters a "step" command on cmse secure entry function (eg:func), this function return an address of "__acle_se_" to PC instead of secure gateaway (sg) address which is present in ".gnu.sgstubs" section. (arm_is_sgstubs_section):New function. To check the current section is ".gnu.sgstubs". (arm_skip_stub):Add call to arm_skip_cmse_entry function. * gdb/arm-tdep.h (arm_is_sgstubs_section):New function declaration. gdb/testsuite/ChangeLog: 2019-07-19 Srinath Parvathaneni * gdb.arch/arm-cmse-sgstubs.c: New test. * gdb.arch/arm-cmse-sgstubs.exp: New file. ############### Attachment also inlined for ease of reply ##########= ##### diff --git a/gdb/arm-tdep.h b/gdb/arm-tdep.h index 23dd40ea8beb1b00289a4cd4e65647399d351580..9482e765a7fc5bb58676096f6b8= 79eae2a7c858e 100644 --- a/gdb/arm-tdep.h +++ b/gdb/arm-tdep.h @@ -259,6 +259,7 @@ ULONGEST arm_get_next_pcs_read_memory_unsigned_integer = (CORE_ADDR memaddr, =20 CORE_ADDR arm_get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self, CORE_ADDR val); +bool arm_is_sgstubs_section (struct obj_section *); =20 int arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self); =20 diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index d244707210628ab045f677c0cbad3d8b0c6d6269..e3b7ab6f096eb91da067d772b87= 98ffd0737e3d6 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -8211,6 +8211,53 @@ arm_get_longjmp_target (struct frame_info *frame, CO= RE_ADDR *pc) *pc =3D extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order); return 1; } +/* A call to cmse secure entry function "foo" at "a" is modified by + GNU ld as "b". + a) bl xxxx + + + xxxx: + + b) bl yyyy <__acle_se_foo> + + section .gnu.sgstubs: + + yyyy: sg // secure gateway + b.w xxxx <__acle_se_foo> // original_branch_dest + + <__acle_se_foo> + xxxx: + + When the control at "b", the pc contains "yyyy" (sg address) which is a + trampoline and does not exist in source code. This function returns the + target pc "xxxx". For more details please refer to section 5.4 + (Entry functions) and section 3.4.4 (C level development flow of secure = code) + of "armv8-m-security-extensions-requirements-on-development-tools-engine= ering-specification" + document on www.developer.arm.com. */ + +static CORE_ADDR +arm_skip_cmse_entry (CORE_ADDR pc, const char *name, struct objfile *objfi= le) +{ + struct bound_minimal_symbol minsym; + int target_len =3D strlen (name) + strlen ("__acle_se_") + 1; + char *target_name =3D (char *) alloca (target_len); + xsnprintf (target_name, target_len, "%s%s", "__acle_se_",name); + minsym =3D lookup_minimal_symbol (target_name, NULL, objfile); + if (minsym.minsym !=3D nullptr) + return BMSYMBOL_VALUE_ADDRESS (minsym); + return 0; +} + +/* Return true when sec points to ".gnu.sgstubs" section. */ +bool +arm_is_sgstubs_section (struct obj_section *sec) +{ + if (sec !=3D nullptr && sec->the_bfd_section !=3D nullptr + && sec->the_bfd_section->name !=3D nullptr + && streq (sec->the_bfd_section->name,".gnu.sgstubs")) + return true; + return false; +} =20 /* Recognize GCC and GNU ld's trampolines. If we are in a trampoline, return the target PC. Otherwise return 0. */ @@ -8221,6 +8268,7 @@ arm_skip_stub (struct frame_info *frame, CORE_ADDR pc) const char *name; int namelen; CORE_ADDR start_addr; + struct obj_section *section; =20 /* Find the starting address and name of the function containing the PC.= */ if (find_pc_partial_function (pc, &name, &start_addr, NULL) =3D=3D 0) @@ -8290,6 +8338,10 @@ arm_skip_stub (struct frame_info *frame, CORE_ADDR p= c) return 0; } =20 + section =3D find_pc_section (pc); + /* checks whether address pc holds belows to ".gnu.sgstubs" section. */ + if (arm_is_sgstubs_section (section)) + return arm_skip_cmse_entry (pc, name, section->objfile); return 0; /* not a stub */ } =20 diff --git a/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.c b/gdb/testsuite/gdb.= arch/arm-cmse-sgstubs.c new file mode 100644 index 0000000000000000000000000000000000000000..7f3b40f20c67abfdd2410614e7e= e29ae77d37966 --- /dev/null +++ b/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.c @@ -0,0 +1,29 @@ +#include +extern void func(); +void __acle_se_func () +{ + printf("__acle_se_func\n"); +} + +/* The following code is written using asm so that the instructions in fun= ction + * "func" will be placed in .gnu.sgstubs section of the executable. */ +asm ("\t.section .gnu.sgstubs,\"ax\",%progbits\n" + "\t.global func\n" + "\t.type func, %function\n" + "func:\n" + "\tnop @sg\n" + "\tb __acle_se_func @b.w"); + +void fun1 () +{ + printf("In fun1\n"); +} + +int main (void) +{ + func(); + fun1(); + __acle_se_func(); + func(); + return 0; +} diff --git a/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.exp b/gdb/testsuite/gd= b.arch/arm-cmse-sgstubs.exp new file mode 100644 index 0000000000000000000000000000000000000000..3416e887d9ebe5ebc52336eff15= ba83a6d16df21 --- /dev/null +++ b/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.exp @@ -0,0 +1,60 @@ +# Copyright 2019 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# This file is part of the gdb testsuite. + +if { ![istarget "arm*-*-*"]} { + return 1 +} + +standard_testfile +if { [prepare_for_testing "failed to prepare" $testfile $srcfile ]} { + return -1 +} + +if ![runto_main] { + untested "could not run to main" + return -1 +} + +set test "branch to func from main" +gdb_test "si" "0x.*" "$test" + +set test "next instruction in func" +gdb_test "ni" "0x.*" "$test" + +set test "branch to __acle_se_func from func" +gdb_test "ni" "__acle_se_func ().*" "${test}" + +set test "next in __acle_se_func function" +gdb_test "next" "5 .*" "$test" + +set test "next in __acle_se_func function outputs __acle_se_func" +gdb_test "next" "__acle_se_func.*" "$test" + +set test "next in __acle_se_func function controls returns to main" +gdb_test "next" "main ().*" "$test" + +set test "next in main outputs In fun1" +gdb_test "next" "In fun1.*" "$test" + +set test "next in main outputs __acle_se_func" +gdb_test "next" "__acle_se_func.*" "$test" + +set test "control jumps to __acle_se_func from main via func" +gdb_test "step" "__acle_se_func ().*" "${test}" + +set test "next in __acle_se_func function via func" +gdb_test "next" "__acle_se_func.*" "$test" --_002_DBBPR08MB4775278C11A77742825FC97E9BCB0DBBPR08MB4775eurp_ Content-Type: text/plain; name="rb11415.patch" Content-Description: rb11415.patch Content-Disposition: attachment; filename="rb11415.patch"; size=6309; creation-date="Fri, 19 Jul 2019 12:23:34 GMT"; modification-date="Fri, 19 Jul 2019 12:23:34 GMT" Content-ID: Content-Transfer-Encoding: base64 Content-length: 8553 ZGlmZiAtLWdpdCBhL2dkYi9hcm0tdGRlcC5oIGIvZ2RiL2FybS10ZGVwLmgK aW5kZXggMjNkZDQwZWE4YmViMWIwMDI4OWE0Y2Q0ZTY1NjQ3Mzk5ZDM1MTU4 MC4uOTQ4MmU3NjVhN2ZjNWJiNTg2NzYwOTZmNmI4NzllYWUyYTdjODU4ZSAx MDA2NDQKLS0tIGEvZ2RiL2FybS10ZGVwLmgKKysrIGIvZ2RiL2FybS10ZGVw LmgKQEAgLTI1OSw2ICsyNTksNyBAQCBVTE9OR0VTVCBhcm1fZ2V0X25leHRf cGNzX3JlYWRfbWVtb3J5X3Vuc2lnbmVkX2ludGVnZXIgKENPUkVfQUREUiBt ZW1hZGRyLAogCiBDT1JFX0FERFIgYXJtX2dldF9uZXh0X3Bjc19hZGRyX2Jp dHNfcmVtb3ZlIChzdHJ1Y3QgYXJtX2dldF9uZXh0X3BjcyAqc2VsZiwKIAkJ CQkJICAgICBDT1JFX0FERFIgdmFsKTsKK2Jvb2wgYXJtX2lzX3Nnc3R1YnNf c2VjdGlvbiAoc3RydWN0IG9ial9zZWN0aW9uICopOwogCiBpbnQgYXJtX2dl dF9uZXh0X3Bjc19pc190aHVtYiAoc3RydWN0IGFybV9nZXRfbmV4dF9wY3Mg KnNlbGYpOwogCmRpZmYgLS1naXQgYS9nZGIvYXJtLXRkZXAuYyBiL2dkYi9h cm0tdGRlcC5jCmluZGV4IGQyNDQ3MDcyMTA2MjhhYjA0NWY2NzdjMGNiYWQz ZDhiMGM2ZDYyNjkuLmUzYjdhYjZmMDk2ZWI5MWRhMDY3ZDc3MmI4Nzk4ZmZk MDczN2UzZDYgMTAwNjQ0Ci0tLSBhL2dkYi9hcm0tdGRlcC5jCisrKyBiL2dk Yi9hcm0tdGRlcC5jCkBAIC04MjExLDYgKzgyMTEsNTMgQEAgYXJtX2dldF9s b25nam1wX3RhcmdldCAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCBDT1JF X0FERFIgKnBjKQogICAqcGMgPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIg KGJ1ZiwgSU5UX1JFR0lTVEVSX1NJWkUsIGJ5dGVfb3JkZXIpOwogICByZXR1 cm4gMTsKIH0KKy8qIEEgY2FsbCB0byBjbXNlIHNlY3VyZSBlbnRyeSBmdW5j dGlvbiAiZm9vIiBhdCAiYSIgaXMgbW9kaWZpZWQgYnkKKyAgICAgR05VIGxk IGFzICJiIi4KKyAgICAgYSkgYmwgeHh4eCA8Zm9vPgorCisgICAgIDxmb28+ CisgICAgIHh4eHg6CisKKyAgICAgYikgYmwgeXl5eSA8X19hY2xlX3NlX2Zv bz4KKworICAgICBzZWN0aW9uIC5nbnUuc2dzdHViczoKKyAgICAgPGZvbz4K KyAgICAgeXl5eTogc2cgICAvLyBzZWN1cmUgZ2F0ZXdheQorCSAgIGIudyB4 eHh4IDxfX2FjbGVfc2VfZm9vPiAgLy8gb3JpZ2luYWxfYnJhbmNoX2Rlc3QK KworICAgICA8X19hY2xlX3NlX2Zvbz4KKyAgICAgeHh4eDoKKworICBXaGVu IHRoZSBjb250cm9sIGF0ICJiIiwgdGhlIHBjIGNvbnRhaW5zICJ5eXl5IiAo c2cgYWRkcmVzcykgd2hpY2ggaXMgYQorICB0cmFtcG9saW5lIGFuZCBkb2Vz IG5vdCBleGlzdCBpbiBzb3VyY2UgY29kZS4gIFRoaXMgZnVuY3Rpb24gcmV0 dXJucyB0aGUKKyAgdGFyZ2V0IHBjICJ4eHh4Ii4gIEZvciBtb3JlIGRldGFp bHMgcGxlYXNlIHJlZmVyIHRvIHNlY3Rpb24gNS40CisgIChFbnRyeSBmdW5j dGlvbnMpIGFuZCBzZWN0aW9uIDMuNC40IChDIGxldmVsIGRldmVsb3BtZW50 IGZsb3cgb2Ygc2VjdXJlIGNvZGUpCisgIG9mICJhcm12OC1tLXNlY3VyaXR5 LWV4dGVuc2lvbnMtcmVxdWlyZW1lbnRzLW9uLWRldmVsb3BtZW50LXRvb2xz LWVuZ2luZWVyaW5nLXNwZWNpZmljYXRpb24iCisgIGRvY3VtZW50IG9uIHd3 dy5kZXZlbG9wZXIuYXJtLmNvbS4gICovCisKK3N0YXRpYyBDT1JFX0FERFIK K2FybV9za2lwX2Ntc2VfZW50cnkgKENPUkVfQUREUiBwYywgY29uc3QgY2hh ciAqbmFtZSwgc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCit7CisgIHN0cnVj dCBib3VuZF9taW5pbWFsX3N5bWJvbCBtaW5zeW07CisgIGludCB0YXJnZXRf bGVuID0gc3RybGVuIChuYW1lKSArIHN0cmxlbiAoIl9fYWNsZV9zZV8iKSAr IDE7CisgIGNoYXIgKnRhcmdldF9uYW1lICA9IChjaGFyICopIGFsbG9jYSAo dGFyZ2V0X2xlbik7CisgIHhzbnByaW50ZiAodGFyZ2V0X25hbWUsIHRhcmdl dF9sZW4sICIlcyVzIiwgIl9fYWNsZV9zZV8iLG5hbWUpOworICBtaW5zeW0g PSBsb29rdXBfbWluaW1hbF9zeW1ib2wgKHRhcmdldF9uYW1lLCBOVUxMLCBv YmpmaWxlKTsKKyAgaWYgKG1pbnN5bS5taW5zeW0gIT0gbnVsbHB0cikKKyAg ICByZXR1cm4gQk1TWU1CT0xfVkFMVUVfQUREUkVTUyAobWluc3ltKTsKKyAg cmV0dXJuIDA7Cit9CisKKy8qIFJldHVybiB0cnVlIHdoZW4gc2VjIHBvaW50 cyB0byAiLmdudS5zZ3N0dWJzIiBzZWN0aW9uLiAgKi8KK2Jvb2wKK2FybV9p c19zZ3N0dWJzX3NlY3Rpb24gKHN0cnVjdCBvYmpfc2VjdGlvbiAqc2VjKQor eworIGlmIChzZWMgIT0gbnVsbHB0ciAmJiBzZWMtPnRoZV9iZmRfc2VjdGlv biAhPSBudWxscHRyCisgICAgICYmIHNlYy0+dGhlX2JmZF9zZWN0aW9uLT5u YW1lICE9IG51bGxwdHIKKyAgICAgJiYgc3RyZXEgKHNlYy0+dGhlX2JmZF9z ZWN0aW9uLT5uYW1lLCIuZ251LnNnc3R1YnMiKSkKKyAgIHJldHVybiB0cnVl OworIHJldHVybiBmYWxzZTsKK30KIAogLyogUmVjb2duaXplIEdDQyBhbmQg R05VIGxkJ3MgdHJhbXBvbGluZXMuICBJZiB3ZSBhcmUgaW4gYSB0cmFtcG9s aW5lLAogICAgcmV0dXJuIHRoZSB0YXJnZXQgUEMuICBPdGhlcndpc2UgcmV0 dXJuIDAuICAqLwpAQCAtODIyMSw2ICs4MjY4LDcgQEAgYXJtX3NraXBfc3R1 YiAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCBDT1JFX0FERFIgcGMpCiAg IGNvbnN0IGNoYXIgKm5hbWU7CiAgIGludCBuYW1lbGVuOwogICBDT1JFX0FE RFIgc3RhcnRfYWRkcjsKKyAgc3RydWN0IG9ial9zZWN0aW9uICpzZWN0aW9u OwogCiAgIC8qIEZpbmQgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgYW5kIG5hbWUg b2YgdGhlIGZ1bmN0aW9uIGNvbnRhaW5pbmcgdGhlIFBDLiAgKi8KICAgaWYg KGZpbmRfcGNfcGFydGlhbF9mdW5jdGlvbiAocGMsICZuYW1lLCAmc3RhcnRf YWRkciwgTlVMTCkgPT0gMCkKQEAgLTgyOTAsNiArODMzOCwxMCBAQCBhcm1f c2tpcF9zdHViIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIENPUkVfQURE UiBwYykKIAlyZXR1cm4gMDsKICAgICB9CiAKKyAgc2VjdGlvbiA9IGZpbmRf cGNfc2VjdGlvbiAocGMpOworICAvKiBjaGVja3Mgd2hldGhlciBhZGRyZXNz IHBjIGhvbGRzIGJlbG93cyB0byAiLmdudS5zZ3N0dWJzIiBzZWN0aW9uLiAg Ki8KKyAgaWYgKGFybV9pc19zZ3N0dWJzX3NlY3Rpb24gKHNlY3Rpb24pKQor ICAgIHJldHVybiBhcm1fc2tpcF9jbXNlX2VudHJ5IChwYywgbmFtZSwgc2Vj dGlvbi0+b2JqZmlsZSk7CiAgIHJldHVybiAwOwkJCS8qIG5vdCBhIHN0dWIg Ki8KIH0KIApkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXJjaC9h cm0tY21zZS1zZ3N0dWJzLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5hcmNoL2Fy bS1jbXNlLXNnc3R1YnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjNi NDBmMjBjNjdhYmZkZDI0MTA2MTRlN2VlMjlhZTc3ZDM3OTY2Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXJjaC9hcm0tY21zZS1z Z3N0dWJzLmMKQEAgLTAsMCArMSwyOSBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+ CitleHRlcm4gdm9pZCBmdW5jKCk7Cit2b2lkIF9fYWNsZV9zZV9mdW5jICgp Cit7CisgIHByaW50ZigiX19hY2xlX3NlX2Z1bmNcbiIpOworfQorCisvKiBU aGUgZm9sbG93aW5nIGNvZGUgaXMgd3JpdHRlbiB1c2luZyBhc20gc28gdGhh dCB0aGUgaW5zdHJ1Y3Rpb25zIGluIGZ1bmN0aW9uCisgKiAiZnVuYyIgd2ls bCBiZSBwbGFjZWQgaW4gLmdudS5zZ3N0dWJzIHNlY3Rpb24gb2YgdGhlIGV4 ZWN1dGFibGUuICAqLworYXNtICgiXHQuc2VjdGlvbiAuZ251LnNnc3R1YnMs XCJheFwiLCVwcm9nYml0c1xuIgorICAgICAiXHQuZ2xvYmFsIGZ1bmNcbiIK KyAgICAgIlx0LnR5cGUgZnVuYywgJWZ1bmN0aW9uXG4iCisgICAgICJmdW5j OlxuIgorICAgICAiXHRub3AgQHNnXG4iCisgICAgICJcdGIgX19hY2xlX3Nl X2Z1bmMgQGIudyIpOworCit2b2lkIGZ1bjEgKCkKK3sKKyAgcHJpbnRmKCJJ biBmdW4xXG4iKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZ1bmMo KTsKKyAgZnVuMSgpOworICBfX2FjbGVfc2VfZnVuYygpOworICBmdW5jKCk7 CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9n ZGIuYXJjaC9hcm0tY21zZS1zZ3N0dWJzLmV4cCBiL2dkYi90ZXN0c3VpdGUv Z2RiLmFyY2gvYXJtLWNtc2Utc2dzdHVicy5leHAKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uMzQxNmU4ODdkOWViZTVlYmM1MjMzNmVmZjE1YmE4M2E2ZDE2 ZGYyMQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFy Y2gvYXJtLWNtc2Utc2dzdHVicy5leHAKQEAgLTAsMCArMSw2MCBAQAorIyBD b3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0 aGUgZ2RiIHRlc3RzdWl0ZS4KKworaWYgeyAhW2lzdGFyZ2V0ICJhcm0qLSot KiJdfSB7CisgICAgIHJldHVybiAxCit9CisKK3N0YW5kYXJkX3Rlc3RmaWxl CitpZiB7IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICJmYWlsZWQgdG8gcHJlcGFy ZSIgJHRlc3RmaWxlICRzcmNmaWxlIF19IHsKKyAgICByZXR1cm4gLTEKK30K KworaWYgIVtydW50b19tYWluXSB7CisgICB1bnRlc3RlZCAiY291bGQgbm90 IHJ1biB0byBtYWluIgorICAgcmV0dXJuIC0xCit9CisKK3NldCB0ZXN0ICJi cmFuY2ggdG8gZnVuYyBmcm9tIG1haW4iCitnZGJfdGVzdCAic2kiICIweC4q IiAiJHRlc3QiCisKK3NldCB0ZXN0ICJuZXh0IGluc3RydWN0aW9uIGluIGZ1 bmMiCitnZGJfdGVzdCAibmkiICIweC4qIiAiJHRlc3QiCisKK3NldCB0ZXN0 ICJicmFuY2ggdG8gX19hY2xlX3NlX2Z1bmMgZnJvbSBmdW5jIgorZ2RiX3Rl c3QgIm5pIiAiX19hY2xlX3NlX2Z1bmMgKCkuKiIgIiR7dGVzdH0iCisKK3Nl dCB0ZXN0ICJuZXh0IGluIF9fYWNsZV9zZV9mdW5jIGZ1bmN0aW9uIgorZ2Ri X3Rlc3QgIm5leHQiICI1CSAgLioiICIkdGVzdCIKKworc2V0IHRlc3QgIm5l eHQgaW4gX19hY2xlX3NlX2Z1bmMgZnVuY3Rpb24gb3V0cHV0cyBfX2FjbGVf c2VfZnVuYyIKK2dkYl90ZXN0ICJuZXh0IiAiX19hY2xlX3NlX2Z1bmMuKiIg IiR0ZXN0IgorCitzZXQgdGVzdCAibmV4dCBpbiBfX2FjbGVfc2VfZnVuYyBm dW5jdGlvbiBjb250cm9scyByZXR1cm5zIHRvIG1haW4iCitnZGJfdGVzdCAi bmV4dCIgIm1haW4gKCkuKiIgIiR0ZXN0IgorCitzZXQgdGVzdCAibmV4dCBp biBtYWluIG91dHB1dHMgSW4gZnVuMSIKK2dkYl90ZXN0ICJuZXh0IiAiSW4g ZnVuMS4qIiAiJHRlc3QiCisKK3NldCB0ZXN0ICJuZXh0IGluIG1haW4gb3V0 cHV0cyBfX2FjbGVfc2VfZnVuYyIKK2dkYl90ZXN0ICJuZXh0IiAiX19hY2xl X3NlX2Z1bmMuKiIgIiR0ZXN0IgorCitzZXQgdGVzdCAiY29udHJvbCBqdW1w cyB0byBfX2FjbGVfc2VfZnVuYyBmcm9tIG1haW4gdmlhIGZ1bmMiCitnZGJf dGVzdCAic3RlcCIgIl9fYWNsZV9zZV9mdW5jICgpLioiICIke3Rlc3R9Igor CitzZXQgdGVzdCAibmV4dCBpbiBfX2FjbGVfc2VfZnVuYyBmdW5jdGlvbiB2 aWEgZnVuYyIKK2dkYl90ZXN0ICJuZXh0IiAiX19hY2xlX3NlX2Z1bmMuKiIg IiR0ZXN0IgoK --_002_DBBPR08MB4775278C11A77742825FC97E9BCB0DBBPR08MB4775eurp_--