From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 58714 invoked by alias); 6 Sep 2019 14:46:42 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 58592 invoked by uid 89); 6 Sep 2019 14:46:41 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: FRA01-MR2-obe.outbound.protection.outlook.com Received: from mail-eopbgr90058.outbound.protection.outlook.com (HELO FRA01-MR2-obe.outbound.protection.outlook.com) (40.107.9.58) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 06 Sep 2019 14:46:37 +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=K7GdGFt+q2mDJbrZN3wrZBXc6TcbOpsLEr+HwGlBCbo=; b=KlC7tc98ytmJEmgFxWIPi8TW07+Xv120y/NAPD8/UzyoUFEFbP/bJpRvuuEc/RkSM0/zJOdYlYyJ3duhhP2PVjbxxv0hB7nqrb8/zFHIe7dpTUAAjJSC399YXb00gwvOcQ6joYAQtS22bUaaj32wVt4R8hYbRDdzGPnpNE7BkpY= Received: from HE1PR0802CA0003.eurprd08.prod.outlook.com (2603:10a6:3:bd::13) by PR2PR08MB4697.eurprd08.prod.outlook.com (2603:10a6:101:18::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.19; Fri, 6 Sep 2019 14:46:32 +0000 Received: from DB5EUR03FT003.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::205) by HE1PR0802CA0003.outlook.office365.com (2603:10a6:3:bd::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.14 via Frontend Transport; Fri, 6 Sep 2019 14:46:32 +0000 Authentication-Results: spf=temperror (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; gcc.gnu.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;gcc.gnu.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 DB5EUR03FT003.mail.protection.outlook.com (10.152.20.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.14 via Frontend Transport; Fri, 6 Sep 2019 14:46:31 +0000 Received: ("Tessian outbound f83cc93ed55d:v27"); Fri, 06 Sep 2019 14:46:22 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: d4d6e73d86cfba8c X-CR-MTA-TID: 64aa7808 Received: from 9a4f1c8dcbbc.1 (cr-mta-lb-1.cr-mta-net [104.47.9.57]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id BF52379F-134A-4701-9C22-28270C210D82.1; Fri, 06 Sep 2019 14:46:16 +0000 Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-ve1eur03lp2057.outbound.protection.outlook.com [104.47.9.57]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 9a4f1c8dcbbc.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384); Fri, 06 Sep 2019 14:46:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ebk1aJfrAoHuVEuZ3eZH6w2OU6+NoV5Vl2X6SEBtqM8W4KGr+JIH+Itb+1nmY6wm+TkkJCXWoMsztjBqllJpv/tWF3cQrCZu2YFUuwNp/MqoS/JrHN2fh2RuzCH4hlNlJc8wCYpwtUC5vRs9vddo7N4jTgOG1qirznD7q3iES1qhZPb7WGcGiNBxjAzmpZqv9H9CGzR7MkhvBAyxKtIEtOMIMvW1cUDlzjYRxbg3+Yf0KQCZ8HkENGwpEYMdnri5xxphiasuMTANtiMgLNlEMxvq6u6F8Djk22HISr6kCNMhIde1Ym/bMBTn/r/nDdgH4jphKDQk2p3MocBjvgaPiA== 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=K7GdGFt+q2mDJbrZN3wrZBXc6TcbOpsLEr+HwGlBCbo=; b=WpM/DPFcPQGBEjWtKZ/PahQvre88dBqSuCtxTWSDANLXG7mNAKjMDDTYUEAXsHl+ZiU1i/I9lCsEFllkwxrpvy16jK4CZ9LJmD2GwTy2Jg4mB62/iKU115NG3F/gfjbJXNCBlKJbdbj277tShdkjdaqkL029JGRdOYy35ybYf2DbE60XeBxlGiY0fB9S22ttO5o18iuStWuViJ67xmWzzSuMC5HMC/Em+8IQccfbvk6Y1Axlv0bFvh1YcDYZcEk45h8/r5FMIAFMwRyNgPKyHHrSYEl7zRwGqk34gjb4UJxQ0o5RmQ5rHw/0sixY28Ane5YQaDaK/mM4cA/NwW9I/g== 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=K7GdGFt+q2mDJbrZN3wrZBXc6TcbOpsLEr+HwGlBCbo=; b=KlC7tc98ytmJEmgFxWIPi8TW07+Xv120y/NAPD8/UzyoUFEFbP/bJpRvuuEc/RkSM0/zJOdYlYyJ3duhhP2PVjbxxv0hB7nqrb8/zFHIe7dpTUAAjJSC399YXb00gwvOcQ6joYAQtS22bUaaj32wVt4R8hYbRDdzGPnpNE7BkpY= Received: from VI1PR08MB5471.eurprd08.prod.outlook.com (52.133.246.83) by VI1PR08MB3488.eurprd08.prod.outlook.com (20.177.59.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.14; Fri, 6 Sep 2019 14:46:15 +0000 Received: from VI1PR08MB5471.eurprd08.prod.outlook.com ([fe80::206a:65bd:e6a9:536b]) by VI1PR08MB5471.eurprd08.prod.outlook.com ([fe80::206a:65bd:e6a9:536b%2]) with mapi id 15.20.2241.018; Fri, 6 Sep 2019 14:46:15 +0000 From: Matthew Malcomson To: "gcc-patches@gcc.gnu.org" CC: "mliska@suse.cz" , "dodji@redhat.com" , nd , "kcc@google.com" , "jakub@redhat.com" , "dvyukov@google.com" Subject: [RFC][PATCH 8/X][libsanitizer] Ensure HWASAN required alignment for stack variables Date: Fri, 06 Sep 2019 14:46:00 -0000 Message-ID: References: <156778058239.16148.17480879484406897649.scripted-patch-series@arm.com> In-Reply-To: <156778058239.16148.17480879484406897649.scripted-patch-series@arm.com> Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Matthew.Malcomson@arm.com; X-Microsoft-Antispam-Untrusted: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(4618075)(2017052603328)(49563074)(7193020);SRVR:VI1PR08MB3488; x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:8273;OLM:8273; X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4636009)(39860400002)(396003)(346002)(376002)(136003)(366004)(54534003)(189003)(199004)(3846002)(6436002)(54906003)(53936002)(52536014)(6916009)(6116002)(5660300002)(71200400001)(8936002)(71190400001)(14454004)(14444005)(81166006)(2351001)(81156014)(256004)(446003)(8676002)(5640700003)(52116002)(5024004)(66446008)(44832011)(25786009)(9686003)(2501003)(86362001)(186003)(305945005)(486006)(476003)(6506007)(102836004)(11346002)(26005)(7696005)(74316002)(99286004)(7736002)(386003)(33656002)(316002)(55016002)(2906002)(66556008)(99936001)(478600001)(4326008)(76176011)(66946007)(64756008)(66616009)(66476007)(66066001);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR08MB3488;H:VI1PR08MB5471.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: elYXRUaRpwUpEd3Z/wABnTUkAgnug5DU4Guv3KxazN/f+raHV1V5ORBLMJdRTsWNX2VWjbr/yA/AorkS1U7X2ydfsl4SleJ/G56ocHW+dQwdGrBmVr6zDbqDYbAV8DDL12Fss2KDqpi+jPDhBOAcm5DXSHB32BdMCMdVIfzKbvzX0vwtkQ8lqsKEgXqI79PK6pq4XwpcBFNQ5y4PA/n63CPRo5OxQuNshXi5D0A9RhRC+42pahQWyhC6VTff1rTjrEYA2L4XH33TXiBMoy6RHidB8B2GTr3eyKF8obst5mYDvmEqAiYgKvcpeU0zSk147qeAM3aAgHx6nkRgOf7jP8SVou8RmJ9sG4KA0kioFBXifVsANnzgZvR+ebzHFy81Neewaibf6r3q34GE0rK82qdZKjDHPuXBAgQciTImT3I= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_VI1PR08MB547152251A94D540887D4D84E0BA0VI1PR08MB5471eurp_" MIME-Version: 1.0 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Matthew.Malcomson@arm.com; Return-Path: Matthew.Malcomson@arm.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT003.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: ddb64606-3d4e-4bfe-5666-08d732d8f791 X-IsSubscribed: yes X-SW-Source: 2019-09/txt/msg00395.txt.bz2 --_002_VI1PR08MB547152251A94D540887D4D84E0BA0VI1PR08MB5471eurp_ Content-Type: text/plain; charset="us-ascii" Content-ID: <2EF969A584B9DC4D937A55F5A9E5D2A9@eurprd08.prod.outlook.com> Content-Transfer-Encoding: quoted-printable Content-length: 6522 When colouring shadow memory, we need to ensure that each tag granule is only used by one variable at a time. This is done by ensuring that ecah coloured variable is aligned to the tag granule representation size and also ensure that the end of each variable as an alignment boundary between the end and the start of any other data stored on the stack. This patch ensures this by adding alignment requirements in `align_local_variable` and forcing all stack variable allocation to be deferred to allow `expand_stack_vars` to ensure the stack pointer is aligned before allocating any variable for the current frame. This patch also adds some macros defining how the HWASAN shadow memory is stored and how a tag is stored in a pointer. gcc/ChangeLog: 2019-09-06 Matthew Malcomson * asan.h (HWASAN_TAG_SIZE): New macro. (HWASAN_TAG_GRANULE_SIZE):New macro. (HWASAN_SHIFT):New macro. (HWASAN_SHIFT_RTX):New macro. (HWASAN_STACK_BACKGROUND):New macro. * cfgexpand.c (align_local_variable): Ensure alignment. (expand_stack_vars): Ensure alignment. (defer_stack_allocation): Ensure all variables are deferred so they can be handled by `expand_stack_vars`. ############### Attachment also inlined for ease of reply ##########= ##### diff --git a/gcc/asan.h b/gcc/asan.h index 66c11139b5ccbe307850d0be57e86f96445dd18d..d78f6b821c7d1e859cc53f124e0= 71eac27a5e9b8 100644 --- a/gcc/asan.h +++ b/gcc/asan.h @@ -75,6 +75,41 @@ extern hash_set *asan_used_labels; =20 #define ASAN_USE_AFTER_SCOPE_ATTRIBUTE "use after scope memory" =20 +/* NOTE: The macros below are hard-coded to these values in libhwasan, and + hence can't be changed independently here. */ +/* How many bits are used to store a tag in a pointer. + For aarch64 MTE we have 4 bits per colour. + AArch64 has a Top-Byte-Ignore feature that allows the use of the top by= te of + pointers for storing information, HWASAN can use that entire top byte if + required. + If changing this value, be careful of the predicates/constraints on the + addtag4 patterns in the backend. */ +#define HWASAN_TAG_SIZE 4 +/* Tag Granule of HWASAN shadow stack. + This is the size in real memory that each byte in the shadow memory ref= ers + to. I.e. if a variable is X bytes long in memory then it's colour in s= hadow + memory will span X / HWASAN_TAG_GRANULE_SIZE bytes. + On top of this, most variables will need to be aligned to this amount s= ince + two variables that are neighbours in memory and share a tag granule wou= ld + need to share the same colour (as the shared tag granule can only store= one + colour). */ +#define HWASAN_TAG_GRANULE_SIZE (1ULL << HWASAN_TAG_SIZE) +/* How many bits to shift in order to access the tag bits. + This approach assumes that the tag is stored in the top N bits of a poi= nter, + and hence that shifting a known amount will leave just the tag bits. */ +#define HWASAN_SHIFT 56 +#define HWASAN_SHIFT_RTX const_int_rtx[MAX_SAVED_CONST_INT + HWASAN_SHIFT] +/* Define the tag for the stack background. + NOTE: Having a background colour of zero is hard-coded in the runtime + library, so we can't really change this. + This defines what colour the stack pointer will be and hence what colou= r all + uncoloured parts of the stack are (e.g. spilled registers). + It also provides a tag for stack allocation to avoid, since an object s= tored + on the stack will want to have a different colour to the background sta= ck to + ensure things like the return address etc can't be affected by accesses + through pointer to a user-object. */ +#define HWASAN_STACK_BACKGROUND 0 + /* Various flags for Asan builtins. */ enum asan_check_flags { diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 7722dcd4004e270551c8bcd4403e53a78ebfdff0..c5585d83c6e155856e7a4278e21= c35ee5675bbdd 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -372,7 +372,14 @@ align_local_variable (tree decl) align =3D LOCAL_DECL_ALIGNMENT (decl); SET_DECL_ALIGN (decl, align); } - return align / BITS_PER_UNIT; + + unsigned int ret_align =3D align / BITS_PER_UNIT; + + if (memory_tagging_p ()) + ret_align =3D ret_align > HWASAN_TAG_GRANULE_SIZE + ? ret_align + : HWASAN_TAG_GRANULE_SIZE; + return ret_align; } =20 /* Align given offset BASE with ALIGN. Truncate up if ALIGN_UP is true, @@ -1117,6 +1124,29 @@ expand_stack_vars (bool (*pred) (size_t), struct sta= ck_vars_data *data) alignb =3D stack_vars[i].alignb; if (alignb * BITS_PER_UNIT <=3D MAX_SUPPORTED_STACK_ALIGNMENT) { + if (memory_tagging_p ()) + { + /* Allocate zero bytes to take advantage of the + alloc_stack_frame_space logic of ensuring the stack is aligned + despite having poly_int64's to deal with. + + There must be no tag granule "shared" between different + objects. This means that no HWASAN_TAG_GRANULE_SIZE byte + chunk can have more than one object in it. + + We ensure this by forcing the end of the last bit of data to + be aligned to HWASAN_TAG_GRANULE_SIZE bytes here, and setting + the start of each variable to be aligned to + HWASAN_TAG_GRANULE_SIZE bytes in `align_local_variable`. + + We can't align just one of the start or end, since there are + untagged things stored on the stack that we have no control on + the alignment (e.g. function parameters which must conform to + ABI requirements) and these can't share a tag granule with a + tagged variable. */ + gcc_assert (stack_vars[i].alignb >=3D HWASAN_TAG_GRANULE_SIZE); + alloc_stack_frame_space (0, HWASAN_TAG_GRANULE_SIZE); + } base =3D virtual_stack_vars_rtx; /* ASAN description strings don't yet have a syntax for expressing polynomial offsets. */ @@ -1545,8 +1575,11 @@ defer_stack_allocation (tree var, bool toplevel) =20 /* If stack protection is enabled, *all* stack variables must be deferre= d, so that we can re-order the strings to the top of the frame. - Similarly for Address Sanitizer. */ - if (flag_stack_protect || asan_sanitize_stack_p ()) + Similarly for Address Sanitizer. + When memory tagging we defer all stack variables so we can handle the= m in + one place (handle here meaning ensure aligned and record information = on + its position on the stack). */ + if (flag_stack_protect || asan_sanitize_stack_p () || memory_tagging_p (= )) return true; =20 unsigned int align =3D TREE_CODE (var) =3D=3D SSA_NAME --_002_VI1PR08MB547152251A94D540887D4D84E0BA0VI1PR08MB5471eurp_ Content-Type: text/plain; name="hwasan-implementation07.patch" Content-Description: hwasan-implementation07.patch Content-Disposition: attachment; filename="hwasan-implementation07.patch"; size=5176; creation-date="Fri, 06 Sep 2019 14:46:14 GMT"; modification-date="Fri, 06 Sep 2019 14:46:14 GMT" Content-ID: <8586BD9C525E4D4CB6508C0B1DEC2C4F@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 Content-length: 7020 ZGlmZiAtLWdpdCBhL2djYy9hc2FuLmggYi9nY2MvYXNhbi5oCmluZGV4IDY2 YzExMTM5YjVjY2JlMzA3ODUwZDBiZTU3ZTg2Zjk2NDQ1ZGQxOGQuLmQ3OGY2 YjgyMWM3ZDFlODU5Y2M1M2YxMjRlMDcxZWFjMjdhNWU5YjggMTAwNjQ0Ci0t LSBhL2djYy9hc2FuLmgKKysrIGIvZ2NjL2FzYW4uaApAQCAtNzUsNiArNzUs NDEgQEAgZXh0ZXJuIGhhc2hfc2V0IDx0cmVlPiAqYXNhbl91c2VkX2xhYmVs czsKIAogI2RlZmluZSBBU0FOX1VTRV9BRlRFUl9TQ09QRV9BVFRSSUJVVEUJ InVzZSBhZnRlciBzY29wZSBtZW1vcnkiCiAKKy8qIE5PVEU6IFRoZSBtYWNy b3MgYmVsb3cgYXJlIGhhcmQtY29kZWQgdG8gdGhlc2UgdmFsdWVzIGluIGxp Ymh3YXNhbiwgYW5kCisgICBoZW5jZSBjYW4ndCBiZSBjaGFuZ2VkIGluZGVw ZW5kZW50bHkgaGVyZS4gICovCisvKiBIb3cgbWFueSBiaXRzIGFyZSB1c2Vk IHRvIHN0b3JlIGEgdGFnIGluIGEgcG9pbnRlci4KKyAgIEZvciBhYXJjaDY0 IE1URSB3ZSBoYXZlIDQgYml0cyBwZXIgY29sb3VyLgorICAgQUFyY2g2NCBo YXMgYSBUb3AtQnl0ZS1JZ25vcmUgZmVhdHVyZSB0aGF0IGFsbG93cyB0aGUg dXNlIG9mIHRoZSB0b3AgYnl0ZSBvZgorICAgcG9pbnRlcnMgZm9yIHN0b3Jp bmcgaW5mb3JtYXRpb24sIEhXQVNBTiBjYW4gdXNlIHRoYXQgZW50aXJlIHRv cCBieXRlIGlmCisgICByZXF1aXJlZC4KKyAgIElmIGNoYW5naW5nIHRoaXMg dmFsdWUsIGJlIGNhcmVmdWwgb2YgdGhlIHByZWRpY2F0ZXMvY29uc3RyYWlu dHMgb24gdGhlCisgICBhZGR0YWc8bW9kZT40IHBhdHRlcm5zIGluIHRoZSBi YWNrZW5kLiAgKi8KKyNkZWZpbmUgSFdBU0FOX1RBR19TSVpFIDQKKy8qIFRh ZyBHcmFudWxlIG9mIEhXQVNBTiBzaGFkb3cgc3RhY2suCisgICBUaGlzIGlz IHRoZSBzaXplIGluIHJlYWwgbWVtb3J5IHRoYXQgZWFjaCBieXRlIGluIHRo ZSBzaGFkb3cgbWVtb3J5IHJlZmVycworICAgdG8uICBJLmUuIGlmIGEgdmFy aWFibGUgaXMgWCBieXRlcyBsb25nIGluIG1lbW9yeSB0aGVuIGl0J3MgY29s b3VyIGluIHNoYWRvdworICAgbWVtb3J5IHdpbGwgc3BhbiBYIC8gSFdBU0FO X1RBR19HUkFOVUxFX1NJWkUgYnl0ZXMuCisgICBPbiB0b3Agb2YgdGhpcywg bW9zdCB2YXJpYWJsZXMgd2lsbCBuZWVkIHRvIGJlIGFsaWduZWQgdG8gdGhp cyBhbW91bnQgc2luY2UKKyAgIHR3byB2YXJpYWJsZXMgdGhhdCBhcmUgbmVp Z2hib3VycyBpbiBtZW1vcnkgYW5kIHNoYXJlIGEgdGFnIGdyYW51bGUgd291 bGQKKyAgIG5lZWQgdG8gc2hhcmUgdGhlIHNhbWUgY29sb3VyIChhcyB0aGUg c2hhcmVkIHRhZyBncmFudWxlIGNhbiBvbmx5IHN0b3JlIG9uZQorICAgY29s b3VyKS4gICovCisjZGVmaW5lIEhXQVNBTl9UQUdfR1JBTlVMRV9TSVpFICgx VUxMIDw8IEhXQVNBTl9UQUdfU0laRSkKKy8qIEhvdyBtYW55IGJpdHMgdG8g c2hpZnQgaW4gb3JkZXIgdG8gYWNjZXNzIHRoZSB0YWcgYml0cy4KKyAgIFRo aXMgYXBwcm9hY2ggYXNzdW1lcyB0aGF0IHRoZSB0YWcgaXMgc3RvcmVkIGlu IHRoZSB0b3AgTiBiaXRzIG9mIGEgcG9pbnRlciwKKyAgIGFuZCBoZW5jZSB0 aGF0IHNoaWZ0aW5nIGEga25vd24gYW1vdW50IHdpbGwgbGVhdmUganVzdCB0 aGUgdGFnIGJpdHMuICAqLworI2RlZmluZSBIV0FTQU5fU0hJRlQgNTYKKyNk ZWZpbmUgSFdBU0FOX1NISUZUX1JUWCBjb25zdF9pbnRfcnR4W01BWF9TQVZF RF9DT05TVF9JTlQgKyBIV0FTQU5fU0hJRlRdCisvKiBEZWZpbmUgdGhlIHRh ZyBmb3IgdGhlIHN0YWNrIGJhY2tncm91bmQuCisgICBOT1RFOiBIYXZpbmcg YSBiYWNrZ3JvdW5kIGNvbG91ciBvZiB6ZXJvIGlzIGhhcmQtY29kZWQgaW4g dGhlIHJ1bnRpbWUKKyAgIGxpYnJhcnksIHNvIHdlIGNhbid0IHJlYWxseSBj aGFuZ2UgdGhpcy4KKyAgIFRoaXMgZGVmaW5lcyB3aGF0IGNvbG91ciB0aGUg c3RhY2sgcG9pbnRlciB3aWxsIGJlIGFuZCBoZW5jZSB3aGF0IGNvbG91ciBh bGwKKyAgIHVuY29sb3VyZWQgcGFydHMgb2YgdGhlIHN0YWNrIGFyZSAoZS5n LiBzcGlsbGVkIHJlZ2lzdGVycykuCisgICBJdCBhbHNvIHByb3ZpZGVzIGEg dGFnIGZvciBzdGFjayBhbGxvY2F0aW9uIHRvIGF2b2lkLCBzaW5jZSBhbiBv YmplY3Qgc3RvcmVkCisgICBvbiB0aGUgc3RhY2sgd2lsbCB3YW50IHRvIGhh dmUgYSBkaWZmZXJlbnQgY29sb3VyIHRvIHRoZSBiYWNrZ3JvdW5kIHN0YWNr IHRvCisgICBlbnN1cmUgdGhpbmdzIGxpa2UgdGhlIHJldHVybiBhZGRyZXNz IGV0YyBjYW4ndCBiZSBhZmZlY3RlZCBieSBhY2Nlc3NlcworICAgdGhyb3Vn aCBwb2ludGVyIHRvIGEgdXNlci1vYmplY3QuICAqLworI2RlZmluZSBIV0FT QU5fU1RBQ0tfQkFDS0dST1VORCAwCisKIC8qIFZhcmlvdXMgZmxhZ3MgZm9y IEFzYW4gYnVpbHRpbnMuICAqLwogZW51bSBhc2FuX2NoZWNrX2ZsYWdzCiB7 CmRpZmYgLS1naXQgYS9nY2MvY2ZnZXhwYW5kLmMgYi9nY2MvY2ZnZXhwYW5k LmMKaW5kZXggNzcyMmRjZDQwMDRlMjcwNTUxYzhiY2Q0NDAzZTUzYTc4ZWJm ZGZmMC4uYzU1ODVkODNjNmUxNTU4NTZlN2E0Mjc4ZTIxYzM1ZWU1Njc1YmJk ZCAxMDA2NDQKLS0tIGEvZ2NjL2NmZ2V4cGFuZC5jCisrKyBiL2djYy9jZmdl eHBhbmQuYwpAQCAtMzcyLDcgKzM3MiwxNCBAQCBhbGlnbl9sb2NhbF92YXJp YWJsZSAodHJlZSBkZWNsKQogICAgICAgYWxpZ24gPSBMT0NBTF9ERUNMX0FM SUdOTUVOVCAoZGVjbCk7CiAgICAgICBTRVRfREVDTF9BTElHTiAoZGVjbCwg YWxpZ24pOwogICAgIH0KLSAgcmV0dXJuIGFsaWduIC8gQklUU19QRVJfVU5J VDsKKworICB1bnNpZ25lZCBpbnQgcmV0X2FsaWduID0gYWxpZ24gLyBCSVRT X1BFUl9VTklUOworCisgIGlmIChtZW1vcnlfdGFnZ2luZ19wICgpKQorICAg IHJldF9hbGlnbiA9IHJldF9hbGlnbiA+IEhXQVNBTl9UQUdfR1JBTlVMRV9T SVpFCisgICAgICA/IHJldF9hbGlnbgorICAgICAgOiBIV0FTQU5fVEFHX0dS QU5VTEVfU0laRTsKKyAgcmV0dXJuIHJldF9hbGlnbjsKIH0KIAogLyogQWxp Z24gZ2l2ZW4gb2Zmc2V0IEJBU0Ugd2l0aCBBTElHTi4gIFRydW5jYXRlIHVw IGlmIEFMSUdOX1VQIGlzIHRydWUsCkBAIC0xMTE3LDYgKzExMjQsMjkgQEAg ZXhwYW5kX3N0YWNrX3ZhcnMgKGJvb2wgKCpwcmVkKSAoc2l6ZV90KSwgc3Ry dWN0IHN0YWNrX3ZhcnNfZGF0YSAqZGF0YSkKICAgICAgIGFsaWduYiA9IHN0 YWNrX3ZhcnNbaV0uYWxpZ25iOwogICAgICAgaWYgKGFsaWduYiAqIEJJVFNf UEVSX1VOSVQgPD0gTUFYX1NVUFBPUlRFRF9TVEFDS19BTElHTk1FTlQpCiAJ eworCSAgaWYgKG1lbW9yeV90YWdnaW5nX3AgKCkpCisJICAgIHsKKwkgICAg ICAvKiBBbGxvY2F0ZSB6ZXJvIGJ5dGVzIHRvIHRha2UgYWR2YW50YWdlIG9m IHRoZQorCQkgYWxsb2Nfc3RhY2tfZnJhbWVfc3BhY2UgbG9naWMgb2YgZW5z dXJpbmcgdGhlIHN0YWNrIGlzIGFsaWduZWQKKwkJIGRlc3BpdGUgaGF2aW5n IHBvbHlfaW50NjQncyB0byBkZWFsIHdpdGguCisKKwkJIFRoZXJlIG11c3Qg YmUgbm8gdGFnIGdyYW51bGUgInNoYXJlZCIgYmV0d2VlbiBkaWZmZXJlbnQK KwkJIG9iamVjdHMuICBUaGlzIG1lYW5zIHRoYXQgbm8gSFdBU0FOX1RBR19H UkFOVUxFX1NJWkUgYnl0ZQorCQkgY2h1bmsgY2FuIGhhdmUgbW9yZSB0aGFu IG9uZSBvYmplY3QgaW4gaXQuCisKKwkJIFdlIGVuc3VyZSB0aGlzIGJ5IGZv cmNpbmcgdGhlIGVuZCBvZiB0aGUgbGFzdCBiaXQgb2YgZGF0YSB0bworCQkg YmUgYWxpZ25lZCB0byBIV0FTQU5fVEFHX0dSQU5VTEVfU0laRSBieXRlcyBo ZXJlLCBhbmQgc2V0dGluZworCQkgdGhlIHN0YXJ0IG9mIGVhY2ggdmFyaWFi bGUgdG8gYmUgYWxpZ25lZCB0bworCQkgSFdBU0FOX1RBR19HUkFOVUxFX1NJ WkUgYnl0ZXMgaW4gYGFsaWduX2xvY2FsX3ZhcmlhYmxlYC4KKworCQkgV2Ug Y2FuJ3QgYWxpZ24ganVzdCBvbmUgb2YgdGhlIHN0YXJ0IG9yIGVuZCwgc2lu Y2UgdGhlcmUgYXJlCisJCSB1bnRhZ2dlZCB0aGluZ3Mgc3RvcmVkIG9uIHRo ZSBzdGFjayB0aGF0IHdlIGhhdmUgbm8gY29udHJvbCBvbgorCQkgdGhlIGFs aWdubWVudCAoZS5nLiBmdW5jdGlvbiBwYXJhbWV0ZXJzIHdoaWNoIG11c3Qg Y29uZm9ybSB0bworCQkgQUJJIHJlcXVpcmVtZW50cykgYW5kIHRoZXNlIGNh bid0IHNoYXJlIGEgdGFnIGdyYW51bGUgd2l0aCBhCisJCSB0YWdnZWQgdmFy aWFibGUuICAqLworCSAgICAgIGdjY19hc3NlcnQgKHN0YWNrX3ZhcnNbaV0u YWxpZ25iID49IEhXQVNBTl9UQUdfR1JBTlVMRV9TSVpFKTsKKwkgICAgICBh bGxvY19zdGFja19mcmFtZV9zcGFjZSAoMCwgSFdBU0FOX1RBR19HUkFOVUxF X1NJWkUpOworCSAgICB9CiAJICBiYXNlID0gdmlydHVhbF9zdGFja192YXJz X3J0eDsKIAkgIC8qIEFTQU4gZGVzY3JpcHRpb24gc3RyaW5ncyBkb24ndCB5 ZXQgaGF2ZSBhIHN5bnRheCBmb3IgZXhwcmVzc2luZwogCSAgICAgcG9seW5v bWlhbCBvZmZzZXRzLiAgKi8KQEAgLTE1NDUsOCArMTU3NSwxMSBAQCBkZWZl cl9zdGFja19hbGxvY2F0aW9uICh0cmVlIHZhciwgYm9vbCB0b3BsZXZlbCkK IAogICAvKiBJZiBzdGFjayBwcm90ZWN0aW9uIGlzIGVuYWJsZWQsICphbGwq IHN0YWNrIHZhcmlhYmxlcyBtdXN0IGJlIGRlZmVycmVkLAogICAgICBzbyB0 aGF0IHdlIGNhbiByZS1vcmRlciB0aGUgc3RyaW5ncyB0byB0aGUgdG9wIG9m IHRoZSBmcmFtZS4KLSAgICAgU2ltaWxhcmx5IGZvciBBZGRyZXNzIFNhbml0 aXplci4gICovCi0gIGlmIChmbGFnX3N0YWNrX3Byb3RlY3QgfHwgYXNhbl9z YW5pdGl6ZV9zdGFja19wICgpKQorICAgICBTaW1pbGFybHkgZm9yIEFkZHJl c3MgU2FuaXRpemVyLgorICAgICBXaGVuIG1lbW9yeSB0YWdnaW5nIHdlIGRl ZmVyIGFsbCBzdGFjayB2YXJpYWJsZXMgc28gd2UgY2FuIGhhbmRsZSB0aGVt IGluCisgICAgIG9uZSBwbGFjZSAoaGFuZGxlIGhlcmUgbWVhbmluZyBlbnN1 cmUgYWxpZ25lZCBhbmQgcmVjb3JkIGluZm9ybWF0aW9uIG9uCisgICAgIGl0 cyBwb3NpdGlvbiBvbiB0aGUgc3RhY2spLiAgKi8KKyAgaWYgKGZsYWdfc3Rh Y2tfcHJvdGVjdCB8fCBhc2FuX3Nhbml0aXplX3N0YWNrX3AgKCkgfHwgbWVt b3J5X3RhZ2dpbmdfcCAoKSkKICAgICByZXR1cm4gdHJ1ZTsKIAogICB1bnNp Z25lZCBpbnQgYWxpZ24gPSBUUkVFX0NPREUgKHZhcikgPT0gU1NBX05BTUUK Cg== --_002_VI1PR08MB547152251A94D540887D4D84E0BA0VI1PR08MB5471eurp_--