From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9784 invoked by alias); 17 Nov 2002 15:06:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 9769 invoked by uid 71); 17 Nov 2002 15:06:02 -0000 Date: Fri, 22 Nov 2002 11:26:00 -0000 Message-ID: <20021117150601.9768.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: "Joseph D. Wagner" Subject: RE: optimization/8537: Optimizer Removes Code Necessary for Security Reply-To: "Joseph D. Wagner" X-SW-Source: 2002-11/txt/msg00851.txt.bz2 List-Id: The following reply was made to PR optimization/8537; it has been noted by GNATS. From: "Joseph D. Wagner" To: , , , , , Cc: Subject: RE: optimization/8537: Optimizer Removes Code Necessary for Security Date: Sun, 17 Nov 2002 08:59:53 -0600 Direct quote from: http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Bug-Criteria.html "If the compiler produces valid assembly code that does not correctly execute the input source code, that is a compiler bug." So to all you naysayers out there who claim this is a programming error or poor coding, YES, IT IS A BUG! From: http://gcc.gnu.org/ml/gcc/2002-01/msg00518.html > The problem is the standard gives wide latitude in what the optimizer can optimize Isn't this also the solution? Can't the optimizer check to see if the function is memset(), and if so check to see if the value is 0 or NULL, and if so leave it in? The optimizer could check if memset() is zeroing out memory by checking if the fill value is 0 or NULL. If the fill value is 0 or NULL, the optimizer can reasonably presume that this instance of memset() is for security and not optimize it out. Joseph Wagner -----Original Message----- From: fw@gcc.gnu.org [mailto:fw@gcc.gnu.org] Sent: Sunday, November 17, 2002 8:28 AM To: gcc-bugs@gcc.gnu.org; gcc-prs@gcc.gnu.org; nobody@gcc.gnu.org; wagnerjd@prodigy.net Subject: Re: optimization/8537: Optimizer Removes Code Necessary for Security Synopsis: Optimizer Removes Code Necessary for Security State-Changed-From-To: open->closed State-Changed-By: fw State-Changed-When: Sun Nov 17 06:28:05 2002 State-Changed-Why: This is not a bug in GCC. The call to memset() clear hasn't any externally visible effect according to the C language specification, so it can be removed by the optimizer. See the discussion around http://gcc.gnu.org/ml/gcc/2002-01/msg00518.html for additional information on a very similar topic. http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=g cc&pr=8537