From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 58925 invoked by alias); 6 Sep 2019 14:46:43 -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 58791 invoked by uid 89); 6 Sep 2019 14:46:43 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.0 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: EUR03-AM5-obe.outbound.protection.outlook.com Received: from mail-eopbgr30042.outbound.protection.outlook.com (HELO EUR03-AM5-obe.outbound.protection.outlook.com) (40.107.3.42) 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=yX+WRFAsd0FT17iNkDvo9W0zpu6oiPxmrCU5LNNDRQs=; b=1uj0fzu16FOWdPP+MQ4t2u+9hpH5/FKIXWQPW04haCjyBSk01ur8hvth+f12eNEhSUMVhBwyGDkJWhX1GzYSxAqiOHKQ2DJDOL5hoy5Hbx5QJBw0Da7KKxM7XFBXFFWiidYgpsRqEs0B4NtcxJRQ5e5CePOQCb+o7+wDlwVbaok= Received: from VI1PR0801CA0069.eurprd08.prod.outlook.com (2603:10a6:800:7d::13) by DB6PR08MB2808.eurprd08.prod.outlook.com (2603:10a6:6:1d::23) 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 VE1EUR03FT061.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e09::204) by VI1PR0801CA0069.outlook.office365.com (2603:10a6:800:7d::13) 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: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 VE1EUR03FT061.mail.protection.outlook.com (10.152.19.220) 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:30 +0000 Received: ("Tessian outbound eec90fc31dfb:v27"); Fri, 06 Sep 2019 14:46:30 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 64736547c954994d X-CR-MTA-TID: 64aa7808 Received: from 5482be7dcc06.1 (cr-mta-lb-1.cr-mta-net [104.47.9.58]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id D4063386-8C2B-4125-A164-1DCFC0926261.1; Fri, 06 Sep 2019 14:46:25 +0000 Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-ve1eur03lp2058.outbound.protection.outlook.com [104.47.9.58]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 5482be7dcc06.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384); Fri, 06 Sep 2019 14:46:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bchuQ8Zh9aHZHSIHNrXBbgaiBVoVgAjQdyFKRy1a0Mrii/s9iwKre7eigKxXREJg73fSQg7bOsvdQ2XnhxKa2gBoF1kHztlUTqVLTfW1wMM9KkPTp64poj150JEC/tx6nmvMDRP3M8paW2HcKXPr78WaK8yAB2ijkuGV75ovsNEV+0y9efwLAGfuK/INPn9003Xma2ucxt9zJYLkOrIKYAYcVl451pM+M6SC6NAqv9yoVQy94B0PxKxX1+HRSQZ2CUtnJ4EBTwmop/6K4lzZFs4Mp4ifPkaOacPnCfYCA5tYrXmWtkT8S1Io+/M1/8SEm6DjbKZkQvnH9ZqnC1Qk+g== 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=yX+WRFAsd0FT17iNkDvo9W0zpu6oiPxmrCU5LNNDRQs=; b=cQah4qHCov9h9ak7waVLJSKr2MFA2160N2+C7+prBo9d0DJo0h2LCsSFTtRwnVoMaB24U6RU4uvVP70Ss3W0xUbdsTl6GWzwcMkspdMQZrqzLkZ2z0UavKoFSoCA2VBUasCZIVxWmCcs1/v1RQ+oM3q+/yZ9kst1Xeb0MFDy2dDWs4Qw4qwMhk/0c/4K0RPYkVvYe61VP/FMqioj/u3B3H+Vun8wfUQx5mJycXtTACaEVOPAJkXqBaRNcnle/qWmJzL9HmcDCWGpRGWpDzAnwOIiLDwgq1290RwjsrjvJuvuIhROW+IHqmXmZ9PVYOdShmvzhavqULpIS7ERIy4JIQ== 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=yX+WRFAsd0FT17iNkDvo9W0zpu6oiPxmrCU5LNNDRQs=; b=1uj0fzu16FOWdPP+MQ4t2u+9hpH5/FKIXWQPW04haCjyBSk01ur8hvth+f12eNEhSUMVhBwyGDkJWhX1GzYSxAqiOHKQ2DJDOL5hoy5Hbx5QJBw0Da7KKxM7XFBXFFWiidYgpsRqEs0B4NtcxJRQ5e5CePOQCb+o7+wDlwVbaok= 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:23 +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:23 +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 14/X][libsanitizer] Introduce HWASAN block-scope poisoning 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:1468;OLM:1468; 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)(30864003)(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: r4TVWsfTPP4LW2PqDmqGw1EYt/1N+Gs2s6mujMRZwa1tSC2kzju9s2om86WK6gRTCmgJl726U/vfUsogTFhlyUYJhGS5p8D5ZkbyOvNkdMbM5EK5DOCQ57pqVgZ1OMIiFFOL006Axy+3QuvjPesGbStkbkQeX19KIUy6xdfu3s22KYXD3NTsifN5dMzXEI/XcuKaxCxWwuQjVgjt2ujrMzuxnYShjkhWAxYaUusNGXWiXhqQySRVyOTiFRoEBZw74Nd3SBVG9N8X/0dDFTB2Mz7W9eqhnyTgiJt5uS8KhLGSfK43f3dNk5q9BZ2Ok1hgNQyiImbxGHx9eMUWjLuxv09hajgqLY0P1c8eUlo6DYm3Y4RgffrKz+lt6UvFDF3A0o5UuX1dhE4KZEnIAx8XII3zeNC6Eju5AQlJ27X8NbE= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_VI1PR08MB5471728307526AD56137AE10E0BA0VI1PR08MB5471eurp_" 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: VE1EUR03FT061.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 43c9cedb-ec35-4194-f8fe-08d732d8fcce X-IsSubscribed: yes X-SW-Source: 2019-09/txt/msg00392.txt.bz2 --_002_VI1PR08MB5471728307526AD56137AE10E0BA0VI1PR08MB5471eurp_ Content-Type: text/plain; charset="us-ascii" Content-ID: <43B982AC2C16DE4DACCFAC2D433B6ED2@eurprd08.prod.outlook.com> Content-Transfer-Encoding: quoted-printable Content-length: 11505 Here we use exactly the same mechanism as ASAN_MARK to poison/unpoison variables on entry/exit of a block. In order to simply use the exact same machinery we're using the same internal functions until the SANOPT pass. This means that all handling of ASAN_MARK is the same. This has the negative that the naming may be a little confusing, but a positive that handling of the internal function doesn't have to be duplicated for a function that behaves exactly the same but has a different name. gcc/ChangeLog: 2019-09-06 Matthew Malcomson * asan.c (asan_expand_mark_ifn): New. (asan_expand_poison_ifn): Add assertion. (hwasan_emit_prologue): Add assertion. (hwasan_emit_uncolour_frame): Clear hash map of block-scope variables. (hwasan_extract_tag): New. (hwasan_expand_mark_ifn): New. (hardware_memory_tagging_p): New. * asan.h (hwasan_extract_tag): New. (hwasan_expand_mark_ifn): New. (enum hwasan_mark_flags): New. (hardware_memory_tagging_p): New. * cfgexpand.c (expand_stack_vars): Neaten up an if clause. * gimple-pretty-print.c (dump_gimple_call_args): Handle HWASAN_MARK. * gimplify.c (asan_poison_variable): Set alignment for HWASAN. (gimplify_function_tree): Record marked variables for both ASAN and HWASAN. * internal-fn.c (expand_HWASAN_MARK): New. (expand_HWASAN_CHOOSE_COLOUR): Use new hwasan_extract_tag helper. * internal-fn.def (HWASAN_MARK): New. * sanopt.c (pass_sanopt::execute): Account for HWASAN. ############### Attachment also inlined for ease of reply ##########= ##### diff --git a/gcc/asan.h b/gcc/asan.h index e4e823080e4ca7489135ee2da9e0727de9bba8ae..6e5ba8be606e9a1eae2afe57f17= ccca5562167fd 100644 --- a/gcc/asan.h +++ b/gcc/asan.h @@ -30,12 +30,15 @@ extern void hwasan_increment_tag (); extern rtx hwasan_with_tag (rtx, poly_int64); extern void hwasan_tag_init (); extern rtx hwasan_create_untagged_base (rtx); +extern rtx hwasan_extract_tag (rtx tagged_pointer); extern rtx hwasan_base (); 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 hwasan_expand_check_ifn (gimple_stmt_iterator *, bool); +extern bool hwasan_expand_mark_ifn (gimple_stmt_iterator *); extern bool memory_tagging_p (void); extern bool gate_hwasan (void); +extern bool hardware_memory_tagging_p (void); extern rtx_insn *asan_emit_stack_protection (rtx, rtx, unsigned int, HOST_WIDE_INT *, tree *, int); extern rtx_insn *asan_emit_allocas_unpoison (rtx, rtx, rtx_insn *); @@ -142,6 +145,13 @@ enum asan_mark_flags #undef DEF }; =20 +enum hwasan_mark_flags +{ +#define DEF(X) HWASAN_MARK_##X + IFN_ASAN_MARK_FLAGS +#undef DEF +}; + /* Return true if STMT is ASAN_MARK with FLAG as first argument. */ extern bool asan_mark_p (gimple *stmt, enum asan_mark_flags flag); =20 diff --git a/gcc/asan.c b/gcc/asan.c index fefd28cbd136d74ad3389cf8efbf1949e3815dfd..ad3d5a6451d3ecd9ff79b768c1e= 9a3fb92272a7e 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -3375,6 +3375,22 @@ asan_expand_mark_ifn (gimple_stmt_iterator *iter) unsigned HOST_WIDE_INT size_in_bytes =3D tree_to_shwi (len); gcc_assert (size_in_bytes); =20 + if (memory_tagging_p ()) + { + /* Here we swap the ASAN_MARK for HWASAN_MARK. + This is because we are using the (possibly temporary) approach to + always emit ASAN_MARK in TREE until here. + That approach means we don't yet have to duplicate all the special + cases for ASAN_MARK and ASAN_POISON with the exact same handling but + called HWASAN_MARK etc. */ + gimple *hw_poison_call + =3D gimple_build_call_internal (IFN_HWASAN_MARK, 3, + gimple_call_arg (g, 0), + base, len); + gsi_replace (iter, hw_poison_call, false); + return false; + } + g =3D gimple_build_assign (make_ssa_name (pointer_sized_int_node), NOP_EXPR, base); gimple_set_location (g, loc); @@ -3673,6 +3689,7 @@ asan_expand_poison_ifn (gimple_stmt_iterator *iter, bool *need_commit_edge_insert, hash_map &shadow_vars_mapping) { + gcc_assert (! memory_tagging_p ()); gimple *g =3D gsi_stmt (*iter); tree poisoned_var =3D gimple_call_lhs (g); if (!poisoned_var || has_zero_uses (poisoned_var)) @@ -3968,6 +3985,7 @@ hwasan_emit_prologue (rtx *bases, } else { + gcc_assert (known_ge (end, start)); top =3D end; bot =3D start; } @@ -4037,6 +4055,12 @@ hwasan_emit_uncolour_frame (rtx dynamic, rtx vars, r= tx_insn *before) do_pending_stack_adjust (); rtx_insn *insns =3D get_insns (); end_sequence (); + + /* Clear the hash_map recording which variables are handled by HWASAN_MA= RK. + The only use in HWASAN is to decide which variables need to be colour= ed in + the prologue and which don't. */ + delete asan_handled_variables; + asan_handled_variables =3D NULL; return insns; } =20 @@ -4052,6 +4076,19 @@ hwasan_create_untagged_base (rtx orig_base) return untagged_base; } =20 +rtx +hwasan_extract_tag (rtx tagged_pointer) +{ + rtx tag =3D expand_simple_binop (Pmode, + LSHIFTRT, + tagged_pointer, + HWASAN_SHIFT_RTX, + NULL_RTX, + /* unsignedp =3D */0, + OPTAB_DIRECT); + return gen_lowpart (QImode, tag); +} + /* Needs to be GTY(()), because cgraph_build_static_cdtor may invoke ggc_collect. */ static GTY(()) tree hwasan_ctor_statements; @@ -4166,10 +4203,25 @@ hwasan_expand_check_ifn (gimple_stmt_iterator *iter= , bool) } =20 bool +hwasan_expand_mark_ifn (gimple_stmt_iterator *) +{ + /* HWASAN_MARK should only ever be available after the sanopt pass. + It might be nicer to have it everywhere in the future, so I"m leaving= this + function and the declaration in asan.h around in case that's requested + upstream. */ + gcc_unreachable (); +} + +bool gate_hwasan () { return memory_tagging_p (); } +bool +hardware_memory_tagging_p () +{ + return memory_tagging_p () && HARDWARE_MEMORY_TAGGING; +} =20 namespace { =20 diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c index 10f79ea619e3ebfdcbe9f5159e174cf2bb08b7d8..52d104857df92bc80db6deb5b18= c99ee2caa4151 100644 --- a/gcc/gimple-pretty-print.c +++ b/gcc/gimple-pretty-print.c @@ -739,6 +739,7 @@ dump_gimple_call_args (pretty_printer *buffer, gcall *g= s, dump_flags_t flags) limit =3D ARRAY_SIZE (reduction_args); break; =20 + case IFN_HWASAN_MARK: case IFN_ASAN_MARK: #define DEF(X) #X static const char *const asan_mark_args[] =3D {IFN_ASAN_MARK_FLAGS}; diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 5bacb255ba75901a3cd95e3b99b1f274216bf85d..d89d81ec112d918912269c90faa= e468d1d8aa321 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -1202,8 +1202,10 @@ asan_poison_variable (tree decl, bool poison, gimple= _stmt_iterator *it, =20 /* It's necessary to have all stack variables aligned to ASAN granularity bytes. */ - if (DECL_ALIGN_UNIT (decl) <=3D ASAN_SHADOW_GRANULARITY) - SET_DECL_ALIGN (decl, BITS_PER_UNIT * ASAN_SHADOW_GRANULARITY); + unsigned shadow_granularity =3D + memory_tagging_p () ? HWASAN_TAG_GRANULE_SIZE : ASAN_SHADOW_GRANULARIT= Y; + if (DECL_ALIGN_UNIT (decl) <=3D shadow_granularity) + SET_DECL_ALIGN (decl, BITS_PER_UNIT * shadow_granularity); =20 HOST_WIDE_INT flags =3D poison ? ASAN_MARK_POISON : ASAN_MARK_UNPOISON; =20 @@ -13816,7 +13818,7 @@ gimplify_function_tree (tree fndecl) && !needs_to_live_in_memory (ret)) DECL_GIMPLE_REG_P (ret) =3D 1; =20 - if (asan_sanitize_use_after_scope () && sanitize_flags_p (SANITIZE_ADDRE= SS)) + if (asan_sanitize_use_after_scope ()) asan_poisoned_variables =3D new hash_set (); bind =3D gimplify_body (fndecl, true); if (asan_poisoned_variables) diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c index 4eec9919b520691ab3e73a2920ef8b544cf55dfe..c530fe8951c30987c874df83e74= be6d058730134 100644 --- a/gcc/internal-fn.c +++ b/gcc/internal-fn.c @@ -471,11 +471,7 @@ expand_HWASAN_CHOOSE_COLOUR (internal_fn, gcall *gc) machine_mode mode =3D GET_MODE (target); gcc_assert (mode =3D=3D QImode); =20 - rtx base_tag =3D expand_simple_binop (Pmode, LSHIFTRT, hwasan_base (), - HWASAN_SHIFT_RTX, - NULL_RTX, /* unsignedp =3D */0, - OPTAB_DIRECT); - + rtx base_tag =3D hwasan_extract_tag (hwasan_base ()); gcc_assert (base_tag); rtx tag_offset =3D const_int_rtx[MAX_SAVED_CONST_INT + hwasan_current_ta= g ()]; rtx chosen_tag =3D expand_simple_binop (QImode, PLUS, base_tag, tag_offs= et, @@ -498,6 +494,39 @@ expand_HWASAN_CHOOSE_COLOUR (internal_fn, gcall *gc) } =20 static void +expand_HWASAN_MARK (internal_fn, gcall *gc) +{ + HOST_WIDE_INT flag =3D tree_to_shwi (gimple_call_arg (gc, 0)); + bool is_poison =3D ((asan_mark_flags)flag) =3D=3D ASAN_MARK_POISON; + + tree base =3D gimple_call_arg (gc, 1); + gcc_checking_assert (TREE_CODE (base) =3D=3D ADDR_EXPR); + rtx base_rtx =3D expand_normal (base); + + rtx tag =3D is_poison ? const0_rtx : hwasan_extract_tag (base_rtx); + rtx address =3D hwasan_create_untagged_base (base_rtx); + + tree len =3D gimple_call_arg (gc, 2); + gcc_assert (tree_fits_shwi_p (len)); + unsigned HOST_WIDE_INT size_in_bytes =3D tree_to_shwi (len); + uint8_t tg_mask =3D HWASAN_TAG_GRANULE_SIZE - 1; + gcc_assert (size_in_bytes); + size_in_bytes =3D (size_in_bytes + tg_mask) & ~tg_mask; + rtx size =3D gen_int_mode (size_in_bytes, Pmode); + + /* TODO Other options (i.e. inline options) */ + rtx func =3D init_one_libfunc ("__hwasan_tag_memory"); + emit_library_call (func, + LCT_NORMAL, + VOIDmode, + address, ptr_mode, + tag, QImode, + size, ptr_mode); +} + +/* This should get expanded in the sanopt pass. */ + +static void expand_ASAN_CHECK (internal_fn, gcall *) { gcc_unreachable (); diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def index ed0c5bc110f16b2cdbc139403dbdbd8ebe7e2823..100f6fbad0af4fefdd040838437= 4b8fdcde9bee4 100644 --- a/gcc/internal-fn.def +++ b/gcc/internal-fn.def @@ -290,6 +290,7 @@ DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NUL= L) DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) DEF_INTERNAL_FN (HWASAN_CHOOSE_COLOUR, ECF_LEAF | ECF_NOTHROW, ".") DEF_INTERNAL_FN (HWASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, "..R.= .") +DEF_INTERNAL_FN (HWASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL) DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, "..R..") DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL) DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) diff --git a/gcc/sanopt.c b/gcc/sanopt.c index 31270153f3cf56bfbad593830de1b9334e7f65d1..29b12a43029cdcce5756354ac12= d6d9e963e9ac8 100644 --- a/gcc/sanopt.c +++ b/gcc/sanopt.c @@ -1258,6 +1258,12 @@ sanitize_rewrite_addressable_params (function *fun) unsigned int pass_sanopt::execute (function *fun) { + /* + n.b. ASAN_MARK is used for both HWASAN and ASAN. + asan_num_accesses is used to count either HWASAN_CHECK or ASAN_CHECK + stuff. This is fine because you can only have one of these active at= a + time. + */ basic_block bb; int asan_num_accesses =3D 0; bool contains_asan_mark =3D false; @@ -1345,6 +1351,9 @@ pass_sanopt::execute (function *fun) &need_commit_edge_insert, shadow_vars_mapping); break; + case IFN_HWASAN_MARK: + no_next =3D hwasan_expand_mark_ifn (&gsi); + break; default: break; } --_002_VI1PR08MB5471728307526AD56137AE10E0BA0VI1PR08MB5471eurp_ Content-Type: text/plain; name="hwasan-implementation13.patch" Content-Description: hwasan-implementation13.patch Content-Disposition: attachment; filename="hwasan-implementation13.patch"; size=9772; creation-date="Fri, 06 Sep 2019 14:46:23 GMT"; modification-date="Fri, 06 Sep 2019 14:46:23 GMT" Content-ID: <204764DDD9BFD8459B88D41A0136387A@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 Content-length: 13250 ZGlmZiAtLWdpdCBhL2djYy9hc2FuLmggYi9nY2MvYXNhbi5oCmluZGV4IGU0 ZTgyMzA4MGU0Y2E3NDg5MTM1ZWUyZGE5ZTA3MjdkZTliYmE4YWUuLjZlNWJh OGJlNjA2ZTlhMWVhZTJhZmU1N2YxN2NjY2E1NTYyMTY3ZmQgMTAwNjQ0Ci0t LSBhL2djYy9hc2FuLmgKKysrIGIvZ2NjL2FzYW4uaApAQCAtMzAsMTIgKzMw LDE1IEBAIGV4dGVybiB2b2lkIGh3YXNhbl9pbmNyZW1lbnRfdGFnICgpOwog ZXh0ZXJuIHJ0eCBod2FzYW5fd2l0aF90YWcgKHJ0eCwgcG9seV9pbnQ2NCk7 CiBleHRlcm4gdm9pZCBod2FzYW5fdGFnX2luaXQgKCk7CiBleHRlcm4gcnR4 IGh3YXNhbl9jcmVhdGVfdW50YWdnZWRfYmFzZSAocnR4KTsKK2V4dGVybiBy dHggaHdhc2FuX2V4dHJhY3RfdGFnIChydHggdGFnZ2VkX3BvaW50ZXIpOwog ZXh0ZXJuIHJ0eCBod2FzYW5fYmFzZSAoKTsKIGV4dGVybiB2b2lkIGh3YXNh bl9lbWl0X3Byb2xvZ3VlIChydHggKiwgcnR4ICosIHBvbHlfaW50NjQgKiwg dWludDhfdCAqLCBzaXplX3QpOwogZXh0ZXJuIHJ0eF9pbnNuICpod2FzYW5f ZW1pdF91bmNvbG91cl9mcmFtZSAocnR4LCBydHgsIHJ0eF9pbnNuICopOwog ZXh0ZXJuIGJvb2wgaHdhc2FuX2V4cGFuZF9jaGVja19pZm4gKGdpbXBsZV9z dG10X2l0ZXJhdG9yICosIGJvb2wpOworZXh0ZXJuIGJvb2wgaHdhc2FuX2V4 cGFuZF9tYXJrX2lmbiAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKik7CiBleHRl cm4gYm9vbCBtZW1vcnlfdGFnZ2luZ19wICh2b2lkKTsKIGV4dGVybiBib29s IGdhdGVfaHdhc2FuICh2b2lkKTsKK2V4dGVybiBib29sIGhhcmR3YXJlX21l bW9yeV90YWdnaW5nX3AgKHZvaWQpOwogZXh0ZXJuIHJ0eF9pbnNuICphc2Fu X2VtaXRfc3RhY2tfcHJvdGVjdGlvbiAocnR4LCBydHgsIHVuc2lnbmVkIGlu dCwKIAkJCQkJICAgICBIT1NUX1dJREVfSU5UICosIHRyZWUgKiwgaW50KTsK IGV4dGVybiBydHhfaW5zbiAqYXNhbl9lbWl0X2FsbG9jYXNfdW5wb2lzb24g KHJ0eCwgcnR4LCBydHhfaW5zbiAqKTsKQEAgLTE0Miw2ICsxNDUsMTMgQEAg ZW51bSBhc2FuX21hcmtfZmxhZ3MKICN1bmRlZiBERUYKIH07CiAKK2VudW0g aHdhc2FuX21hcmtfZmxhZ3MKK3sKKyNkZWZpbmUgREVGKFgpIEhXQVNBTl9N QVJLXyMjWAorICBJRk5fQVNBTl9NQVJLX0ZMQUdTCisjdW5kZWYgREVGCit9 OworCiAvKiBSZXR1cm4gdHJ1ZSBpZiBTVE1UIGlzIEFTQU5fTUFSSyB3aXRo IEZMQUcgYXMgZmlyc3QgYXJndW1lbnQuICAqLwogZXh0ZXJuIGJvb2wgYXNh bl9tYXJrX3AgKGdpbXBsZSAqc3RtdCwgZW51bSBhc2FuX21hcmtfZmxhZ3Mg ZmxhZyk7CiAKZGlmZiAtLWdpdCBhL2djYy9hc2FuLmMgYi9nY2MvYXNhbi5j CmluZGV4IGZlZmQyOGNiZDEzNmQ3NGFkMzM4OWNmOGVmYmYxOTQ5ZTM4MTVk ZmQuLmFkM2Q1YTY0NTFkM2VjZDlmZjc5Yjc2OGMxZTlhM2ZiOTIyNzJhN2Ug MTAwNjQ0Ci0tLSBhL2djYy9hc2FuLmMKKysrIGIvZ2NjL2FzYW4uYwpAQCAt MzM3NSw2ICszMzc1LDIyIEBAIGFzYW5fZXhwYW5kX21hcmtfaWZuIChnaW1w bGVfc3RtdF9pdGVyYXRvciAqaXRlcikKICAgdW5zaWduZWQgSE9TVF9XSURF X0lOVCBzaXplX2luX2J5dGVzID0gdHJlZV90b19zaHdpIChsZW4pOwogICBn Y2NfYXNzZXJ0IChzaXplX2luX2J5dGVzKTsKIAorICBpZiAobWVtb3J5X3Rh Z2dpbmdfcCAoKSkKKyAgICB7CisgICAgICAvKiBIZXJlIHdlIHN3YXAgdGhl IEFTQU5fTUFSSyBmb3IgSFdBU0FOX01BUksuCisJIFRoaXMgaXMgYmVjYXVz ZSB3ZSBhcmUgdXNpbmcgdGhlIChwb3NzaWJseSB0ZW1wb3JhcnkpIGFwcHJv YWNoIHRvCisJIGFsd2F5cyBlbWl0IEFTQU5fTUFSSyBpbiBUUkVFIHVudGls IGhlcmUuCisJIFRoYXQgYXBwcm9hY2ggbWVhbnMgd2UgZG9uJ3QgeWV0IGhh dmUgdG8gZHVwbGljYXRlIGFsbCB0aGUgc3BlY2lhbAorCSBjYXNlcyBmb3Ig QVNBTl9NQVJLIGFuZCBBU0FOX1BPSVNPTiB3aXRoIHRoZSBleGFjdCBzYW1l IGhhbmRsaW5nIGJ1dAorCSBjYWxsZWQgSFdBU0FOX01BUksgZXRjLiAgKi8K KyAgICAgIGdpbXBsZSAqaHdfcG9pc29uX2NhbGwKKwk9IGdpbXBsZV9idWls ZF9jYWxsX2ludGVybmFsIChJRk5fSFdBU0FOX01BUkssIDMsCisJCQkJICAg ICAgZ2ltcGxlX2NhbGxfYXJnIChnLCAwKSwKKwkJCQkgICAgICBiYXNlLCBs ZW4pOworICAgICAgZ3NpX3JlcGxhY2UgKGl0ZXIsIGh3X3BvaXNvbl9jYWxs LCBmYWxzZSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgIGcg PSBnaW1wbGVfYnVpbGRfYXNzaWduIChtYWtlX3NzYV9uYW1lIChwb2ludGVy X3NpemVkX2ludF9ub2RlKSwKIAkJCSAgIE5PUF9FWFBSLCBiYXNlKTsKICAg Z2ltcGxlX3NldF9sb2NhdGlvbiAoZywgbG9jKTsKQEAgLTM2NzMsNiArMzY4 OSw3IEBAIGFzYW5fZXhwYW5kX3BvaXNvbl9pZm4gKGdpbXBsZV9zdG10X2l0 ZXJhdG9yICppdGVyLAogCQkJYm9vbCAqbmVlZF9jb21taXRfZWRnZV9pbnNl cnQsCiAJCQloYXNoX21hcDx0cmVlLCB0cmVlPiAmc2hhZG93X3ZhcnNfbWFw cGluZykKIHsKKyAgZ2NjX2Fzc2VydCAoISBtZW1vcnlfdGFnZ2luZ19wICgp KTsKICAgZ2ltcGxlICpnID0gZ3NpX3N0bXQgKCppdGVyKTsKICAgdHJlZSBw b2lzb25lZF92YXIgPSBnaW1wbGVfY2FsbF9saHMgKGcpOwogICBpZiAoIXBv aXNvbmVkX3ZhciB8fCBoYXNfemVyb191c2VzIChwb2lzb25lZF92YXIpKQpA QCAtMzk2OCw2ICszOTg1LDcgQEAgaHdhc2FuX2VtaXRfcHJvbG9ndWUgKHJ0 eCAqYmFzZXMsCiAJfQogICAgICAgZWxzZQogCXsKKwkgIGdjY19hc3NlcnQg KGtub3duX2dlIChlbmQsIHN0YXJ0KSk7CiAJICB0b3AgPSBlbmQ7CiAJICBi b3QgPSBzdGFydDsKIAl9CkBAIC00MDM3LDYgKzQwNTUsMTIgQEAgaHdhc2Fu X2VtaXRfdW5jb2xvdXJfZnJhbWUgKHJ0eCBkeW5hbWljLCBydHggdmFycywg cnR4X2luc24gKmJlZm9yZSkKICAgZG9fcGVuZGluZ19zdGFja19hZGp1c3Qg KCk7CiAgIHJ0eF9pbnNuICppbnNucyA9IGdldF9pbnNucyAoKTsKICAgZW5k X3NlcXVlbmNlICgpOworCisgIC8qIENsZWFyIHRoZSBoYXNoX21hcCByZWNv cmRpbmcgd2hpY2ggdmFyaWFibGVzIGFyZSBoYW5kbGVkIGJ5IEhXQVNBTl9N QVJLLgorICAgICBUaGUgb25seSB1c2UgaW4gSFdBU0FOIGlzIHRvIGRlY2lk ZSB3aGljaCB2YXJpYWJsZXMgbmVlZCB0byBiZSBjb2xvdXJlZCBpbgorICAg ICB0aGUgcHJvbG9ndWUgYW5kIHdoaWNoIGRvbid0LiAgKi8KKyAgZGVsZXRl IGFzYW5faGFuZGxlZF92YXJpYWJsZXM7CisgIGFzYW5faGFuZGxlZF92YXJp YWJsZXMgPSBOVUxMOwogICByZXR1cm4gaW5zbnM7CiB9CiAKQEAgLTQwNTIs NiArNDA3NiwxOSBAQCBod2FzYW5fY3JlYXRlX3VudGFnZ2VkX2Jhc2UgKHJ0 eCBvcmlnX2Jhc2UpCiAgIHJldHVybiB1bnRhZ2dlZF9iYXNlOwogfQogCity dHgKK2h3YXNhbl9leHRyYWN0X3RhZyAocnR4IHRhZ2dlZF9wb2ludGVyKQor eworICBydHggdGFnID0gZXhwYW5kX3NpbXBsZV9iaW5vcCAoUG1vZGUsCisJ CQkJIExTSElGVFJULAorCQkJCSB0YWdnZWRfcG9pbnRlciwKKwkJCQkgSFdB U0FOX1NISUZUX1JUWCwKKwkJCQkgTlVMTF9SVFgsCisJCQkJIC8qIHVuc2ln bmVkcCA9ICovMCwKKwkJCQkgT1BUQUJfRElSRUNUKTsKKyAgcmV0dXJuIGdl bl9sb3dwYXJ0IChRSW1vZGUsIHRhZyk7Cit9CisKIC8qIE5lZWRzIHRvIGJl IEdUWSgoKSksIGJlY2F1c2UgY2dyYXBoX2J1aWxkX3N0YXRpY19jZHRvciBt YXkKICAgIGludm9rZSBnZ2NfY29sbGVjdC4gICovCiBzdGF0aWMgR1RZKCgp KSB0cmVlIGh3YXNhbl9jdG9yX3N0YXRlbWVudHM7CkBAIC00MTY2LDEwICs0 MjAzLDI1IEBAIGh3YXNhbl9leHBhbmRfY2hlY2tfaWZuIChnaW1wbGVfc3Rt dF9pdGVyYXRvciAqaXRlciwgYm9vbCkKIH0KIAogYm9vbAoraHdhc2FuX2V4 cGFuZF9tYXJrX2lmbiAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKikKK3sKKyAg LyogSFdBU0FOX01BUksgc2hvdWxkIG9ubHkgZXZlciBiZSBhdmFpbGFibGUg YWZ0ZXIgdGhlIHNhbm9wdCBwYXNzLgorICAgICBJdCBtaWdodCBiZSBuaWNl ciB0byBoYXZlIGl0IGV2ZXJ5d2hlcmUgaW4gdGhlIGZ1dHVyZSwgc28gSSJt IGxlYXZpbmcgdGhpcworICAgICBmdW5jdGlvbiBhbmQgdGhlIGRlY2xhcmF0 aW9uIGluIGFzYW4uaCBhcm91bmQgaW4gY2FzZSB0aGF0J3MgcmVxdWVzdGVk CisgICAgIHVwc3RyZWFtLiAgKi8KKyAgZ2NjX3VucmVhY2hhYmxlICgpOwor fQorCitib29sCiBnYXRlX2h3YXNhbiAoKQogewogICByZXR1cm4gbWVtb3J5 X3RhZ2dpbmdfcCAoKTsKIH0KK2Jvb2wKK2hhcmR3YXJlX21lbW9yeV90YWdn aW5nX3AgKCkKK3sKKyAgcmV0dXJuIG1lbW9yeV90YWdnaW5nX3AgKCkgJiYg SEFSRFdBUkVfTUVNT1JZX1RBR0dJTkc7Cit9CiAKIG5hbWVzcGFjZSB7CiAK ZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcHJldHR5LXByaW50LmMgYi9nY2Mv Z2ltcGxlLXByZXR0eS1wcmludC5jCmluZGV4IDEwZjc5ZWE2MTllM2ViZmRj YmU5ZjUxNTllMTc0Y2YyYmIwOGI3ZDguLjUyZDEwNDg1N2RmOTJiYzgwZGI2 ZGViNWIxOGM5OWVlMmNhYTQxNTEgMTAwNjQ0Ci0tLSBhL2djYy9naW1wbGUt cHJldHR5LXByaW50LmMKKysrIGIvZ2NjL2dpbXBsZS1wcmV0dHktcHJpbnQu YwpAQCAtNzM5LDYgKzczOSw3IEBAIGR1bXBfZ2ltcGxlX2NhbGxfYXJncyAo cHJldHR5X3ByaW50ZXIgKmJ1ZmZlciwgZ2NhbGwgKmdzLCBkdW1wX2ZsYWdz X3QgZmxhZ3MpCiAJICBsaW1pdCA9IEFSUkFZX1NJWkUgKHJlZHVjdGlvbl9h cmdzKTsKIAkgIGJyZWFrOwogCisJY2FzZSBJRk5fSFdBU0FOX01BUks6CiAJ Y2FzZSBJRk5fQVNBTl9NQVJLOgogI2RlZmluZSBERUYoWCkgI1gKIAkgIHN0 YXRpYyBjb25zdCBjaGFyICpjb25zdCBhc2FuX21hcmtfYXJnc1tdID0ge0lG Tl9BU0FOX01BUktfRkxBR1N9OwpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsaWZ5 LmMgYi9nY2MvZ2ltcGxpZnkuYwppbmRleCA1YmFjYjI1NWJhNzU5MDFhM2Nk OTVlM2I5OWIxZjI3NDIxNmJmODVkLi5kODlkODFlYzExMmQ5MTg5MTIyNjlj OTBmYWFlNDY4ZDFkOGFhMzIxIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxpZnku YworKysgYi9nY2MvZ2ltcGxpZnkuYwpAQCAtMTIwMiw4ICsxMjAyLDEwIEBA IGFzYW5fcG9pc29uX3ZhcmlhYmxlICh0cmVlIGRlY2wsIGJvb2wgcG9pc29u LCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqaXQsCiAKICAgLyogSXQncyBuZWNl c3NhcnkgdG8gaGF2ZSBhbGwgc3RhY2sgdmFyaWFibGVzIGFsaWduZWQgdG8g QVNBTiBncmFudWxhcml0eQogICAgICBieXRlcy4gICovCi0gIGlmIChERUNM X0FMSUdOX1VOSVQgKGRlY2wpIDw9IEFTQU5fU0hBRE9XX0dSQU5VTEFSSVRZ KQotICAgIFNFVF9ERUNMX0FMSUdOIChkZWNsLCBCSVRTX1BFUl9VTklUICog QVNBTl9TSEFET1dfR1JBTlVMQVJJVFkpOworICB1bnNpZ25lZCBzaGFkb3df Z3JhbnVsYXJpdHkgPQorICAgIG1lbW9yeV90YWdnaW5nX3AgKCkgPyBIV0FT QU5fVEFHX0dSQU5VTEVfU0laRSA6IEFTQU5fU0hBRE9XX0dSQU5VTEFSSVRZ OworICBpZiAoREVDTF9BTElHTl9VTklUIChkZWNsKSA8PSBzaGFkb3dfZ3Jh bnVsYXJpdHkpCisgICAgU0VUX0RFQ0xfQUxJR04gKGRlY2wsIEJJVFNfUEVS X1VOSVQgKiBzaGFkb3dfZ3JhbnVsYXJpdHkpOwogCiAgIEhPU1RfV0lERV9J TlQgZmxhZ3MgPSBwb2lzb24gPyBBU0FOX01BUktfUE9JU09OIDogQVNBTl9N QVJLX1VOUE9JU09OOwogCkBAIC0xMzgxNiw3ICsxMzgxOCw3IEBAIGdpbXBs aWZ5X2Z1bmN0aW9uX3RyZWUgKHRyZWUgZm5kZWNsKQogICAgICAgJiYgIW5l ZWRzX3RvX2xpdmVfaW5fbWVtb3J5IChyZXQpKQogICAgIERFQ0xfR0lNUExF X1JFR19QIChyZXQpID0gMTsKIAotICBpZiAoYXNhbl9zYW5pdGl6ZV91c2Vf YWZ0ZXJfc2NvcGUgKCkgJiYgc2FuaXRpemVfZmxhZ3NfcCAoU0FOSVRJWkVf QUREUkVTUykpCisgIGlmIChhc2FuX3Nhbml0aXplX3VzZV9hZnRlcl9zY29w ZSAoKSkKICAgICBhc2FuX3BvaXNvbmVkX3ZhcmlhYmxlcyA9IG5ldyBoYXNo X3NldDx0cmVlPiAoKTsKICAgYmluZCA9IGdpbXBsaWZ5X2JvZHkgKGZuZGVj bCwgdHJ1ZSk7CiAgIGlmIChhc2FuX3BvaXNvbmVkX3ZhcmlhYmxlcykKZGlm ZiAtLWdpdCBhL2djYy9pbnRlcm5hbC1mbi5jIGIvZ2NjL2ludGVybmFsLWZu LmMKaW5kZXggNGVlYzk5MTliNTIwNjkxYWIzZTczYTI5MjBlZjhiNTQ0Y2Y1 NWRmZS4uYzUzMGZlODk1MWMzMDk4N2M4NzRkZjgzZTc0YmU2ZDA1ODczMDEz NCAxMDA2NDQKLS0tIGEvZ2NjL2ludGVybmFsLWZuLmMKKysrIGIvZ2NjL2lu dGVybmFsLWZuLmMKQEAgLTQ3MSwxMSArNDcxLDcgQEAgZXhwYW5kX0hXQVNB Tl9DSE9PU0VfQ09MT1VSIChpbnRlcm5hbF9mbiwgZ2NhbGwgKmdjKQogICBt YWNoaW5lX21vZGUgbW9kZSA9IEdFVF9NT0RFICh0YXJnZXQpOwogICBnY2Nf YXNzZXJ0IChtb2RlID09IFFJbW9kZSk7CiAKLSAgcnR4IGJhc2VfdGFnID0g ZXhwYW5kX3NpbXBsZV9iaW5vcCAoUG1vZGUsIExTSElGVFJULCBod2FzYW5f YmFzZSAoKSwKLQkJCQkgICAgICBIV0FTQU5fU0hJRlRfUlRYLAotCQkJCSAg ICAgIE5VTExfUlRYLCAvKiB1bnNpZ25lZHAgPSAqLzAsCi0JCQkJICAgICAg T1BUQUJfRElSRUNUKTsKLQorICBydHggYmFzZV90YWcgPSBod2FzYW5fZXh0 cmFjdF90YWcgKGh3YXNhbl9iYXNlICgpKTsKICAgZ2NjX2Fzc2VydCAoYmFz ZV90YWcpOwogICBydHggdGFnX29mZnNldCA9IGNvbnN0X2ludF9ydHhbTUFY X1NBVkVEX0NPTlNUX0lOVCArIGh3YXNhbl9jdXJyZW50X3RhZyAoKV07CiAg IHJ0eCBjaG9zZW5fdGFnID0gZXhwYW5kX3NpbXBsZV9iaW5vcCAoUUltb2Rl LCBQTFVTLCBiYXNlX3RhZywgdGFnX29mZnNldCwKQEAgLTQ5OCw2ICs0OTQs MzkgQEAgZXhwYW5kX0hXQVNBTl9DSE9PU0VfQ09MT1VSIChpbnRlcm5hbF9m biwgZ2NhbGwgKmdjKQogfQogCiBzdGF0aWMgdm9pZAorZXhwYW5kX0hXQVNB Tl9NQVJLIChpbnRlcm5hbF9mbiwgZ2NhbGwgKmdjKQoreworICBIT1NUX1dJ REVfSU5UIGZsYWcgPSB0cmVlX3RvX3Nod2kgKGdpbXBsZV9jYWxsX2FyZyAo Z2MsIDApKTsKKyAgYm9vbCBpc19wb2lzb24gPSAoKGFzYW5fbWFya19mbGFn cylmbGFnKSA9PSBBU0FOX01BUktfUE9JU09OOworCisgIHRyZWUgYmFzZSA9 IGdpbXBsZV9jYWxsX2FyZyAoZ2MsIDEpOworICBnY2NfY2hlY2tpbmdfYXNz ZXJ0IChUUkVFX0NPREUgKGJhc2UpID09IEFERFJfRVhQUik7CisgIHJ0eCBi YXNlX3J0eCA9IGV4cGFuZF9ub3JtYWwgKGJhc2UpOworCisgIHJ0eCB0YWcg PSBpc19wb2lzb24gPyBjb25zdDBfcnR4IDogaHdhc2FuX2V4dHJhY3RfdGFn IChiYXNlX3J0eCk7CisgIHJ0eCBhZGRyZXNzID0gaHdhc2FuX2NyZWF0ZV91 bnRhZ2dlZF9iYXNlIChiYXNlX3J0eCk7CisKKyAgdHJlZSBsZW4gPSBnaW1w bGVfY2FsbF9hcmcgKGdjLCAyKTsKKyAgZ2NjX2Fzc2VydCAodHJlZV9maXRz X3Nod2lfcCAobGVuKSk7CisgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgc2l6 ZV9pbl9ieXRlcyA9IHRyZWVfdG9fc2h3aSAobGVuKTsKKyAgdWludDhfdCB0 Z19tYXNrID0gSFdBU0FOX1RBR19HUkFOVUxFX1NJWkUgLSAxOworICBnY2Nf YXNzZXJ0IChzaXplX2luX2J5dGVzKTsKKyAgc2l6ZV9pbl9ieXRlcyA9IChz aXplX2luX2J5dGVzICsgdGdfbWFzaykgJiB+dGdfbWFzazsKKyAgcnR4IHNp emUgPSBnZW5faW50X21vZGUgKHNpemVfaW5fYnl0ZXMsIFBtb2RlKTsKKwor ICAvKiBUT0RPIE90aGVyIG9wdGlvbnMgKGkuZS4gaW5saW5lIG9wdGlvbnMp ICAqLworICBydHggZnVuYyA9IGluaXRfb25lX2xpYmZ1bmMgKCJfX2h3YXNh bl90YWdfbWVtb3J5Iik7CisgIGVtaXRfbGlicmFyeV9jYWxsIChmdW5jLAor ICAgICAgTENUX05PUk1BTCwKKyAgICAgIFZPSURtb2RlLAorICAgICAgYWRk cmVzcywgcHRyX21vZGUsCisgICAgICB0YWcsIFFJbW9kZSwKKyAgICAgIHNp emUsIHB0cl9tb2RlKTsKK30KKworLyogVGhpcyBzaG91bGQgZ2V0IGV4cGFu ZGVkIGluIHRoZSBzYW5vcHQgcGFzcy4gICovCisKK3N0YXRpYyB2b2lkCiBl eHBhbmRfQVNBTl9DSEVDSyAoaW50ZXJuYWxfZm4sIGdjYWxsICopCiB7CiAg IGdjY191bnJlYWNoYWJsZSAoKTsKZGlmZiAtLWdpdCBhL2djYy9pbnRlcm5h bC1mbi5kZWYgYi9nY2MvaW50ZXJuYWwtZm4uZGVmCmluZGV4IGVkMGM1YmMx MTBmMTZiMmNkYmMxMzk0MDNkYmRiZDhlYmU3ZTI4MjMuLjEwMGY2ZmJhZDBh ZjRmZWZkZDA0MDgzODQzNzRiOGZkY2RlOWJlZTQgMTAwNjQ0Ci0tLSBhL2dj Yy9pbnRlcm5hbC1mbi5kZWYKKysrIGIvZ2NjL2ludGVybmFsLWZuLmRlZgpA QCAtMjkwLDYgKzI5MCw3IEBAIERFRl9JTlRFUk5BTF9GTiAoQUJOT1JNQUxf RElTUEFUQ0hFUiwgRUNGX05PUkVUVVJOLCBOVUxMKQogREVGX0lOVEVSTkFM X0ZOIChCVUlMVElOX0VYUEVDVCwgRUNGX0NPTlNUIHwgRUNGX0xFQUYgfCBF Q0ZfTk9USFJPVywgTlVMTCkKIERFRl9JTlRFUk5BTF9GTiAoSFdBU0FOX0NI T09TRV9DT0xPVVIsIEVDRl9MRUFGIHwgRUNGX05PVEhST1csICIuIikKIERF Rl9JTlRFUk5BTF9GTiAoSFdBU0FOX0NIRUNLLCBFQ0ZfVE1fUFVSRSB8IEVD Rl9MRUFGIHwgRUNGX05PVEhST1csICIuLlIuLiIpCitERUZfSU5URVJOQUxf Rk4gKEhXQVNBTl9NQVJLLCBFQ0ZfTEVBRiB8IEVDRl9OT1RIUk9XLCBOVUxM KQogREVGX0lOVEVSTkFMX0ZOIChBU0FOX0NIRUNLLCBFQ0ZfVE1fUFVSRSB8 IEVDRl9MRUFGIHwgRUNGX05PVEhST1csICIuLlIuLiIpCiBERUZfSU5URVJO QUxfRk4gKEFTQU5fTUFSSywgRUNGX0xFQUYgfCBFQ0ZfTk9USFJPVywgTlVM TCkKIERFRl9JTlRFUk5BTF9GTiAoQVNBTl9QT0lTT04sIEVDRl9MRUFGIHwg RUNGX05PVEhST1cgfCBFQ0ZfTk9WT1BTLCBOVUxMKQpkaWZmIC0tZ2l0IGEv Z2NjL3Nhbm9wdC5jIGIvZ2NjL3Nhbm9wdC5jCmluZGV4IDMxMjcwMTUzZjNj ZjU2YmZiYWQ1OTM4MzBkZTFiOTMzNGU3ZjY1ZDEuLjI5YjEyYTQzMDI5Y2Rj Y2U1NzU2MzU0YWMxMmQ2ZDllOTYzZTlhYzggMTAwNjQ0Ci0tLSBhL2djYy9z YW5vcHQuYworKysgYi9nY2Mvc2Fub3B0LmMKQEAgLTEyNTgsNiArMTI1OCwx MiBAQCBzYW5pdGl6ZV9yZXdyaXRlX2FkZHJlc3NhYmxlX3BhcmFtcyAoZnVu Y3Rpb24gKmZ1bikKIHVuc2lnbmVkIGludAogcGFzc19zYW5vcHQ6OmV4ZWN1 dGUgKGZ1bmN0aW9uICpmdW4pCiB7CisgIC8qCisgICAgIG4uYi4gQVNBTl9N QVJLIGlzIHVzZWQgZm9yIGJvdGggSFdBU0FOIGFuZCBBU0FOLgorICAgICBh c2FuX251bV9hY2Nlc3NlcyBpcyB1c2VkIHRvIGNvdW50IGVpdGhlciBIV0FT QU5fQ0hFQ0sgb3IgQVNBTl9DSEVDSworICAgICBzdHVmZi4gIFRoaXMgaXMg ZmluZSBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBvZiB0aGVzZSBh Y3RpdmUgYXQgYQorICAgICB0aW1lLgorICovCiAgIGJhc2ljX2Jsb2NrIGJi OwogICBpbnQgYXNhbl9udW1fYWNjZXNzZXMgPSAwOwogICBib29sIGNvbnRh aW5zX2FzYW5fbWFyayA9IGZhbHNlOwpAQCAtMTM0NSw2ICsxMzUxLDkgQEAg cGFzc19zYW5vcHQ6OmV4ZWN1dGUgKGZ1bmN0aW9uICpmdW4pCiAJCQkJCQkg ICAgJm5lZWRfY29tbWl0X2VkZ2VfaW5zZXJ0LAogCQkJCQkJICAgIHNoYWRv d192YXJzX21hcHBpbmcpOwogCQkgIGJyZWFrOworCQljYXNlIElGTl9IV0FT QU5fTUFSSzoKKwkJICBub19uZXh0ID0gaHdhc2FuX2V4cGFuZF9tYXJrX2lm biAoJmdzaSk7CisJCSAgYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCSAgYnJlYWs7 CiAJCX0KCg== --_002_VI1PR08MB5471728307526AD56137AE10E0BA0VI1PR08MB5471eurp_--