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