From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2066) id 1825E395BC2E; Sat, 13 Jun 2020 02:49:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1825E395BC2E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1592016587; bh=apY+cxo0qSjyNFalX5ZTLQmW5cfKDT/yq0NzgsNMcRc=; h=From:To:Subject:Date:From; b=fRg8Cy90zQAegf2I6cWkIo0moHGLm11i35L1atx1eB+FwB05PkURlCaI7vDtep4FO QrYIPa2DyfTeeFi+WAHqusJiC3B3rnhxQ+/JtXTLKoRKPuNUDbr0aiMAGXzNRbPRYi 06vJUcK33PHvobIbo16TPHZLkyBPH9BTVBExe0Zg= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Jiu Fu Guo To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/guojiufu/heads/guojiufu-branch)] Add missing store in emission of asan_stack_free. X-Act-Checkin: gcc X-Git-Author: Martin Liska X-Git-Refname: refs/users/guojiufu/heads/guojiufu-branch X-Git-Oldrev: df81764ba1a276d9b48f408bd2dd1e71e09e7863 X-Git-Newrev: 8b6731e674c76cb48a417f2eef74ced92a17f469 Message-Id: <20200613024947.1825E395BC2E@sourceware.org> Date: Sat, 13 Jun 2020 02:49:47 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2020 02:49:47 -0000 https://gcc.gnu.org/g:8b6731e674c76cb48a417f2eef74ced92a17f469 commit 8b6731e674c76cb48a417f2eef74ced92a17f469 Author: Martin Liska Date: Tue May 19 16:57:56 2020 +0200 Add missing store in emission of asan_stack_free. gcc/ChangeLog: 2020-05-19 Martin Liska PR sanitizer/94910 * asan.c (asan_emit_stack_protection): Emit also **SavedFlagPtr(FakeStack, class_id) = 0 in order to release a stack frame. Diff: --- gcc/asan.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/gcc/asan.c b/gcc/asan.c index c9872f1b007..e015fa3ec9b 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -1598,8 +1598,24 @@ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb, if (use_after_return_class < 5 && can_store_by_pieces (sz, builtin_memset_read_str, &c, BITS_PER_UNIT, true)) - store_by_pieces (shadow_mem, sz, builtin_memset_read_str, &c, - BITS_PER_UNIT, true, RETURN_BEGIN); + { + /* Emit: + memset(ShadowBase, kAsanStackAfterReturnMagic, ShadowSize); + **SavedFlagPtr(FakeStack, class_id) = 0 + */ + store_by_pieces (shadow_mem, sz, builtin_memset_read_str, &c, + BITS_PER_UNIT, true, RETURN_BEGIN); + + unsigned HOST_WIDE_INT offset + = (1 << (use_after_return_class + 6)); + offset -= GET_MODE_SIZE (ptr_mode); + mem = gen_rtx_MEM (ptr_mode, base); + mem = adjust_address (mem, ptr_mode, offset); + rtx addr = gen_reg_rtx (ptr_mode); + emit_move_insn (addr, mem); + mem = gen_rtx_MEM (QImode, addr); + emit_move_insn (mem, const0_rtx); + } else if (use_after_return_class >= 5 || !set_storage_via_setmem (shadow_mem, GEN_INT (sz),