Arggh, I neglected to take off the extra pair of parenthesis on the invocation 
of GEN_MSG.

Anyway, you get the idea.

Doug
> -----Original Message-----
> From: Gilmore, Doug [mailto:doug.gilm...@amd.com]
> Sent: Wednesday, November 24, 2010 12:03 PM
> To: David Coakley; Sun Chan
> Cc: open64-devel
> Subject: Re: [Open64-devel] patch for building Fortran frontend with
> FORTIFY_SOURCE checking
> 
> Here is something to consider.  Don't worry about compile time
> checking,
> just detect that there are problems at runtime, and avoid overflow.
> 
> Change:
>    char                msg_str[30];
> 
> To:
> 
>    /* Use a large buffer here, since we really want to avoid generating
> an error message
>     * when generating an error message.
>     */
>    char                msg_str[300];
> #define GEN_MSG(...) do { if (snprintf(msg_str, sizeof, msg_str, __VA_ARGS__) 
> >= sizeof msg_str) PRINTMSG (0, 3, Internal, 0, 3); } while(0);
> 
> As an example, change:
> 
>          msg_str[0] = NULL_CHAR;
>          strcpy(msg_str, vector_lvl_str[opt_flags.vector_lvl]);
>          strcpy(&msg_str[7], "\n");
>          strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]);
> 
> To:
> 
>        GEN_MSG(("%s\n%s" vector_lvl_str[opt_flags.vector_lvl],
>                task_lvl_str[opt_flags.task_lvl]));
> 
> and after the function add:
> 
> /* GEN_MSG is context sensitive, so we remove it.
>  */
> #undef GEN_MSG
> 
> 
> Doug
> 
> > -----Original Message-----
> > From: David Coakley [mailto:dcoak...@gmail.com]
> > Sent: Tuesday, November 23, 2010 9:57 PM
> > To: Sun Chan
> > Cc: open64-devel
> > Subject: Re: [Open64-devel] patch for building Fortran frontend with
> > FORTIFY_SOURCE checking
> >
> > I only claimed to have fixed the buffer problems detected by
> > FORTIFY_SOURCE.
> >
> > But I am willing to improve the code dealing with msg_str.  Note that
> > the strings that are copied into msg_str are all constants and the
> > size is known at compile-time.  Here is my proposed modification for
> > the first use of msg_str:
> >
> > OLD:
> >
> >          msg_str[0] = NULL_CHAR;
> >          strcpy(msg_str, vector_lvl_str[opt_flags.vector_lvl]);
> >          strcpy(&msg_str[7], "\n");
> >          strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]);
> >
> > NEW:
> >
> >          strncpy(msg_str, vector_lvl_str[opt_flags.vector_lvl], 7);
> >          msg_str[7] = NEWLINE;
> >          strncpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl], 5);
> >          msg_str[13] = NULL_CHAR;
> >
> > Optionally we could add a static assert that 13 < (sizeof(msg_str) /
> > sizeof(msg_str[0])), although the above is simple enough that the
> > FORTIFY_SOURCE checking will detect an overrun at compile-time.  Thus
> > we can be sure that no overruns will happen at run-time for msg_str.
> > Is this satisfactory?
> >
> > On Mon, Nov 22, 2010 at 10:38 PM, Sun Chan <sun.c...@gmail.com>
> wrote:
> > > I don't see it that way, your fix just make the "buffer overflow"
> > > problem happen later in time, so it is not a fix that I consider
> > sound
> > > Sun
> > >
> > > On Tue, Nov 23, 2010 at 11:15 AM, David Coakley
> <dcoak...@gmail.com>
> > wrote:
> > >> Hi Sun,
> > >>
> > >> I think the changes that you are suggesting are an addition to the
> > >> changes in the submitted patch.  If that is the case, then I would
> > >> rather make them as a separate commit as I have already tested the
> > >> patch and I know that it fixes the FORTIFY_SOURCE issue.
> > >>
> > >> On Mon, Nov 22, 2010 at 4:13 PM, Sun Chan <sun.c...@gmail.com>
> > wrote:
> > >>> a most economic way to do that is to use #define like SZ_STR
> > >>> then afterwards, assert that strlen(msg_str) < SZ_STR
> > >>> Sun
> > >>>
> > >>> On Tue, Nov 23, 2010 at 8:11 AM, Sun Chan <sun.c...@gmail.com>
> > wrote:
> > >>>> If we are fixing that, we might as well fix potential issues.
> E.g.
> > >>>> check for strlen and truncate, use alloca, ... or simply make it
> > twice
> > >>>> the size (although it still technically is potentially wrong)
> > >>>> Sun
> > >>>>
> > >>>> On Tue, Nov 23, 2010 at 8:04 AM, David Coakley
> > <dcoak...@gmail.com> wrote:
> > >>>>> Yes, I noticed that the msg_str buffer size seemed small.
> >  However, I
> > >>>>> didn't see any immediate problems and there were no more
> > complaints
> > >>>>> from the FORTIFY_SOURCE checking so I left it as-is.
> > >>>>>
> > >>>>> On Mon, Nov 22, 2010 at 4:53 AM, Sun Chan <sun.c...@gmail.com>
> > wrote:
> > >>>>>> your msg_str could get out of bound too (not now, but some
> fixes
> > later on).
> > >>>>>> Sun
> > >>>>>>
> > >>>>>> On Mon, Nov 22, 2010 at 3:31 PM, David Coakley
> > <dcoak...@gmail.com> wrote:
> > >>>>>>> Recently I tried to build Open64 with gcc-4.5.1 and
> > FORTIFY_SOURCE
> > >>>>>>> checking turned on.  The Fortran frontend would not run at
> all
> > because
> > >>>>>>> of a failing buffer overflow check that occurred during
> > command-line
> > >>>>>>> processing.  Although this failure turned out to be a false
> > alarm, it
> > >>>>>>> was fairly easy to work around.  And since the FORTIFY_SOURCE
> > checking
> > >>>>>>> did uncover some real problems, I thought it was worth making
> > source
> > >>>>>>> changes to work around the problem rather than turning the
> > checking
> > >>>>>>> off.
> > >>>>>>>
> > >>>>>>> The attached file msg.txt details the changes.
> > >>>>>>>
> > >>>>>>> Could a gatekeeper please review the patch?  Thanks,
> > >>>>>>>
> > >>>>>>> -David Coakley / AMD Open Source Compiler Engineering
> > >>>>>>>
> > >>>>>>> -------------------------------------------------------------
> --
> > ---------------
> > >>>>>>> Beautiful is writing same markup. Internet Explorer 9
> supports
> > >>>>>>> standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2
> &
> > L3.
> > >>>>>>> Spend less time writing and  rewriting code and more time
> > creating great
> > >>>>>>> experiences on the web. Be a part of the beta today
> > >>>>>>> http://p.sf.net/sfu/msIE9-sfdev2dev
> > >>>>>>> _______________________________________________
> > >>>>>>> Open64-devel mailing list
> > >>>>>>> Open64-devel@lists.sourceforge.net
> > >>>>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel
> > >>>>>>>
> > >>>>>>>
> > >>>>>>
> > >>>>>
> > >>>>
> > >>>
> > >>
> > >
> >
> > ---------------------------------------------------------------------
> --
> > -------
> > Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
> > Tap into the largest installed PC base & get more eyes on your game
> by
> > optimizing for Intel(R) Graphics Technology. Get started today with
> the
> > Intel(R) Software Partner Program. Five $500 cash prizes are up for
> > grabs.
> > http://p.sf.net/sfu/intelisp-dev2dev
> > _______________________________________________
> > Open64-devel mailing list
> > Open64-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/open64-devel
> 
> 
> 
> -----------------------------------------------------------------------
> -------
> Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
> Tap into the largest installed PC base & get more eyes on your game by
> optimizing for Intel(R) Graphics Technology. Get started today with the
> Intel(R) Software Partner Program. Five $500 cash prizes are up for
> grabs.
> http://p.sf.net/sfu/intelisp-dev2dev
> _______________________________________________
> Open64-devel mailing list
> Open64-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/open64-devel



------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to