From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Rini Date: Fri, 6 Jul 2012 07:00:11 -0700 Subject: [U-Boot] [PATCH v4] arm: bugfix: save_boot_params_default accesses uninitalized stack when -O0 In-Reply-To: <4FF68155.6090103@kmckk.co.jp> References: <4FE85CB5.6070505@kmckk.co.jp> <20120627174015.GC28055@bill-the-cat> <4FEBAFE2.4000906@kmckk.co.jp> <4FEC4195.1020400@kmckk.co.jp> <4FEC70ED.5090200@ti.com> <4FED7715.2060709@kmckk.co.jp> <20120705135726.3872a2bd@aari01-12> <20120705161828.GA10143@bill-the-cat> <20120705191048.328459cc@lilith> <4FF68155.6090103@kmckk.co.jp> Message-ID: <4FF6EF6B.6060809@ti.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 07/05/2012 11:10 PM, Tetsuyuki Kobayashi wrote: > save_boot_params_default() in cpu.c accesses uninitialized stack > area when it compiled with -O0 (not optimized). > > Signed-off-by: Tetsuyuki Kobayashi --- Hi Tom, > Albert, > > I rewrite them in asm language and put it to start.S. No warning > now. I tested it quickly on my kzm9g board. > > Changes for v2: - include and use __naked > instead of __attribute__((naked)) > > Changes for v3: - move __naked after void - reformat comments > > Changes for v4: - v3 causes following warnings cpu.c: In function > 'save_boot_params_default': cpu.c:48:1: warning: -fstack-usage not > supported for this target [enabled by default] - move > save_boot_params_default() and save_boot_params() from cpu.c to > start.S and write them in asm language > > arch/arm/cpu/armv7/cpu.c | 7 ------- > arch/arm/cpu/armv7/start.S | 15 +++++++++++++++ 2 files changed, > 15 insertions(+), 7 deletions(-) > > diff --git a/arch/arm/cpu/armv7/cpu.c b/arch/arm/cpu/armv7/cpu.c > index c6fa8ef..b0677f4 100644 --- a/arch/arm/cpu/armv7/cpu.c +++ > b/arch/arm/cpu/armv7/cpu.c @@ -37,13 +37,6 @@ #include > #include > > -void save_boot_params_default(u32 r0, u32 r1, u32 r2, u32 r3) -{ > -} - -void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3) - > __attribute__((weak, alias("save_boot_params_default"))); - int > cleanup_before_linux(void) { /* diff --git > a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S index > 261835b..4feade5 100644 --- a/arch/arm/cpu/armv7/start.S +++ > b/arch/arm/cpu/armv7/start.S @@ -350,6 +350,21 @@ > ENTRY(cpu_init_crit) ENDPROC(cpu_init_crit) #endif > > +/************************************************************************* > > > + * > + * void save_boot_params_default(u32 r0, u32 r1, u32 r2, u32 r3) > + * + * Stack pointer is not yet initialized + * Don't save > anything to stack even if compiled with -O0 + * + > *************************************************************************/ > > > +ENTRY(save_boot_params_default) > + bx lr @ back to my caller +ENDPROC(save_boot_params_default) + > + .weak save_boot_params + .set save_boot_params, > save_boot_params_default + #ifndef CONFIG_SPL_BUILD /* > ************************************************************************* We > > shouldn't, I believe, need to call this save_boot_params_default and then alias it. We should be able to just call it save_boot_params and declare it weak, then omap3 for example will override a link time (this should be easily verifiable with objdump). Thanks! - -- Tom -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQIcBAEBAgAGBQJP9u9rAAoJENk4IS6UOR1W0oAQAJnM2ENHS3yhv3i+bUTJpXjI sFPiQAd9t/QzDpCr7/xm05+mTciRUmzJ9tIF/XUQbVZPJZvxnfit43EVxaNuyQyZ RC6Le9RBHzSFXmx2EwCUrNzog7Q3oOjAS6GVa2UaGsLf2lTcJrhomYNtk30cSwUw sSQobL/jr5668Obuf1WQxEbextTt6JLTeWqCfsEBesg1eENqkskWQHg6zA8HD85i RLYux9VEhZ/PaunH5K1RNOG3SzXZzhbxTwl4EpQ+6V8ocGqRG2tghWW/o5oG2Mjv /i65FD0RbQhzqjX4z2far4PYBvVs+LIwPIUKZmP7A3QDrzoapCC7bk2nRBsfLPMX xN3NeU13KsBre+7IFvMYvCCrZYSSMYRqAjNFxZwEJMeH7p3zGcDPGdAKaqCEDCJU chNzcfhFiYezGGT4x7Sk5Apw7dj7kReC4mcuXAr9KHDV0tZy78nqqOa8wgxKgsz1 S4fiiDRwIHY+U/KgLW8ayv8VzSnDLTN6GJ23MWQiv1BXHdq77F2vDpytepR9m6BU JT3Dtesdh5GmA0PSaRq9Wfh0TzTPkYJd91XD8JXulCpRJmxa70O5dVrE6mXWDyAQ 98esMJxyyOEFCcsRb7U2/NsRHLbuLjAKdF3nyzGaBp1qhvY/d5zsYwgNfIx3dpWk SZohRX5nOA0Y+ZcphGih =51Xu -----END PGP SIGNATURE-----