From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 61297 invoked by alias); 6 Sep 2019 14:47:00 -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 60925 invoked by uid 89); 6 Sep 2019 14:46:58 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.3 required=5.0 tests=AWL,BAYES_00,FORGED_SPF_HELO,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS autolearn=ham version=3.3.1 spammy= X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Received: from mail-eopbgr140045.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (40.107.14.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 06 Sep 2019 14:46:55 +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=BSFonIJVeP+LNT3zae4u7dvQPM28QvZcGo54lekUSDw=; b=CGhtQNR3ToBFrtql/wGy8A48gQiSx30x3dKM5kcyObiQW0b/RGq6hdWhcyK0YxbuWOS6AQXb9YjWPH71nuPJVkXR2yjMO8htlV6tbSIW1yNYONpLI/nwWCITm4SV1zrxMLUKSmXE0Wc5jRKtqUZ31+tWcze5DYowMqLks8CvhnA= Received: from VE1PR08CA0021.eurprd08.prod.outlook.com (2603:10a6:803:104::34) by HE1PR0801MB1867.eurprd08.prod.outlook.com (2603:10a6:3:53::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.15; Fri, 6 Sep 2019 14:46:49 +0000 Received: from VE1EUR03FT046.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e09::209) by VE1PR08CA0021.outlook.office365.com (2603:10a6:803:104::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2241.14 via Frontend Transport; Fri, 6 Sep 2019 14:46:49 +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 VE1EUR03FT046.mail.protection.outlook.com (10.152.19.226) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2241.14 via Frontend Transport; Fri, 6 Sep 2019 14:46:47 +0000 Received: ("Tessian outbound f83cc93ed55d:v27"); Fri, 06 Sep 2019 14:46:26 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 460bcaee8e5efb53 X-CR-MTA-TID: 64aa7808 Received: from b3914493c513.1 (cr-mta-lb-1.cr-mta-net [104.47.2.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id 05D5C472-FB31-4059-BB53-0F24CFAAD537.1; Fri, 06 Sep 2019 14:46:21 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2054.outbound.protection.outlook.com [104.47.2.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b3914493c513.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 06 Sep 2019 14:46:21 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dKs/cX44KHNVavXo2lS3yrAz+NAFcgJMx8SjYA0NVnZ4VsAkcuRn9bdS9DJrbQ+GywLU5CUEpHIhOaQ6KpGMsvrOAeZ2u4B+o5jRBBLR1M7POyyZah2gr3B99KZ4xXA1Tvu+4DEt4TZXcQZ9Sk6ijKTljyXABuSg0kyk8sV49fdjq7iMSoHW5PVPYtp2C9gxzfY8WdONR/pkvdMuchIRZ+2CvBgv/+ZpeS3vRQoYu3ytBMkk2qVaSrBMFoAzhQw+N0zr0mh4a5+48xAKUyA1ijBGKmuWCs8OU3nB2ZrhXmeqIOCUmolEoNDz1+Z+JOLcCjgtuVqCOB5IkroPc47kqA== 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=BSFonIJVeP+LNT3zae4u7dvQPM28QvZcGo54lekUSDw=; b=a708YGRRRmlmL94x87SiQ/yBvUNK8+N9mSlHujQLo5Sn84vAarZJei+E4Z18749Fb+We6NcsHNJqsFfjQUHXt981SaVHoPFLgV2jh1aQ3LaEjlLMfoxUTgTvjq1h+aMaNr85ou2sg7sbX/o8a8G4VyqKc9l3Ly5GmbC2M53imzZoGVg/uj4htkv8lS+mJI8NLvAofsUZ//N+HQCqChso4mwBb1WRo5Iz789CACWk3t2gZEbRjg8HH+fxIpQnKJ5/9Sg4EV0VKDu21SxFxL9zJrwR6pRc5cTYI4bqg79HL+ieST5oGvNCEs4ijLgDY+aDst47jijX5j5KNjcISEovEw== 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=BSFonIJVeP+LNT3zae4u7dvQPM28QvZcGo54lekUSDw=; b=CGhtQNR3ToBFrtql/wGy8A48gQiSx30x3dKM5kcyObiQW0b/RGq6hdWhcyK0YxbuWOS6AQXb9YjWPH71nuPJVkXR2yjMO8htlV6tbSIW1yNYONpLI/nwWCITm4SV1zrxMLUKSmXE0Wc5jRKtqUZ31+tWcze5DYowMqLks8CvhnA= 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:19 +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:19 +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 11/X][libsanitizer] Uncolour stack frame on function exit Date: Fri, 06 Sep 2019 14:47: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: ioRH3gxuYgntsR8SeCEW2jKl+ykT2TFkgREo/PCXtO9B+379ZunssHNA/5r3S4IDlsNvdpbJJtKkMeNoEYZfzeIagwWZIm2VGlSNpHOJiRZbv68hrQbig3u+6LbTaH7fYVGs3KSKrwXC2Sj6wEywxM+lNYAlA46DLr4douzunLxtyxkimXxodfGFEU6hDuEc85mYopeH1LgG5DYUK3RpT9wjtYpaF7dsELRUjAnbB48UfadVW+Yh8BYd089GWmB8Y7Kd1tjBp3fqkgLX6n2pUe5jSYb36vBf7gv/CoATPR3ueoWOat/E1aS7EnFr2mHCnIf/f3PcGLJLUUDgoQVVsIEAxOl/BeDMkICuw+RhsDXt87tK0vLjzuk/liirPHIKuG1K4QQDkL01ScAl39g5lbq+PmVHWfOf+UGRJhKEP40= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_VI1PR08MB54714F7177B32B32A439B387E0BA0VI1PR08MB5471eurp_" 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: VE1EUR03FT046.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 6f6e1e76-56b2-4622-7042-08d732d8fa5c X-IsSubscribed: yes X-SW-Source: 2019-09/txt/msg00397.txt.bz2 --_002_VI1PR08MB54714F7177B32B32A439B387E0BA0VI1PR08MB5471eurp_ Content-Type: text/plain; charset="us-ascii" Content-ID: Content-Transfer-Encoding: quoted-printable Content-length: 3449 When exiting a function we need to ensure the shadow stack for this function has no remaining colour. Without clearing the shadow stack area for this function pointer checks to later function calls could check untagged areas (such as parameters passed on the stack) against a shadow stack area with left-over colour causing a false-positive. Here we ensure that the entire stack frame is cleared on function exit. gcc/ChangeLog: 2019-09-06 Matthew Malcomson * asan.c (hwasan_emit_uncolour_frame): New. * asan.h (hwasan_emit_uncolour_frame): New. * cfgexpand.c (expand_used_vars): Uncolour shadow frame on function exit. ############### Attachment also inlined for ease of reply ##########= ##### diff --git a/gcc/asan.h b/gcc/asan.h index 028afdd2e7d16245c6cbbe106b7ccb9c5034d542..c5492ce35980d0b26d4707f9648= 2b69dc76a525a 100644 --- a/gcc/asan.h +++ b/gcc/asan.h @@ -31,6 +31,7 @@ extern rtx hwasan_with_tag (rtx, poly_int64); extern void hwasan_tag_init (); extern rtx hwasan_create_untagged_base (rtx); extern void hwasan_emit_prologue (rtx *, rtx *, poly_int64 *, uint8_t *, s= ize_t); +extern rtx_insn *hwasan_emit_uncolour_frame (rtx, rtx, rtx_insn *); extern bool memory_tagging_p (void); extern rtx_insn *asan_emit_stack_protection (rtx, rtx, unsigned int, HOST_WIDE_INT *, tree *, int); diff --git a/gcc/asan.c b/gcc/asan.c index d361b4b562f75cb0c2e081218073eacb3704f8d0..0e74e32ae6ca4e130b3f13abe11= 0364b119def46 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -3836,6 +3836,46 @@ hwasan_emit_prologue (rtx *bases, } } =20 +rtx_insn * +hwasan_emit_uncolour_frame (rtx dynamic, rtx vars, rtx_insn *before) +{ + if (before) + push_to_sequence (before); + else + start_sequence (); + + dynamic =3D convert_memory_address (ptr_mode, dynamic); + vars =3D convert_memory_address (ptr_mode, vars); + + rtx top_rtx; + rtx bot_rtx; + if (STACK_GROWS_DOWNWARD) + { + top_rtx =3D vars; + bot_rtx =3D dynamic; + } + else + { + top_rtx =3D dynamic; + bot_rtx =3D vars; + } + + rtx size_rtx =3D expand_simple_binop (Pmode, MINUS, top_rtx, bot_rtx, + NULL_RTX, /* unsignedp =3D */0, OPTAB_DIRECT); + + /* TODO Other options (i.e. inline options) */ + rtx ret =3D init_one_libfunc ("__hwasan_tag_memory"); + emit_library_call (ret, LCT_NORMAL, VOIDmode, + bot_rtx, ptr_mode, + const0_rtx, QImode, + size_rtx, ptr_mode); + + do_pending_stack_adjust (); + rtx_insn *insns =3D get_insns (); + end_sequence (); + return insns; +} + rtx hwasan_create_untagged_base (rtx orig_base) { diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index aacf210facc462675a980ee87bd38d4a7d94ad09..9f0872b32354cbc3186f3f2d260= 0f711a46926d1 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -2412,6 +2412,14 @@ expand_used_vars (void) var_end_seq =3D asan_emit_allocas_unpoison (virtual_stack_dynamic_rtx, virtual_stack_vars_rtx, var_end_seq); + /* Here we uncolour the entire frame for this function. + We need to uncolour *something* if either we have coloured some local + variables or we have coloured some alloca objects. */ + else if (memory_tagging_p () + && (cfun->calls_alloca || stack_vars_num > 0)) + var_end_seq =3D hwasan_emit_uncolour_frame (virtual_stack_dynamic_rtx, + virtual_stack_vars_rtx, + var_end_seq); =20 fini_vars_expansion (); =20 --_002_VI1PR08MB54714F7177B32B32A439B387E0BA0VI1PR08MB5471eurp_ Content-Type: text/plain; name="hwasan-implementation10.patch" Content-Description: hwasan-implementation10.patch Content-Disposition: attachment; filename="hwasan-implementation10.patch"; size=2664; creation-date="Fri, 06 Sep 2019 14:46:19 GMT"; modification-date="Fri, 06 Sep 2019 14:46:19 GMT" Content-ID: <498FC162F7AC1C44810A89222DCE6C03@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 Content-length: 3612 ZGlmZiAtLWdpdCBhL2djYy9hc2FuLmggYi9nY2MvYXNhbi5oCmluZGV4IDAy OGFmZGQyZTdkMTYyNDVjNmNiYmUxMDZiN2NjYjljNTAzNGQ1NDIuLmM1NDky Y2UzNTk4MGQwYjI2ZDQ3MDdmOTY0ODJiNjlkYzc2YTUyNWEgMTAwNjQ0Ci0t LSBhL2djYy9hc2FuLmgKKysrIGIvZ2NjL2FzYW4uaApAQCAtMzEsNiArMzEs NyBAQCBleHRlcm4gcnR4IGh3YXNhbl93aXRoX3RhZyAocnR4LCBwb2x5X2lu dDY0KTsKIGV4dGVybiB2b2lkIGh3YXNhbl90YWdfaW5pdCAoKTsKIGV4dGVy biBydHggaHdhc2FuX2NyZWF0ZV91bnRhZ2dlZF9iYXNlIChydHgpOwogZXh0 ZXJuIHZvaWQgaHdhc2FuX2VtaXRfcHJvbG9ndWUgKHJ0eCAqLCBydHggKiwg cG9seV9pbnQ2NCAqLCB1aW50OF90ICosIHNpemVfdCk7CitleHRlcm4gcnR4 X2luc24gKmh3YXNhbl9lbWl0X3VuY29sb3VyX2ZyYW1lIChydHgsIHJ0eCwg cnR4X2luc24gKik7CiBleHRlcm4gYm9vbCBtZW1vcnlfdGFnZ2luZ19wICh2 b2lkKTsKIGV4dGVybiBydHhfaW5zbiAqYXNhbl9lbWl0X3N0YWNrX3Byb3Rl Y3Rpb24gKHJ0eCwgcnR4LCB1bnNpZ25lZCBpbnQsCiAJCQkJCSAgICAgSE9T VF9XSURFX0lOVCAqLCB0cmVlICosIGludCk7CmRpZmYgLS1naXQgYS9nY2Mv YXNhbi5jIGIvZ2NjL2FzYW4uYwppbmRleCBkMzYxYjRiNTYyZjc1Y2IwYzJl MDgxMjE4MDczZWFjYjM3MDRmOGQwLi4wZTc0ZTMyYWU2Y2E0ZTEzMGIzZjEz YWJlMTEwMzY0YjExOWRlZjQ2IDEwMDY0NAotLS0gYS9nY2MvYXNhbi5jCisr KyBiL2djYy9hc2FuLmMKQEAgLTM4MzYsNiArMzgzNiw0NiBAQCBod2FzYW5f ZW1pdF9wcm9sb2d1ZSAocnR4ICpiYXNlcywKICAgICB9CiB9CiAKK3J0eF9p bnNuICoKK2h3YXNhbl9lbWl0X3VuY29sb3VyX2ZyYW1lIChydHggZHluYW1p YywgcnR4IHZhcnMsIHJ0eF9pbnNuICpiZWZvcmUpCit7CisgIGlmIChiZWZv cmUpCisgICAgcHVzaF90b19zZXF1ZW5jZSAoYmVmb3JlKTsKKyAgZWxzZQor ICAgIHN0YXJ0X3NlcXVlbmNlICgpOworCisgIGR5bmFtaWMgPSBjb252ZXJ0 X21lbW9yeV9hZGRyZXNzIChwdHJfbW9kZSwgZHluYW1pYyk7CisgIHZhcnMg PSBjb252ZXJ0X21lbW9yeV9hZGRyZXNzIChwdHJfbW9kZSwgdmFycyk7CisK KyAgcnR4IHRvcF9ydHg7CisgIHJ0eCBib3RfcnR4OworICBpZiAoU1RBQ0tf R1JPV1NfRE9XTldBUkQpCisgICAgeworICAgICAgdG9wX3J0eCA9IHZhcnM7 CisgICAgICBib3RfcnR4ID0gZHluYW1pYzsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICB0b3BfcnR4ID0gZHluYW1pYzsKKyAgICAgIGJvdF9ydHgg PSB2YXJzOworICAgIH0KKworICBydHggc2l6ZV9ydHggPSBleHBhbmRfc2lt cGxlX2Jpbm9wIChQbW9kZSwgTUlOVVMsIHRvcF9ydHgsIGJvdF9ydHgsCisJ CQkJICBOVUxMX1JUWCwgLyogdW5zaWduZWRwID0gKi8wLCBPUFRBQl9ESVJF Q1QpOworCisgIC8qIFRPRE8gT3RoZXIgb3B0aW9ucyAoaS5lLiBpbmxpbmUg b3B0aW9ucykgICovCisgIHJ0eCByZXQgPSBpbml0X29uZV9saWJmdW5jICgi X19od2FzYW5fdGFnX21lbW9yeSIpOworICBlbWl0X2xpYnJhcnlfY2FsbCAo cmV0LCBMQ1RfTk9STUFMLCBWT0lEbW9kZSwKKyAgICAgIGJvdF9ydHgsIHB0 cl9tb2RlLAorICAgICAgY29uc3QwX3J0eCwgUUltb2RlLAorICAgICAgc2l6 ZV9ydHgsIHB0cl9tb2RlKTsKKworICBkb19wZW5kaW5nX3N0YWNrX2FkanVz dCAoKTsKKyAgcnR4X2luc24gKmluc25zID0gZ2V0X2luc25zICgpOworICBl bmRfc2VxdWVuY2UgKCk7CisgIHJldHVybiBpbnNuczsKK30KKwogcnR4CiBo d2FzYW5fY3JlYXRlX3VudGFnZ2VkX2Jhc2UgKHJ0eCBvcmlnX2Jhc2UpCiB7 CmRpZmYgLS1naXQgYS9nY2MvY2ZnZXhwYW5kLmMgYi9nY2MvY2ZnZXhwYW5k LmMKaW5kZXggYWFjZjIxMGZhY2M0NjI2NzVhOTgwZWU4N2JkMzhkNGE3ZDk0 YWQwOS4uOWYwODcyYjMyMzU0Y2JjMzE4NmYzZjJkMjYwMGY3MTFhNDY5MjZk MSAxMDA2NDQKLS0tIGEvZ2NjL2NmZ2V4cGFuZC5jCisrKyBiL2djYy9jZmdl eHBhbmQuYwpAQCAtMjQxMiw2ICsyNDEyLDE0IEBAIGV4cGFuZF91c2VkX3Zh cnMgKHZvaWQpCiAgICAgdmFyX2VuZF9zZXEgPSBhc2FuX2VtaXRfYWxsb2Nh c191bnBvaXNvbiAodmlydHVhbF9zdGFja19keW5hbWljX3J0eCwKIAkJCQkJ ICAgICAgdmlydHVhbF9zdGFja192YXJzX3J0eCwKIAkJCQkJICAgICAgdmFy X2VuZF9zZXEpOworICAvKiBIZXJlIHdlIHVuY29sb3VyIHRoZSBlbnRpcmUg ZnJhbWUgZm9yIHRoaXMgZnVuY3Rpb24uCisgICAgIFdlIG5lZWQgdG8gdW5j b2xvdXIgKnNvbWV0aGluZyogaWYgZWl0aGVyIHdlIGhhdmUgY29sb3VyZWQg c29tZSBsb2NhbAorICAgICB2YXJpYWJsZXMgb3Igd2UgaGF2ZSBjb2xvdXJl ZCBzb21lIGFsbG9jYSBvYmplY3RzLiAgKi8KKyAgZWxzZSBpZiAobWVtb3J5 X3RhZ2dpbmdfcCAoKQorCSAgICYmIChjZnVuLT5jYWxsc19hbGxvY2EgfHwg c3RhY2tfdmFyc19udW0gPiAwKSkKKyAgICB2YXJfZW5kX3NlcSA9IGh3YXNh bl9lbWl0X3VuY29sb3VyX2ZyYW1lICh2aXJ0dWFsX3N0YWNrX2R5bmFtaWNf cnR4LAorCQkJCQkgICAgICB2aXJ0dWFsX3N0YWNrX3ZhcnNfcnR4LAorCQkJ CQkgICAgICB2YXJfZW5kX3NlcSk7CiAKICAgZmluaV92YXJzX2V4cGFuc2lv biAoKTsKIAoK --_002_VI1PR08MB54714F7177B32B32A439B387E0BA0VI1PR08MB5471eurp_--