From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 57357 invoked by alias); 6 Sep 2019 14:46:32 -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 57237 invoked by uid 89); 6 Sep 2019 14:46:31 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.1 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: EUR03-AM5-obe.outbound.protection.outlook.com Received: from mail-eopbgr30052.outbound.protection.outlook.com (HELO EUR03-AM5-obe.outbound.protection.outlook.com) (40.107.3.52) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 06 Sep 2019 14:46:25 +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=ao5Sg7oGIy1ci+mqV/zSudwrwiP+FFB4BOKnOtTeolk=; b=ijYMQ43uO+FXuLHcItIpznJt5T9Kll5ei7pbbFNun63dffWO0WrOtqS8P6Md+Y59uVdOCKr3HrcytLz4XE/l6Sl2tFkNvKU5gCOev8o8aFblMNPuU0cG7czh9l3yA4b/y7WbQYKkc8aoL0rWw/6V5kRXzHoSdG3NALbzI+HwMzw= Received: from VI1PR0802CA0022.eurprd08.prod.outlook.com (2603:10a6:800:aa::32) by AM0SPR01MB0036.eurprd08.prod.outlook.com (2603:10a6:208:d5::12) 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:20 +0000 Received: from DB5EUR03FT017.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::201) by VI1PR0802CA0022.outlook.office365.com (2603:10a6:800:aa::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.13 via Frontend Transport; Fri, 6 Sep 2019 14:46:20 +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 DB5EUR03FT017.mail.protection.outlook.com (10.152.20.114) 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:18 +0000 Received: ("Tessian outbound ea3fc1501f20:v27"); Fri, 06 Sep 2019 14:46:18 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 3f48daa6dd930d9d X-CR-MTA-TID: 64aa7808 Received: from 93fd9dc78205.1 (cr-mta-lb-1.cr-mta-net [104.47.13.58]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id A921A651-51D7-4B0D-BA4B-C81355CCA858.1; Fri, 06 Sep 2019 14:46:13 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04lp2058.outbound.protection.outlook.com [104.47.13.58]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 93fd9dc78205.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 06 Sep 2019 14:46:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iIqkKjydMF+g059PxlGO3OsO+qCxFnrnXsJq/dBMoMXoHKaKv8zLL9lCcpESUmpGc/2Fh8WQUx04d4WlYZlHfkn5Z3TG8cmf8hR26OGt4rXga+qXNGFe391wITYWYQZ38mgiYBLotn55uUpHHFOUf+9q1+8fKgGUvEYkUjkBcIZscwQvTP2l74QJthd7OdmpeizdcPFf7K7Uk0jtxc19sKykbvwCmME8FEBrcFpy7+m3YS/yYZEP4ua8mj9ATbFvobJu2GbnCBa+TJXxtCx/yC6gQEl/I/Q7CYY0qTaYaWxVK95RIqlUQpeY5wNWy0JXIsy9xXsq505hizyV60bsCQ== 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=ao5Sg7oGIy1ci+mqV/zSudwrwiP+FFB4BOKnOtTeolk=; b=oWL/qyLci6jobqxHnU/8KZDOWAzKkt8Pxb2sOHsRpBmOFxnrwnN9pyfRjfPWXeFN0wrw4HqcXeZX3R0y7fzxEYKl7y3TjOrLuKWNJTMR3e08F/5z6ULdi7FEuySLjHTz7JEXzLAddn3HgYu1ojJHTS32g7yO4bsaCHmbMvf30rUrV5GBaB+LimyO/SHahbC8j26MitrrL1z2gMBITXTTEYCmMeq8NLyB7inFRLcnkG+rzVeIrnm1lUot7dJct7YLCUhHwTaqkJ/JJK+4RZGyNjdObkG0991rkOmB5Wlv13jXD9LPM1zCDNYPIqspWT3Y3NhvHP5ZbUXKZE4RkbH9xA== 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=ao5Sg7oGIy1ci+mqV/zSudwrwiP+FFB4BOKnOtTeolk=; b=ijYMQ43uO+FXuLHcItIpznJt5T9Kll5ei7pbbFNun63dffWO0WrOtqS8P6Md+Y59uVdOCKr3HrcytLz4XE/l6Sl2tFkNvKU5gCOev8o8aFblMNPuU0cG7czh9l3yA4b/y7WbQYKkc8aoL0rWw/6V5kRXzHoSdG3NALbzI+HwMzw= Received: from VI1PR08MB5471.eurprd08.prod.outlook.com (52.133.246.83) by VI1PR08MB3392.eurprd08.prod.outlook.com (20.177.58.222) 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:10 +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:10 +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 5/X][libsanitizer] Introduce longjmp/setjmp interceptors to libhwasan 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:VI1PR08MB3392; x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882; X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4636009)(376002)(39860400002)(136003)(396003)(346002)(366004)(54534003)(199004)(189003)(66476007)(66556008)(64756008)(66446008)(7696005)(81166006)(52536014)(5660300002)(2501003)(14454004)(25786009)(52116002)(55016002)(478600001)(86362001)(4326008)(99936001)(8936002)(81156014)(6916009)(66946007)(71200400001)(71190400001)(8676002)(66616009)(3846002)(446003)(476003)(6116002)(33656002)(11346002)(76176011)(30864003)(2906002)(53936002)(186003)(9686003)(6436002)(66066001)(256004)(14444005)(5024004)(5640700003)(54906003)(386003)(6506007)(44832011)(486006)(7736002)(74316002)(305945005)(316002)(99286004)(26005)(2351001)(102836004);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR08MB3392;H:VI1PR08MB5471.eurprd08.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX: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: ULPZE2MOBKFtPO8aJm8hvXRl4KpKURclSttAZSbrr+/J7wEHVy5AR7zseBkubzi5sXshRc+CkFot+QyzFxeFpGFjmY1BstKpqOOec27wVddobYxNGAPQlCW9ENfih68QZScVoeCtNBCnFd0ZWl92Sg19RVqglUF6xNkb0+1ldQHc/X1LNYqFZ2a3hdcCI042ri4E5LFLG2FR0EyD41BxE+SlGqk1oHmNQqjp1EFrtMpJmHZQg333jwb2oLHcKeip1yZ3LNtZJ0zZQNg1md3JzYwy8OjIBBk81Vb6Tv+40oCkdULer2qWBu6vZWY2kAwZRBcaUkkJMwg4xsGiwteInR7t/Rqq1uzo+mQDjizNX5/+scQf1ooo25jQdnpbdk0fdf41ZivC9qGEbRyL2ttClh4KRLr0G1cuNf/djbKxEnE= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_VI1PR08MB5471C70A576E542FE2952C25E0BA0VI1PR08MB5471eurp_" 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: DB5EUR03FT017.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 8cceec79-5adb-416b-3792-08d732d8f525 X-IsSubscribed: yes X-SW-Source: 2019-09/txt/msg00390.txt.bz2 --_002_VI1PR08MB5471C70A576E542FE2952C25E0BA0VI1PR08MB5471eurp_ Content-Type: text/plain; charset="us-ascii" Content-ID: Content-Transfer-Encoding: quoted-printable Content-length: 14361 When using hwasan to tag parameters on the stack, we need to ensure that the shadow stack is cleared upon exit of a function. If this is not done, then accesses to an untagged memory region (e.g. parameters passed on the stack) can end up being checked against a shadow region that was coloured for a variable some time in the past. Ensuring that the shadow stack is cleared on normal function exit will be done by adding instrumentation to the function epilogue through the compiler. longjmp and setjmp are some abnormal methods of exiting the function that can't be handled in the compiler since they can be called in uninstrumented code to unwind past instrumented function frames. This patch introduces some interceptors for setjmp and longjmp. This pair of functions only behaves differently to the glibc version by uncolouring the stack between the point where longjmp was called and the destination stack pointer. The file hwasan_interceptors.cc aims to include as little system headers as possible, since it defines interceptors for system functions and hence needs to use its own data structures that are independent of the current platform. To avoid including signal.h yet still be able to handle sigsetjmp we manually define a __sigset_t structure and similarly we define data structures to use for the intercepting setjmp/longjmp. libsanitizer/ChangeLog: 2019-09-06 Matthew Malcomson * hwasan/Makefile.am: Add hwasan_setjmp.S. * hwasan/Makefile.in: Regenerate. * hwasan/hwasan_interceptors.cc (_SIGSET_NWORDS): (struct __sigset_t): New structure. (struct __jmp_buf_tag): New structure. (sigprocmask): Declaration of system function. (SIG_BLOCK): New. (SIG_SETMASK): New. (__sigjmp_save): New. (__hwasan_internal_longjmp): longjmp that clears shadow tags. (siglongjmp): New interceptors. (__libc_longjmp): New interceptors. (longjmp): New interceptors. * hwasan/hwasan_setjmp.S: New file. ############### Attachment also inlined for ease of reply ##########= ##### diff --git a/libsanitizer/hwasan/Makefile.am b/libsanitizer/hwasan/Makefile= .am index 3754f435ce0342f5c8051f6ea44273bb811c9659..36c0fc4d9e832dfc81c72d2d05c= 2b327589daee2 100644 --- a/libsanitizer/hwasan/Makefile.am +++ b/libsanitizer/hwasan/Makefile.am @@ -13,6 +13,7 @@ ACLOCAL_AMFLAGS =3D -I $(top_srcdir) -I $(top_srcdir)/con= fig toolexeclib_LTLIBRARIES =3D libhwasan.la =20 hwasan_files =3D \ + hwasan_setjmp.S \ hwasan_allocator.cc \ hwasan.cc \ hwasan_dynamic_shadow.cc \ diff --git a/libsanitizer/hwasan/Makefile.in b/libsanitizer/hwasan/Makefile= .in index f89bc9e440502fcf8072d67aa61a4b63cd490b40..472fbf7d8d2a5311db8fe4c1437= 6f9213cdddde4 100644 --- a/libsanitizer/hwasan/Makefile.in +++ b/libsanitizer/hwasan/Makefile.in @@ -145,10 +145,10 @@ am__DEPENDENCIES_1 =3D libhwasan_la_DEPENDENCIES =3D \ $(top_builddir)/sanitizer_common/libsanitizer_common.la \ $(am__append_1) $(am__append_2) $(am__DEPENDENCIES_1) -am__objects_1 =3D hwasan_allocator.lo hwasan.lo hwasan_dynamic_shadow.lo \ - hwasan_interceptors.lo hwasan_linux.lo hwasan_new_delete.lo \ - hwasan_poisoning.lo hwasan_report.lo hwasan_thread.lo \ - hwasan_thread_list.lo +am__objects_1 =3D hwasan_setjmp.lo hwasan_allocator.lo hwasan.lo \ + hwasan_dynamic_shadow.lo hwasan_interceptors.lo \ + hwasan_linux.lo hwasan_new_delete.lo hwasan_poisoning.lo \ + hwasan_report.lo hwasan_thread.lo hwasan_thread_list.lo am_libhwasan_la_OBJECTS =3D $(am__objects_1) libhwasan_la_OBJECTS =3D $(am_libhwasan_la_OBJECTS) AM_V_lt =3D $(am__v_lt_@AM_V@) @@ -174,6 +174,16 @@ DEFAULT_INCLUDES =3D -I.@am__isrc@ -I$(top_builddir) depcomp =3D $(SHELL) $(top_srcdir)/../depcomp am__depfiles_maybe =3D depfiles am__mv =3D mv -f +CPPASCOMPILE =3D $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) +LTCPPASCOMPILE =3D $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=3Dcompile $(CCAS) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CCASFLAGS) $(CCASFLAGS) +AM_V_CPPAS =3D $(am__v_CPPAS_@AM_V@) +am__v_CPPAS_ =3D $(am__v_CPPAS_@AM_DEFAULT_V@) +am__v_CPPAS_0 =3D @echo " CPPAS " $@; +am__v_CPPAS_1 =3D=20 CXXCOMPILE =3D $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE =3D $(LIBTOOL) $(AM_V_lt) --tag=3DCXX $(AM_LIBTOOLFLAGS) \ @@ -192,6 +202,24 @@ AM_V_CXXLD =3D $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ =3D $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 =3D @echo " CXXLD " $@; am__v_CXXLD_1 =3D=20 +COMPILE =3D $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE =3D $(LIBTOOL) $(AM_V_lt) --tag=3DCC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=3Dcompile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC =3D $(am__v_CC_@AM_V@) +am__v_CC_ =3D $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 =3D @echo " CC " $@; +am__v_CC_1 =3D=20 +CCLD =3D $(CC) +LINK =3D $(LIBTOOL) $(AM_V_lt) --tag=3DCC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=3Dlink $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD =3D $(am__v_CCLD_@AM_V@) +am__v_CCLD_ =3D $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 =3D @echo " CCLD " $@; +am__v_CCLD_1 =3D=20 SOURCES =3D $(libhwasan_la_SOURCES) am__can_run_installinfo =3D \ case $$AM_UPDATE_INFO_DIR in \ @@ -380,6 +408,7 @@ AM_CXXFLAGS =3D -Wall -W -Wno-unused-parameter -Wwrite-= strings -pedantic \ ACLOCAL_AMFLAGS =3D -I $(top_srcdir) -I $(top_srcdir)/config toolexeclib_LTLIBRARIES =3D libhwasan.la hwasan_files =3D \ + hwasan_setjmp.S \ hwasan_allocator.cc \ hwasan.cc \ hwasan_dynamic_shadow.cc \ @@ -439,7 +468,7 @@ MAKEOVERRIDES =3D all: all-am =20 .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj +.SUFFIXES: .S .cc .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am_= _configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -522,9 +551,31 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwasan_new_delete.Plo@am_= _quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwasan_poisoning.Plo@am__= quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwasan_report.Plo@am__quo= te@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwasan_setjmp.Plo@am__quo= te@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwasan_thread.Plo@am__quo= te@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwasan_thread_list.Plo@am= __quote@ =20 +.S.o: +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -MT $@ -MD -MP -MF $(D= EPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source=3D'$<' object=3D'$= @' libtool=3Dno @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=3D$(DEPDIR) $(CCASDEPMODE) $(de= pcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $< + +.S.obj: +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -MT $@ -MD -MP -MF $(D= EPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source=3D'$<' object=3D'$= @' libtool=3Dno @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=3D$(DEPDIR) $(CCASDEPMODE) $(de= pcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `= $(CYGPATH_W) '$<'` + +.S.lo: +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $= (DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.P= lo +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source=3D'$<' object=3D'$= @' libtool=3Dyes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=3D$(DEPDIR) $(CCASDEPMODE) $(de= pcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(LTCPPASCOMPILE) -c -o $@= $< + .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR= )/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po diff --git a/libsanitizer/hwasan/hwasan_interceptors.cc b/libsanitizer/hwas= an/hwasan_interceptors.cc index 9a0770f563b7948644cb10cdd0f88edc79f786d5..2edfba5d4ba065ca1dd09400c18= 2962ecff5d9ca 100644 --- a/libsanitizer/hwasan/hwasan_interceptors.cc +++ b/libsanitizer/hwasan/hwasan_interceptors.cc @@ -284,6 +284,107 @@ INTERCEPTOR(int, pthread_create, void *th, void *attr= , void *(*callback)(void*), &HwasanThreadStartFunc, A); return res; } + + +#if defined(__aarch64__) +/* + Setjmp and longjmp implementations are platform specific, and hence the + interception code is platform specific too. As yet we've only implemen= ted + the interception for AArch64. + */ +# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int))) +typedef struct + { + unsigned long int __val[_SIGSET_NWORDS]; + } __sigset_t; + +#undef _SIGSET_NWORDS +typedef __sigset_t sigset_t; +typedef unsigned long long __jmp_buf [22]; +struct __jmp_buf_tag + { + /* NOTE: The machine-dependent definitions of `__sigsetjmp' + assume that a `jmp_buf' begins with a `__jmp_buf' and that + `__mask_was_saved' follows it. Do not move these members + or add others before it. */ + __jmp_buf __jmpbuf; /* Calling environment. */ + int __mask_was_saved; /* Saved the signal mask? */ + __sigset_t __saved_mask; /* Saved signal mask. */ + }; +typedef struct __jmp_buf_tag jmp_buf[1]; +typedef struct __jmp_buf_tag sigjmp_buf[1]; + +/* Get and/or change the set of blocked signals. */ +extern "C" int sigprocmask (int __how, const sigset_t *__restrict __set, + sigset_t *__restrict __oset); +#define SIG_BLOCK 0 +#define SIG_SETMASK 2 +extern "C" int __sigjmp_save (sigjmp_buf env, int savemask) +{ + env[0].__mask_was_saved =3D (savemask + && sigprocmask (SIG_BLOCK, (sigset_t *) 0, + (sigset_t *) &env[0].__saved_mask) =3D=3D 0); + return 0; +} + +static void __attribute__ ((always_inline)) +__hwasan_internal_longjmp (__jmp_buf env, int retval) +{ + /* Clear all memory tags on the stack between here and where we're going= . */ + unsigned long long stack_pointer =3D env[13]; + /* The stack pointer should never be tagged, so we don't need to clear t= he + tag for this function call. */ + __hwasan_handle_longjmp ((void *)stack_pointer); + + /* Run code for handling a longjmp. + Need to use a register that isn't going to be loaded from the environ= ment + buffer -- hence why we need to specify the register to use. */ + register int retval_tmp asm ("x1") =3D retval; + register void *env_address asm ("x0") =3D &env[0]; + asm volatile ( + "ldp x19, x20, [%0, #0<<3];" + "ldp x21, x22, [%0, #2<<3];" + "ldp x23, x24, [%0, #4<<3];" + "ldp x25, x26, [%0, #6<<3];" + "ldp x27, x28, [%0, #8<<3];" + "ldp x29, x30, [%0, #10<<3];" + "ldp d8, d9, [%0, #14<<3];" + "ldp d10, d11, [%0, #16<<3];" + "ldp d12, d13, [%0, #18<<3];" + "ldp d14, d15, [%0, #20<<3];" + "ldr x5, [%0, #13<<3];" + "mov sp, x5;" + /* Return the value requested to return through arguments. + This should be in x1 given what we requested above. */ + "cmp %1, #0;" + "mov x0, #1;" + "csel x0, %1, x0, ne;" + "br x30;" : "+r" (env_address) : "r" (retval_tmp)); +} + +INTERCEPTOR(void, siglongjmp, sigjmp_buf env, int val) +{ + if (env[0].__mask_was_saved) + /* Restore the saved signal mask. */ + (void) sigprocmask (SIG_SETMASK, + (sigset_t *) &env[0].__saved_mask, + (sigset_t *) 0); + __hwasan_internal_longjmp (env[0].__jmpbuf, val); +} + +INTERCEPTOR(void, __libc_longjmp, jmp_buf env, int val) +{ + __hwasan_internal_longjmp (env[0].__jmpbuf, val); +} + +INTERCEPTOR(void, longjmp, jmp_buf env, int val) +{ + __hwasan_internal_longjmp (env[0].__jmpbuf, val); +} +#undef SIG_BLOCK +#undef SIG_SETMASK + +#endif // __aarch64__ #endif // HWASAN_WITH_INTERCEPTORS =20 static void BeforeFork() { @@ -302,7 +403,6 @@ INTERCEPTOR(int, fork, void) { return pid; } =20 - struct HwasanInterceptorContext { bool in_interceptor_scope; }; @@ -325,6 +425,11 @@ void InitializeInterceptors() { INTERCEPT_FUNCTION(fork); =20 #if HWASAN_WITH_INTERCEPTORS +#if defined(__aarch64__) + INTERCEPT_FUNCTION(longjmp); + INTERCEPT_FUNCTION(__libc_longjmp); + INTERCEPT_FUNCTION(siglongjmp); +#endif INTERCEPT_FUNCTION(pthread_create); #endif =20 diff --git a/libsanitizer/hwasan/hwasan_setjmp.S b/libsanitizer/hwasan/hwas= an_setjmp.S new file mode 100644 index 0000000000000000000000000000000000000000..56add3e149abcc37ec23b8cdc8f= 4ba2cbc722c08 --- /dev/null +++ b/libsanitizer/hwasan/hwasan_setjmp.S @@ -0,0 +1,52 @@ +// We want to save the context of the calling function. +// That requires +// 1) No modification of the link register by this function. +// 2) No modification of the stack pointer by this function. +// 3) (no modification of any other saved register, but that's not really = going +// to occur, and hence isn't as much of a worry). +// +// There's essentially no way to ensure that the compiler will not modify = the +// stack pointer when compiling a C function. +// Hence we have to write this function in assembly. + +#if HWASAN_WITH_INTERCEPTORS && defined(__aarch64__) + +.macro ENTRY symbol + .align 2 + .global \symbol + .type \symbol\(), %function +\symbol\(): + .cfi_startproc +.endm + +.macro END symbol + .cfi_endproc + .size \symbol, .-\symbol +.endm + +ENTRY _setjmp +mov x1, #0 +b 1f +END _setjmp + +ENTRY __sigsetjmp +1: + stp x19, x20, [x0, #0<<3] + stp x21, x22, [x0, #2<<3] + stp x23, x24, [x0, #4<<3] + stp x25, x26, [x0, #6<<3] + stp x27, x28, [x0, #8<<3] + stp x29, x30, [x0, #10<<3] + stp d8, d9, [x0, #14<<3] + stp d10, d11, [x0, #16<<3] + stp d12, d13, [x0, #18<<3] + stp d14, d15, [x0, #20<<3] + mov x2, sp + str x2, [x0, #13<<3] + // We always have the second argument to __sigjmp_save (savemask) set, s= ince + // the _setjmp function above has set it for us as `false`. + // This function is defined in hwasan_interceptors.cc + b __sigjmp_save +END __sigsetjmp + +#endif --_002_VI1PR08MB5471C70A576E542FE2952C25E0BA0VI1PR08MB5471eurp_ Content-Type: text/plain; name="hwasan-implementation04.patch" Content-Description: hwasan-implementation04.patch Content-Disposition: attachment; filename="hwasan-implementation04.patch"; size=12085; creation-date="Fri, 06 Sep 2019 14:46:10 GMT"; modification-date="Fri, 06 Sep 2019 14:46:10 GMT" Content-ID: <7B25A4805CC589419456C7F34DF431EC@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 Content-length: 16385 ZGlmZiAtLWdpdCBhL2xpYnNhbml0aXplci9od2FzYW4vTWFrZWZpbGUuYW0g Yi9saWJzYW5pdGl6ZXIvaHdhc2FuL01ha2VmaWxlLmFtCmluZGV4IDM3NTRm NDM1Y2UwMzQyZjVjODA1MWY2ZWE0NDI3M2JiODExYzk2NTkuLjM2YzBmYzRk OWU4MzJkZmM4MWM3MmQyZDA1YzJiMzI3NTg5ZGFlZTIgMTAwNjQ0Ci0tLSBh L2xpYnNhbml0aXplci9od2FzYW4vTWFrZWZpbGUuYW0KKysrIGIvbGlic2Fu aXRpemVyL2h3YXNhbi9NYWtlZmlsZS5hbQpAQCAtMTMsNiArMTMsNyBAQCBB Q0xPQ0FMX0FNRkxBR1MgPSAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3Ny Y2RpcikvY29uZmlnCiB0b29sZXhlY2xpYl9MVExJQlJBUklFUyA9IGxpYmh3 YXNhbi5sYQogCiBod2FzYW5fZmlsZXMgPSBcCisJICAgICAgIGh3YXNhbl9z ZXRqbXAuUyBcCiAJICAgICAgIGh3YXNhbl9hbGxvY2F0b3IuY2MgXAogCSAg ICAgICBod2FzYW4uY2MgXAogCSAgICAgICBod2FzYW5fZHluYW1pY19zaGFk b3cuY2MgXApkaWZmIC0tZ2l0IGEvbGlic2FuaXRpemVyL2h3YXNhbi9NYWtl ZmlsZS5pbiBiL2xpYnNhbml0aXplci9od2FzYW4vTWFrZWZpbGUuaW4KaW5k ZXggZjg5YmM5ZTQ0MDUwMmZjZjgwNzJkNjdhYTYxYTRiNjNjZDQ5MGI0MC4u NDcyZmJmN2Q4ZDJhNTMxMWRiOGZlNGMxNDM3NmY5MjEzY2RkZGRlNCAxMDA2 NDQKLS0tIGEvbGlic2FuaXRpemVyL2h3YXNhbi9NYWtlZmlsZS5pbgorKysg Yi9saWJzYW5pdGl6ZXIvaHdhc2FuL01ha2VmaWxlLmluCkBAIC0xNDUsMTAg KzE0NSwxMCBAQCBhbV9fREVQRU5ERU5DSUVTXzEgPQogbGliaHdhc2FuX2xh X0RFUEVOREVOQ0lFUyA9ICBcCiAJJCh0b3BfYnVpbGRkaXIpL3Nhbml0aXpl cl9jb21tb24vbGlic2FuaXRpemVyX2NvbW1vbi5sYSBcCiAJJChhbV9fYXBw ZW5kXzEpICQoYW1fX2FwcGVuZF8yKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkK LWFtX19vYmplY3RzXzEgPSBod2FzYW5fYWxsb2NhdG9yLmxvIGh3YXNhbi5s byBod2FzYW5fZHluYW1pY19zaGFkb3cubG8gXAotCWh3YXNhbl9pbnRlcmNl cHRvcnMubG8gaHdhc2FuX2xpbnV4LmxvIGh3YXNhbl9uZXdfZGVsZXRlLmxv IFwKLQlod2FzYW5fcG9pc29uaW5nLmxvIGh3YXNhbl9yZXBvcnQubG8gaHdh c2FuX3RocmVhZC5sbyBcCi0JaHdhc2FuX3RocmVhZF9saXN0LmxvCithbV9f b2JqZWN0c18xID0gaHdhc2FuX3NldGptcC5sbyBod2FzYW5fYWxsb2NhdG9y LmxvIGh3YXNhbi5sbyBcCisJaHdhc2FuX2R5bmFtaWNfc2hhZG93LmxvIGh3 YXNhbl9pbnRlcmNlcHRvcnMubG8gXAorCWh3YXNhbl9saW51eC5sbyBod2Fz YW5fbmV3X2RlbGV0ZS5sbyBod2FzYW5fcG9pc29uaW5nLmxvIFwKKwlod2Fz YW5fcmVwb3J0LmxvIGh3YXNhbl90aHJlYWQubG8gaHdhc2FuX3RocmVhZF9s aXN0LmxvCiBhbV9saWJod2FzYW5fbGFfT0JKRUNUUyA9ICQoYW1fX29iamVj dHNfMSkKIGxpYmh3YXNhbl9sYV9PQkpFQ1RTID0gJChhbV9saWJod2FzYW5f bGFfT0JKRUNUUykKIEFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKQEAg LTE3NCw2ICsxNzQsMTYgQEAgREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9f aXNyY0AgLUkkKHRvcF9idWlsZGRpcikKIGRlcGNvbXAgPSAkKFNIRUxMKSAk KHRvcF9zcmNkaXIpLy4uL2RlcGNvbXAKIGFtX19kZXBmaWxlc19tYXliZSA9 IGRlcGZpbGVzCiBhbV9fbXYgPSBtdiAtZgorQ1BQQVNDT01QSUxFID0gJChD Q0FTKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykg XAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0NBU0ZMQUdT KSAkKENDQVNGTEFHUykKK0xUQ1BQQVNDT01QSUxFID0gJChMSUJUT09MKSAk KEFNX1ZfbHQpICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxB R1MpIC0tbW9kZT1jb21waWxlICQoQ0NBUykgJChERUZTKSBcCisJJChERUZB VUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQ UEZMQUdTKSBcCisJJChBTV9DQ0FTRkxBR1MpICQoQ0NBU0ZMQUdTKQorQU1f Vl9DUFBBUyA9ICQoYW1fX3ZfQ1BQQVNfQEFNX1ZAKQorYW1fX3ZfQ1BQQVNf ID0gJChhbV9fdl9DUFBBU19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NQUEFT XzAgPSBAZWNobyAiICBDUFBBUyAgICIgJEA7CithbV9fdl9DUFBBU18xID0g CiBDWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xV REVTKSAkKElOQ0xVREVTKSBcCiAJJChBTV9DUFBGTEFHUykgJChDUFBGTEFH UykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKIExUQ1hYQ09NUElMRSA9 ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09M RkxBR1MpIFwKQEAgLTE5Miw2ICsyMDIsMjQgQEAgQU1fVl9DWFhMRCA9ICQo YW1fX3ZfQ1hYTERfQEFNX1ZAKQogYW1fX3ZfQ1hYTERfID0gJChhbV9fdl9D WFhMRF9AQU1fREVGQVVMVF9WQCkKIGFtX192X0NYWExEXzAgPSBAZWNobyAi ICBDWFhMRCAgICIgJEA7CiBhbV9fdl9DWFhMRF8xID0gCitDT01QSUxFID0g JChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMp ICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykg JChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkg LS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFH UykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxU X0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZM QUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQo YW1fX3ZfQ0NfQEFNX1ZAKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1f REVGQVVMVF9WQCkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIg JEA7CithbV9fdl9DQ18xID0gCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJ QlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1Mp IFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFN X0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFH UykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCith bV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2Ft X192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKK2FtX192X0ND TERfMSA9IAogU09VUkNFUyA9ICQobGliaHdhc2FuX2xhX1NPVVJDRVMpCiBh bV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKICAgY2FzZSAkJEFNX1VQREFU RV9JTkZPX0RJUiBpbiBcCkBAIC0zODAsNiArNDA4LDcgQEAgQU1fQ1hYRkxB R1MgPSAtV2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVd3cml0ZS1z dHJpbmdzIC1wZWRhbnRpYyBcCiBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSAkKHRv cF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvY29uZmlnCiB0b29sZXhlY2xp Yl9MVExJQlJBUklFUyA9IGxpYmh3YXNhbi5sYQogaHdhc2FuX2ZpbGVzID0g XAorCSAgICAgICBod2FzYW5fc2V0am1wLlMgXAogCSAgICAgICBod2FzYW5f YWxsb2NhdG9yLmNjIFwKIAkgICAgICAgaHdhc2FuLmNjIFwKIAkgICAgICAg aHdhc2FuX2R5bmFtaWNfc2hhZG93LmNjIFwKQEAgLTQzOSw3ICs0NjgsNyBA QCBNQUtFT1ZFUlJJREVTID0KIGFsbDogYWxsLWFtCiAKIC5TVUZGSVhFUzoK LS5TVUZGSVhFUzogLmNjIC5sbyAubyAub2JqCisuU1VGRklYRVM6IC5TIC5j YyAubG8gLm8gLm9iagogJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRB SU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9f Y29uZmlndXJlX2RlcHMpCiAJQGZvciBkZXAgaW4gJD87IGRvIFwKIAkgIGNh c2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXApAQCAtNTIyLDkgKzU1 MSwzMSBAQCBkaXN0Y2xlYW4tY29tcGlsZToKIEBBTURFUF9UUlVFQEBhbV9f aW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9od2FzYW5fbmV3X2Rl bGV0ZS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRl QCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2h3YXNhbl9wb2lzb25pbmcuUGxv QGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19x dW90ZUAuLyQoREVQRElSKS9od2FzYW5fcmVwb3J0LlBsb0BhbV9fcXVvdGVA CitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERF UERJUikvaHdhc2FuX3NldGptcC5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RS VUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2h3YXNh bl90aHJlYWQuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5j bHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9od2FzYW5fdGhyZWFkX2xp c3QuUGxvQGFtX19xdW90ZUAKIAorLlMubzoKK0BhbV9fZmFzdGRlcENDQVNf VFJVRUAJJChBTV9WX0NQUEFTKSQoQ1BQQVNDT01QSUxFKSAtTVQgJEAgLU1E IC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19m YXN0ZGVwQ0NBU19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElS KS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zh c3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVMpc291cmNlPSckPCcgb2Jq ZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBf VFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlERVBESVI9JChERVBESVIp ICQoQ0NBU0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAor QGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChBTV9WX0NQUEFTQGFtX19ub2Rl cEApJChDUFBBU0NPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5TLm9iajoKK0Bh bV9fZmFzdGRlcENDQVNfVFJVRUAJJChBTV9WX0NQUEFTKSQoQ1BQQVNDT01Q SUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAt byAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ0FTX1RS VUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERF UERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFM U0VACSQoQU1fVl9DUFBBUylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0 b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFz dGRlcENDQVNfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0FTREVQTU9E RSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBD Q0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVNAYW1fX25vZGVwQCkkKENQUEFTQ09N UElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuUy5sbzoK K0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChBTV9WX0NQUEFTKSQoTFRDUFBB U0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBv IC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQU1fVl9h dCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxv CitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1Zf Q1BQQVMpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFN REVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19G QUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNv bXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDQVNfRkFMU0VA CSQoQU1fVl9DUFBBU0BhbV9fbm9kZXBAKSQoTFRDUFBBU0NPTVBJTEUpIC1j IC1vICRAICQ8CisKIC5jYy5vOgogQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQo QU1fVl9DWFgpJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChE RVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAogQGFtX19mYXN0ZGVwQ1hYX1RS VUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERF UERJUikvJCouUG8KZGlmZiAtLWdpdCBhL2xpYnNhbml0aXplci9od2FzYW4v aHdhc2FuX2ludGVyY2VwdG9ycy5jYyBiL2xpYnNhbml0aXplci9od2FzYW4v aHdhc2FuX2ludGVyY2VwdG9ycy5jYwppbmRleCA5YTA3NzBmNTYzYjc5NDg2 NDRjYjEwY2RkMGY4OGVkYzc5Zjc4NmQ1Li4yZWRmYmE1ZDRiYTA2NWNhMWRk MDk0MDBjMTgyOTYyZWNmZjVkOWNhIDEwMDY0NAotLS0gYS9saWJzYW5pdGl6 ZXIvaHdhc2FuL2h3YXNhbl9pbnRlcmNlcHRvcnMuY2MKKysrIGIvbGlic2Fu aXRpemVyL2h3YXNhbi9od2FzYW5faW50ZXJjZXB0b3JzLmNjCkBAIC0yODQs NiArMjg0LDEwNyBAQCBJTlRFUkNFUFRPUihpbnQsIHB0aHJlYWRfY3JlYXRl LCB2b2lkICp0aCwgdm9pZCAqYXR0ciwgdm9pZCAqKCpjYWxsYmFjaykodm9p ZCopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh3YXNh blRocmVhZFN0YXJ0RnVuYywgQSk7CiAgIHJldHVybiByZXM7CiB9CisKKwor I2lmIGRlZmluZWQoX19hYXJjaDY0X18pCisvKgorICAgU2V0am1wIGFuZCBs b25nam1wIGltcGxlbWVudGF0aW9ucyBhcmUgcGxhdGZvcm0gc3BlY2lmaWMs IGFuZCBoZW5jZSB0aGUKKyAgIGludGVyY2VwdGlvbiBjb2RlIGlzIHBsYXRm b3JtIHNwZWNpZmljIHRvby4gIEFzIHlldCB3ZSd2ZSBvbmx5IGltcGxlbWVu dGVkCisgICB0aGUgaW50ZXJjZXB0aW9uIGZvciBBQXJjaDY0LgorICovCisj IGRlZmluZSBfU0lHU0VUX05XT1JEUwkoMTAyNCAvICg4ICogc2l6ZW9mICh1 bnNpZ25lZCBsb25nIGludCkpKQordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAg IHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsW19TSUdTRVRfTldPUkRTXTsKKyAg fSBfX3NpZ3NldF90OworCisjdW5kZWYgX1NJR1NFVF9OV09SRFMKK3R5cGVk ZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9u ZyBsb25nIF9fam1wX2J1ZiBbMjJdOworc3RydWN0IF9fam1wX2J1Zl90YWcK KyAgeworICAgIC8qIE5PVEU6IFRoZSBtYWNoaW5lLWRlcGVuZGVudCBkZWZp bml0aW9ucyBvZiBgX19zaWdzZXRqbXAnCisgICAgICAgYXNzdW1lIHRoYXQg YSBgam1wX2J1ZicgYmVnaW5zIHdpdGggYSBgX19qbXBfYnVmJyBhbmQgdGhh dAorICAgICAgIGBfX21hc2tfd2FzX3NhdmVkJyBmb2xsb3dzIGl0LiAgRG8g bm90IG1vdmUgdGhlc2UgbWVtYmVycworICAgICAgIG9yIGFkZCBvdGhlcnMg YmVmb3JlIGl0LiAgKi8KKyAgICBfX2ptcF9idWYgX19qbXBidWY7CQkvKiBD YWxsaW5nIGVudmlyb25tZW50LiAgKi8KKyAgICBpbnQgX19tYXNrX3dhc19z YXZlZDsJLyogU2F2ZWQgdGhlIHNpZ25hbCBtYXNrPyAgKi8KKyAgICBfX3Np Z3NldF90IF9fc2F2ZWRfbWFzazsJLyogU2F2ZWQgc2lnbmFsIG1hc2suICAq LworICB9OwordHlwZWRlZiBzdHJ1Y3QgX19qbXBfYnVmX3RhZyBqbXBfYnVm WzFdOwordHlwZWRlZiBzdHJ1Y3QgX19qbXBfYnVmX3RhZyBzaWdqbXBfYnVm WzFdOworCisvKiBHZXQgYW5kL29yIGNoYW5nZSB0aGUgc2V0IG9mIGJsb2Nr ZWQgc2lnbmFscy4gICovCitleHRlcm4gIkMiIGludCBzaWdwcm9jbWFzayAo aW50IF9faG93LCBjb25zdCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwK KwkJCXNpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb3NldCk7CisjZGVmaW5lIFNJ R19CTE9DSyAwCisjZGVmaW5lIFNJR19TRVRNQVNLIDIKK2V4dGVybiAiQyIg aW50IF9fc2lnam1wX3NhdmUgKHNpZ2ptcF9idWYgZW52LCBpbnQgc2F2ZW1h c2spCit7CisgIGVudlswXS5fX21hc2tfd2FzX3NhdmVkID0gKHNhdmVtYXNr CisJCQkgICAgICYmIHNpZ3Byb2NtYXNrIChTSUdfQkxPQ0ssIChzaWdzZXRf dCAqKSAwLAorCQkJCQkgICAgIChzaWdzZXRfdCAqKSAmZW52WzBdLl9fc2F2 ZWRfbWFzaykgPT0gMCk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCitfX2h3YXNhbl9p bnRlcm5hbF9sb25nam1wIChfX2ptcF9idWYgZW52LCBpbnQgcmV0dmFsKQor eworICAvKiBDbGVhciBhbGwgbWVtb3J5IHRhZ3Mgb24gdGhlIHN0YWNrIGJl dHdlZW4gaGVyZSBhbmQgd2hlcmUgd2UncmUgZ29pbmcuICAqLworICB1bnNp Z25lZCBsb25nIGxvbmcgc3RhY2tfcG9pbnRlciA9IGVudlsxM107CisgIC8q IFRoZSBzdGFjayBwb2ludGVyIHNob3VsZCBuZXZlciBiZSB0YWdnZWQsIHNv IHdlIGRvbid0IG5lZWQgdG8gY2xlYXIgdGhlCisgICAgIHRhZyBmb3IgdGhp cyBmdW5jdGlvbiBjYWxsLiAgKi8KKyAgX19od2FzYW5faGFuZGxlX2xvbmdq bXAgKCh2b2lkICopc3RhY2tfcG9pbnRlcik7CisKKyAgLyogUnVuIGNvZGUg Zm9yIGhhbmRsaW5nIGEgbG9uZ2ptcC4KKyAgICAgTmVlZCB0byB1c2UgYSBy ZWdpc3RlciB0aGF0IGlzbid0IGdvaW5nIHRvIGJlIGxvYWRlZCBmcm9tIHRo ZSBlbnZpcm9ubWVudAorICAgICBidWZmZXIgLS0gaGVuY2Ugd2h5IHdlIG5l ZWQgdG8gc3BlY2lmeSB0aGUgcmVnaXN0ZXIgdG8gdXNlLiAgKi8KKyAgcmVn aXN0ZXIgaW50IHJldHZhbF90bXAgYXNtICgieDEiKSA9IHJldHZhbDsKKyAg cmVnaXN0ZXIgdm9pZCAqZW52X2FkZHJlc3MgYXNtICgieDAiKSA9ICZlbnZb MF07CisgIGFzbSB2b2xhdGlsZSAoCisJImxkcAl4MTksIHgyMCwgWyUwLCAj MDw8M107IgorCSJsZHAJeDIxLCB4MjIsIFslMCwgIzI8PDNdOyIKKwkibGRw CXgyMywgeDI0LCBbJTAsICM0PDwzXTsiCisJImxkcAl4MjUsIHgyNiwgWyUw LCAjNjw8M107IgorCSJsZHAJeDI3LCB4MjgsIFslMCwgIzg8PDNdOyIKKwki bGRwCXgyOSwgeDMwLCBbJTAsICMxMDw8M107IgorCSJsZHAJIGQ4LCAgZDks IFslMCwgIzE0PDwzXTsiCisJImxkcAlkMTAsIGQxMSwgWyUwLCAjMTY8PDNd OyIKKwkibGRwCWQxMiwgZDEzLCBbJTAsICMxODw8M107IgorCSJsZHAJZDE0 LCBkMTUsIFslMCwgIzIwPDwzXTsiCisJImxkcgl4NSwgWyUwLCAjMTM8PDNd OyIKKwkibW92CXNwLCB4NTsiCisJLyogUmV0dXJuIHRoZSB2YWx1ZSByZXF1 ZXN0ZWQgdG8gcmV0dXJuIHRocm91Z2ggYXJndW1lbnRzLgorCSAgIFRoaXMg c2hvdWxkIGJlIGluIHgxIGdpdmVuIHdoYXQgd2UgcmVxdWVzdGVkIGFib3Zl LiAgKi8KKwkiY21wCSUxLCAjMDsiCisJIm1vdgl4MCwgIzE7IgorCSJjc2Vs CXgwLCAlMSwgeDAsIG5lOyIKKwkiYnIJeDMwOyIgOiAiK3IiIChlbnZfYWRk cmVzcykgOiAiciIgKHJldHZhbF90bXApKTsKK30KKworSU5URVJDRVBUT1Io dm9pZCwgc2lnbG9uZ2ptcCwgc2lnam1wX2J1ZiBlbnYsIGludCB2YWwpCit7 CisgIGlmIChlbnZbMF0uX19tYXNrX3dhc19zYXZlZCkKKyAgICAvKiBSZXN0 b3JlIHRoZSBzYXZlZCBzaWduYWwgbWFzay4gICovCisgICAgKHZvaWQpIHNp Z3Byb2NtYXNrIChTSUdfU0VUTUFTSywKKwkJCShzaWdzZXRfdCAqKSAmZW52 WzBdLl9fc2F2ZWRfbWFzaywKKwkJCShzaWdzZXRfdCAqKSAwKTsKKyAgX19o d2FzYW5faW50ZXJuYWxfbG9uZ2ptcCAoZW52WzBdLl9fam1wYnVmLCB2YWwp OworfQorCitJTlRFUkNFUFRPUih2b2lkLCBfX2xpYmNfbG9uZ2ptcCwgam1w X2J1ZiBlbnYsIGludCB2YWwpCit7CisgIF9faHdhc2FuX2ludGVybmFsX2xv bmdqbXAgKGVudlswXS5fX2ptcGJ1ZiwgdmFsKTsKK30KKworSU5URVJDRVBU T1Iodm9pZCwgbG9uZ2ptcCwgam1wX2J1ZiBlbnYsIGludCB2YWwpCit7Cisg IF9faHdhc2FuX2ludGVybmFsX2xvbmdqbXAgKGVudlswXS5fX2ptcGJ1Ziwg dmFsKTsKK30KKyN1bmRlZiBTSUdfQkxPQ0sKKyN1bmRlZiBTSUdfU0VUTUFT SworCisjZW5kaWYgLy8gX19hYXJjaDY0X18KICNlbmRpZiAvLyBIV0FTQU5f V0lUSF9JTlRFUkNFUFRPUlMKIAogc3RhdGljIHZvaWQgQmVmb3JlRm9yaygp IHsKQEAgLTMwMiw3ICs0MDMsNiBAQCBJTlRFUkNFUFRPUihpbnQsIGZvcmss IHZvaWQpIHsKICAgcmV0dXJuIHBpZDsKIH0KIAotCiBzdHJ1Y3QgSHdhc2Fu SW50ZXJjZXB0b3JDb250ZXh0IHsKICAgYm9vbCBpbl9pbnRlcmNlcHRvcl9z Y29wZTsKIH07CkBAIC0zMjUsNiArNDI1LDExIEBAIHZvaWQgSW5pdGlhbGl6 ZUludGVyY2VwdG9ycygpIHsKICAgSU5URVJDRVBUX0ZVTkNUSU9OKGZvcmsp OwogCiAjaWYgSFdBU0FOX1dJVEhfSU5URVJDRVBUT1JTCisjaWYgZGVmaW5l ZChfX2FhcmNoNjRfXykKKyAgSU5URVJDRVBUX0ZVTkNUSU9OKGxvbmdqbXAp OworICBJTlRFUkNFUFRfRlVOQ1RJT04oX19saWJjX2xvbmdqbXApOworICBJ TlRFUkNFUFRfRlVOQ1RJT04oc2lnbG9uZ2ptcCk7CisjZW5kaWYKICAgSU5U RVJDRVBUX0ZVTkNUSU9OKHB0aHJlYWRfY3JlYXRlKTsKICNlbmRpZgogCmRp ZmYgLS1naXQgYS9saWJzYW5pdGl6ZXIvaHdhc2FuL2h3YXNhbl9zZXRqbXAu UyBiL2xpYnNhbml0aXplci9od2FzYW4vaHdhc2FuX3NldGptcC5TCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjU2YWRkM2UxNDlhYmNjMzdlYzIzYjhjZGM4 ZjRiYTJjYmM3MjJjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzYW5pdGl6 ZXIvaHdhc2FuL2h3YXNhbl9zZXRqbXAuUwpAQCAtMCwwICsxLDUyIEBACisv LyBXZSB3YW50IHRvIHNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxpbmcg ZnVuY3Rpb24uCisvLyBUaGF0IHJlcXVpcmVzCisvLyAxKSBObyBtb2RpZmlj YXRpb24gb2YgdGhlIGxpbmsgcmVnaXN0ZXIgYnkgdGhpcyBmdW5jdGlvbi4K Ky8vIDIpIE5vIG1vZGlmaWNhdGlvbiBvZiB0aGUgc3RhY2sgcG9pbnRlciBi eSB0aGlzIGZ1bmN0aW9uLgorLy8gMykgKG5vIG1vZGlmaWNhdGlvbiBvZiBh bnkgb3RoZXIgc2F2ZWQgcmVnaXN0ZXIsIGJ1dCB0aGF0J3Mgbm90IHJlYWxs eSBnb2luZworLy8gdG8gb2NjdXIsIGFuZCBoZW5jZSBpc24ndCBhcyBtdWNo IG9mIGEgd29ycnkpLgorLy8KKy8vIFRoZXJlJ3MgZXNzZW50aWFsbHkgbm8g d2F5IHRvIGVuc3VyZSB0aGF0IHRoZSBjb21waWxlciB3aWxsIG5vdCBtb2Rp ZnkgdGhlCisvLyBzdGFjayBwb2ludGVyIHdoZW4gY29tcGlsaW5nIGEgQyBm dW5jdGlvbi4KKy8vIEhlbmNlIHdlIGhhdmUgdG8gd3JpdGUgdGhpcyBmdW5j dGlvbiBpbiBhc3NlbWJseS4KKworI2lmIEhXQVNBTl9XSVRIX0lOVEVSQ0VQ VE9SUyAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorCisubWFjcm8gRU5UUlkg c3ltYm9sCisgIC5hbGlnbiAyCisgIC5nbG9iYWwgXHN5bWJvbAorICAudHlw ZSAgXHN5bWJvbFwoKSwgJWZ1bmN0aW9uCitcc3ltYm9sXCgpOgorICAuY2Zp X3N0YXJ0cHJvYworLmVuZG0KKworLm1hY3JvIEVORCBzeW1ib2wKKyAgLmNm aV9lbmRwcm9jCisgIC5zaXplIFxzeW1ib2wsIC4tXHN5bWJvbAorLmVuZG0K KworRU5UUlkgX3NldGptcAorbW92CXgxLCAjMAorYgkxZgorRU5EIF9zZXRq bXAKKworRU5UUlkgX19zaWdzZXRqbXAKKzE6CisgIHN0cAl4MTksIHgyMCwg W3gwLCAjMDw8M10KKyAgc3RwCXgyMSwgeDIyLCBbeDAsICMyPDwzXQorICBz dHAJeDIzLCB4MjQsIFt4MCwgIzQ8PDNdCisgIHN0cAl4MjUsIHgyNiwgW3gw LCAjNjw8M10KKyAgc3RwCXgyNywgeDI4LCBbeDAsICM4PDwzXQorICBzdHAJ eDI5LCB4MzAsIFt4MCwgIzEwPDwzXQorICBzdHAJIGQ4LCAgZDksIFt4MCwg IzE0PDwzXQorICBzdHAJZDEwLCBkMTEsIFt4MCwgIzE2PDwzXQorICBzdHAJ ZDEyLCBkMTMsIFt4MCwgIzE4PDwzXQorICBzdHAJZDE0LCBkMTUsIFt4MCwg IzIwPDwzXQorICBtb3YJeDIsICBzcAorICBzdHIJeDIsICBbeDAsICMxMzw8 M10KKyAgLy8gV2UgYWx3YXlzIGhhdmUgdGhlIHNlY29uZCBhcmd1bWVudCB0 byBfX3NpZ2ptcF9zYXZlIChzYXZlbWFzaykgc2V0LCBzaW5jZQorICAvLyB0 aGUgX3NldGptcCBmdW5jdGlvbiBhYm92ZSBoYXMgc2V0IGl0IGZvciB1cyBh cyBgZmFsc2VgLgorICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4g aHdhc2FuX2ludGVyY2VwdG9ycy5jYworICBiCV9fc2lnam1wX3NhdmUKK0VO RCBfX3NpZ3NldGptcAorCisjZW5kaWYKCg== --_002_VI1PR08MB5471C70A576E542FE2952C25E0BA0VI1PR08MB5471eurp_--