David, Thx for your patience. pls checkin Sun On Tue, Nov 30, 2010 at 3:07 AM, David Coakley <dcoak...@gmail.com> wrote: > Thanks, Doug. I had already implemented something else by the time I > saw your suggestion so I did not use it in the attached patch. > Instead I used some macros that check the size of the destination > buffer at compilation time. > > The handling of msg_str is the only difference in the revised patch. > I also added more explanation to the proposed log message in msg.txt. > > On Wed, Nov 24, 2010 at 1:49 PM, Sun Chan <sun.c...@gmail.com> wrote: >> I think some existing code in open64 backend does similar thing. Thx >> for the suggestion. >> Sun >> >> On Thu, Nov 25, 2010 at 4:11 AM, Gilmore, Doug <doug.gilm...@amd.com> wrote: >>> 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