> -----Original Message----- > From: Thomas Monjalon <tho...@monjalon.net> > Sent: Thursday, March 10, 2022 12:37 AM > To: Rahul Bhansali <rbhans...@marvell.com> > Cc: dev@dpdk.org; david.march...@redhat.com; Conor Walsh > <conor.wa...@intel.com> > Subject: Re: [EXT] Re: [PATCH] examples/l3fwd: resolve stack buffer overflow > issue > > 09/03/2022 16:24, Rahul Bhansali: > > Hi Thomas, > > > > From: Thomas Monjalon <tho...@monjalon.net> > > > 11/01/2022 13:50, Rahul Bhansali: > > > > /* copy rest of the packets into the TX buffer. */ > > > > len = num - n; > > > > + if (len == 0) > > > > + goto exit; > > > > + > > > > > > I don't understand how it can fix something. > > > There is already "while (j < len)" with j and len being 0, the loop > > > should not be effective in this case. > > > > This Switch will execute Case statement first even before considering the > > while > condition or anything else before case statement. While condition will be > executed only after all switch cases are executed. > > I don't know this construct. Is it part of the C standard? > We learn something everyday :) Yeah, this is new learning for me as well 😊 It’s the way switch works and make it faster than If-else conditions executions by directly transferring control to respective case first and then do rest of the things. Ref document: https://docs.microsoft.com/en-us/cpp/c-language/switch-statement-c?view=msvc-170
> > > Hence in case of len = 0 and n > 28, it is throwing stack buffer overflow > > error. > > > > Below is sample code to simulate the while loop behavior inside switch. > Checked it for both x86 and arm64. > > https://urldefense.proofpoint.com/v2/url?u=https-3A__godbolt.org_z_4Ke > > cqbsde&d=DwICAg&c=nKjWec2b6R0mOyPaz7xtfQ&r=bm7kwlFq6L5uO69sS- > 08RKSWPEU > > tAQMUQjqHDFDtmpY&m=3GLnWHKqJB7pB5Jc36-gFYv-q- > 3lyEtAFIK3Zt_TMRHhsAGJPIM > > sAYTAunXt-TCf&s=L93OhPE9w3nl-Tf16rsvJ_OIC9Jar3Q7Be6vX9KfKfc&e= > > > > > > > > > j = 0; > > > > switch (len % FWDSTEP) { > > > > while (j < len) { > > > >