Patchwork [U-Boot] Fix incorrect use of getenv() before relocation

login
register
mail settings
Submitter Wolfgang Denk
Date May 4, 2011, 8:32 p.m.
Message ID <1304541148-11038-1-git-send-email-wd@denx.de>
Download mbox | patch
Permalink /patch/94168/
State Accepted
Headers show

Comments

Wolfgang Denk - May 4, 2011, 8:32 p.m.
A large number of boards incorrectly used getenv() in their board init
code running before relocation.  In some cases this caused U-Boot to
hang when certain environment variables grew too long.
Fix the code to use getenv_r().

Signed-off-by: Wolfgang Denk <wd@denx.de>
Cc: Stefan Roese <sr@denx.de>
Cc: The LEOX team <team@leox.org>
Cc: Michael Schwingen <michael@schwingen.org>
Cc: Georg Schardt <schardt@team-ctech.de>
Cc: Werner Pfister <Pfister_Werner@intercontrol.de>
Cc: Dirk Eibach <eibach@gdsys.de>
Cc: Peter De Schrijver <p2@mind.be>
Cc: John Zhan <zhanz@sinovee.com>
Cc: Rishi Bhattacharya <rishi@ti.com>
Cc: Peter Tyser <ptyser@xes-inc.com>
---
 board/LEOX/elpt860/elpt860.c          |    5 +++--
 board/RRvision/RRvision.c             |   10 ++++++----
 board/actux1/actux1.c                 |    9 +++++----
 board/actux2/actux2.c                 |    9 +++++----
 board/actux3/actux3.c                 |    7 ++++---
 board/amcc/acadia/acadia.c            |    7 ++++---
 board/amcc/bamboo/bamboo.c            |    7 ++++---
 board/amcc/bluestone/bluestone.c      |    7 ++++---
 board/amcc/bubinga/bubinga.c          |    7 ++++---
 board/amcc/canyonlands/canyonlands.c  |    7 ++++---
 board/amcc/ebony/ebony.c              |    7 ++++---
 board/amcc/katmai/katmai.c            |    7 ++++---
 board/amcc/kilauea/kilauea.c          |    7 ++++---
 board/amcc/luan/luan.c                |    7 ++++---
 board/amcc/makalu/makalu.c            |    7 ++++---
 board/amcc/ocotea/ocotea.c            |    9 +++++----
 board/amcc/redwood/redwood.c          |    7 ++++---
 board/amcc/sequoia/sequoia.c          |    7 ++++---
 board/amcc/taihu/taihu.c              |    7 ++++---
 board/amcc/taishan/taishan.c          |    9 +++++----
 board/amcc/walnut/walnut.c            |    7 ++++---
 board/amcc/yosemite/yosemite.c        |    7 ++++---
 board/amcc/yucca/yucca.c              |    7 ++++---
 board/amirix/ap1000/ap1000.c          |   24 ++++++++++++++----------
 board/avnet/fx12mm/fx12mm.c           |   17 ++++++++---------
 board/c2mon/c2mon.c                   |   10 ++++++----
 board/digsy_mtc/digsy_mtc.c           |    9 +++++----
 board/etx094/etx094.c                 |   16 +++++++---------
 board/gdsys/405ep/dlvision-10g.c      |    7 ++++---
 board/gdsys/405ep/io.c                |    7 ++++---
 board/gdsys/405ep/iocon.c             |    7 ++++---
 board/gdsys/dlvision/dlvision.c       |    7 ++++---
 board/gdsys/gdppc440etx/gdppc440etx.c |    7 ++++---
 board/gdsys/intip/intip.c             |    7 ++++---
 board/gdsys/neo/neo.c                 |    7 ++++---
 board/gw8260/gw8260.c                 |    8 ++++----
 board/hermes/hermes.c                 |   16 +++++++---------
 board/ixdp425/ixdp425.c               |    7 ++++---
 board/lwmon5/lwmon5.c                 |    7 ++++---
 board/micronas/vct/vct.c              |    7 ++++---
 board/ml2/ml2.c                       |   18 +++++++-----------
 board/mosaixtech/icon/icon.c          |    7 ++++---
 board/pcs440ep/pcs440ep.c             |    7 ++++---
 board/prodrive/alpr/alpr.c            |    9 +++++----
 board/prodrive/p3mx/p3mx.c            |    7 ++++---
 board/prodrive/p3p440/p3p440.c        |    7 ++++---
 board/prodrive/pdnb3/pdnb3.c          |    7 ++++---
 board/quad100hd/quad100hd.c           |    7 ++++---
 board/quantum/quantum.c               |   10 ++++++----
 board/rbc823/rbc823.c                 |    9 +++++----
 board/socrates/socrates.c             |   12 +++++++-----
 board/svm_sc8xx/svm_sc8xx.c           |   32 +++++++++++++++++---------------
 board/t3corp/t3corp.c                 |    7 ++++---
 board/ti/omap5912osk/omap5912osk.c    |    7 ++++---
 board/tqc/tqm8260/tqm8260.c           |    8 ++++----
 board/tqc/tqm8272/tqm8272.c           |    8 ++++++--
 board/tqc/tqm85xx/tqm85xx.c           |   19 +++++++++++--------
 board/tqc/tqm8xx/tqm8xx.c             |   18 ++++++++++--------
 board/xes/common/board.c              |   17 +++++++++++------
 board/xes/xpedite1000/xpedite1000.c   |   21 +++++++++++----------
 board/zeus/zeus.c                     |    7 ++++---
 61 files changed, 324 insertions(+), 260 deletions(-)
Detlev Zundel - May 10, 2011, 10:44 a.m.
Hi Wolfgang,

> A large number of boards incorrectly used getenv() in their board init
> code running before relocation.  In some cases this caused U-Boot to
> hang when certain environment variables grew too long.
> Fix the code to use getenv_r().
>
> Signed-off-by: Wolfgang Denk <wd@denx.de>
> Cc: Stefan Roese <sr@denx.de>
> Cc: The LEOX team <team@leox.org>
> Cc: Michael Schwingen <michael@schwingen.org>
> Cc: Georg Schardt <schardt@team-ctech.de>
> Cc: Werner Pfister <Pfister_Werner@intercontrol.de>
> Cc: Dirk Eibach <eibach@gdsys.de>
> Cc: Peter De Schrijver <p2@mind.be>
> Cc: John Zhan <zhanz@sinovee.com>
> Cc: Rishi Bhattacharya <rishi@ti.com>
> Cc: Peter Tyser <ptyser@xes-inc.com>
> ---
>  board/LEOX/elpt860/elpt860.c          |    5 +++--
>  board/RRvision/RRvision.c             |   10 ++++++----
>  board/actux1/actux1.c                 |    9 +++++----
>  board/actux2/actux2.c                 |    9 +++++----
>  board/actux3/actux3.c                 |    7 ++++---
>  board/amcc/acadia/acadia.c            |    7 ++++---
>  board/amcc/bamboo/bamboo.c            |    7 ++++---
>  board/amcc/bluestone/bluestone.c      |    7 ++++---
>  board/amcc/bubinga/bubinga.c          |    7 ++++---
>  board/amcc/canyonlands/canyonlands.c  |    7 ++++---
>  board/amcc/ebony/ebony.c              |    7 ++++---
>  board/amcc/katmai/katmai.c            |    7 ++++---
>  board/amcc/kilauea/kilauea.c          |    7 ++++---
>  board/amcc/luan/luan.c                |    7 ++++---
>  board/amcc/makalu/makalu.c            |    7 ++++---
>  board/amcc/ocotea/ocotea.c            |    9 +++++----
>  board/amcc/redwood/redwood.c          |    7 ++++---
>  board/amcc/sequoia/sequoia.c          |    7 ++++---
>  board/amcc/taihu/taihu.c              |    7 ++++---
>  board/amcc/taishan/taishan.c          |    9 +++++----
>  board/amcc/walnut/walnut.c            |    7 ++++---
>  board/amcc/yosemite/yosemite.c        |    7 ++++---
>  board/amcc/yucca/yucca.c              |    7 ++++---
>  board/amirix/ap1000/ap1000.c          |   24 ++++++++++++++----------
>  board/avnet/fx12mm/fx12mm.c           |   17 ++++++++---------
>  board/c2mon/c2mon.c                   |   10 ++++++----
>  board/digsy_mtc/digsy_mtc.c           |    9 +++++----
>  board/etx094/etx094.c                 |   16 +++++++---------
>  board/gdsys/405ep/dlvision-10g.c      |    7 ++++---
>  board/gdsys/405ep/io.c                |    7 ++++---
>  board/gdsys/405ep/iocon.c             |    7 ++++---
>  board/gdsys/dlvision/dlvision.c       |    7 ++++---
>  board/gdsys/gdppc440etx/gdppc440etx.c |    7 ++++---
>  board/gdsys/intip/intip.c             |    7 ++++---
>  board/gdsys/neo/neo.c                 |    7 ++++---
>  board/gw8260/gw8260.c                 |    8 ++++----
>  board/hermes/hermes.c                 |   16 +++++++---------
>  board/ixdp425/ixdp425.c               |    7 ++++---
>  board/lwmon5/lwmon5.c                 |    7 ++++---
>  board/micronas/vct/vct.c              |    7 ++++---
>  board/ml2/ml2.c                       |   18 +++++++-----------
>  board/mosaixtech/icon/icon.c          |    7 ++++---
>  board/pcs440ep/pcs440ep.c             |    7 ++++---
>  board/prodrive/alpr/alpr.c            |    9 +++++----
>  board/prodrive/p3mx/p3mx.c            |    7 ++++---
>  board/prodrive/p3p440/p3p440.c        |    7 ++++---
>  board/prodrive/pdnb3/pdnb3.c          |    7 ++++---
>  board/quad100hd/quad100hd.c           |    7 ++++---
>  board/quantum/quantum.c               |   10 ++++++----
>  board/rbc823/rbc823.c                 |    9 +++++----
>  board/socrates/socrates.c             |   12 +++++++-----
>  board/svm_sc8xx/svm_sc8xx.c           |   32 +++++++++++++++++---------------
>  board/t3corp/t3corp.c                 |    7 ++++---
>  board/ti/omap5912osk/omap5912osk.c    |    7 ++++---
>  board/tqc/tqm8260/tqm8260.c           |    8 ++++----
>  board/tqc/tqm8272/tqm8272.c           |    8 ++++++--
>  board/tqc/tqm85xx/tqm85xx.c           |   19 +++++++++++--------
>  board/tqc/tqm8xx/tqm8xx.c             |   18 ++++++++++--------
>  board/xes/common/board.c              |   17 +++++++++++------
>  board/xes/xpedite1000/xpedite1000.c   |   21 +++++++++++----------
>  board/zeus/zeus.c                     |    7 ++++---
>  61 files changed, 324 insertions(+), 260 deletions(-)
>

[...]

> diff --git a/board/RRvision/RRvision.c b/board/RRvision/RRvision.c
> index 9d016c5..0182d8a 100644
> --- a/board/RRvision/RRvision.c
> +++ b/board/RRvision/RRvision.c
> @@ -93,14 +93,16 @@ const uint sdram_table[] =
>  
>  int checkboard (void)
>  {
> -	char *s = getenv ("serial#");
> +	char buf[64];
> +	int i;
> +	int l = getenv_f("serial#", buf, sizeof(buf));
>  
>  	puts ("Board: RRvision ");
>  
> -	for (; s && *s; ++s) {
> -		if (*s == ' ')
> +	for (i=0; i < l; ++i) {
> +		if (buf[i] == ' ')
>  			break;
> -		putc (*s);
> +		putc (buf[i]);
>  	}
>  
>  	putc ('\n');

Looks good.

[...]

> diff --git a/board/digsy_mtc/digsy_mtc.c b/board/digsy_mtc/digsy_mtc.c
> index 9f13a3d..a0c4b10 100644
> --- a/board/digsy_mtc/digsy_mtc.c
> +++ b/board/digsy_mtc/digsy_mtc.c
> @@ -191,15 +191,16 @@ phys_size_t initdram(int board_type)
>  
>  int checkboard(void)
>  {
> -	char *s = getenv("serial#");
> +	char buf[64];
> +	int i = getenv_f("serial#", buf, sizeof(buf));
>  
>  	puts ("Board: InterControl digsyMTC");
>  #if defined(CONFIG_DIGSY_REV5)
>  	puts (" rev5");
>  #endif
> -	if (s != NULL) {
> -		puts(", ");
> -		puts(s);
> +	if (i > 0) {
> +		puts(", serial# ");
> +		puts(buf);
>  	}
>  	putc('\n');

This changes the output.  On the other hand, this feature was never used
on this board, so I'm ok with removing this read altogether.

[...]

> diff --git a/board/socrates/socrates.c b/board/socrates/socrates.c
> index 72e7401..65fb70a 100644
> --- a/board/socrates/socrates.c
> +++ b/board/socrates/socrates.c
> @@ -52,15 +52,17 @@ ulong flash_get_size (ulong base, int banknum);
>  int checkboard (void)
>  {
>  	volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
> -
> -	char *src;
> +	char buf[64];
>  	int f;
> -	char *s = getenv("serial#");
> +	int i = getenv_f("serial#", buf, sizeof(buf));
> +#ifdef CONFIG_PCI
> +	char *src;
> +#endif
>  
>  	puts("Board: Socrates");
> -	if (s != NULL) {
> +	if (i > 0) {
>  		puts(", serial# ");
> -		puts(s);
> +		puts(buf);
>  	}
>  	putc('\n');
>  

Looks good.

Cheers
  Detlev
Wolfgang Denk - May 10, 2011, 1:38 p.m.
Dear Detlev Zundel,

In message <m24o52ltse.fsf@ohwell.denx.de> you wrote:
> 
...
> > index 9f13a3d..a0c4b10 100644
> > --- a/board/digsy_mtc/digsy_mtc.c
> > +++ b/board/digsy_mtc/digsy_mtc.c
> > @@ -191,15 +191,16 @@ phys_size_t initdram(int board_type)
> >  
> >  int checkboard(void)
> >  {
> > -	char *s = getenv("serial#");
> > +	char buf[64];
> > +	int i = getenv_f("serial#", buf, sizeof(buf));
> >  
> >  	puts ("Board: InterControl digsyMTC");
> >  #if defined(CONFIG_DIGSY_REV5)
> >  	puts (" rev5");
> >  #endif
> > -	if (s != NULL) {
> > -		puts(", ");
> > -		puts(s);
> > +	if (i > 0) {
> > +		puts(", serial# ");
> > +		puts(buf);
> >  	}
> >  	putc('\n');
> 
> This changes the output.  On the other hand, this feature was never used
> on this board, so I'm ok with removing this read altogether.

You are right, this should be:

+	if (i > 0) {
+		puts(", ");
+		puts(buf);

What do you mean by "removing this read" ?


Best regards,

Wolfgang Denk
Wolfgang Denk - May 12, 2011, 5:49 p.m.
Dear Wolfgang Denk,

In message <1304541148-11038-1-git-send-email-wd@denx.de> you wrote:
> A large number of boards incorrectly used getenv() in their board init
> code running before relocation.  In some cases this caused U-Boot to
> hang when certain environment variables grew too long.
> Fix the code to use getenv_r().
> 
> Signed-off-by: Wolfgang Denk <wd@denx.de>
> Cc: Stefan Roese <sr@denx.de>
> Cc: The LEOX team <team@leox.org>
> Cc: Michael Schwingen <michael@schwingen.org>
> Cc: Georg Schardt <schardt@team-ctech.de>
> Cc: Werner Pfister <Pfister_Werner@intercontrol.de>
> Cc: Dirk Eibach <eibach@gdsys.de>
> Cc: Peter De Schrijver <p2@mind.be>
> Cc: John Zhan <zhanz@sinovee.com>
> Cc: Rishi Bhattacharya <rishi@ti.com>
> Cc: Peter Tyser <ptyser@xes-inc.com>
> ---
>  board/LEOX/elpt860/elpt860.c          |    5 +++--
>  board/RRvision/RRvision.c             |   10 ++++++----
>  board/actux1/actux1.c                 |    9 +++++----
>  board/actux2/actux2.c                 |    9 +++++----
>  board/actux3/actux3.c                 |    7 ++++---
>  board/amcc/acadia/acadia.c            |    7 ++++---
>  board/amcc/bamboo/bamboo.c            |    7 ++++---
>  board/amcc/bluestone/bluestone.c      |    7 ++++---
>  board/amcc/bubinga/bubinga.c          |    7 ++++---
>  board/amcc/canyonlands/canyonlands.c  |    7 ++++---
>  board/amcc/ebony/ebony.c              |    7 ++++---
>  board/amcc/katmai/katmai.c            |    7 ++++---
>  board/amcc/kilauea/kilauea.c          |    7 ++++---
>  board/amcc/luan/luan.c                |    7 ++++---
>  board/amcc/makalu/makalu.c            |    7 ++++---
>  board/amcc/ocotea/ocotea.c            |    9 +++++----
>  board/amcc/redwood/redwood.c          |    7 ++++---
>  board/amcc/sequoia/sequoia.c          |    7 ++++---
>  board/amcc/taihu/taihu.c              |    7 ++++---
>  board/amcc/taishan/taishan.c          |    9 +++++----
>  board/amcc/walnut/walnut.c            |    7 ++++---
>  board/amcc/yosemite/yosemite.c        |    7 ++++---
>  board/amcc/yucca/yucca.c              |    7 ++++---
>  board/amirix/ap1000/ap1000.c          |   24 ++++++++++++++----------
>  board/avnet/fx12mm/fx12mm.c           |   17 ++++++++---------
>  board/c2mon/c2mon.c                   |   10 ++++++----
>  board/digsy_mtc/digsy_mtc.c           |    9 +++++----
>  board/etx094/etx094.c                 |   16 +++++++---------
>  board/gdsys/405ep/dlvision-10g.c      |    7 ++++---
>  board/gdsys/405ep/io.c                |    7 ++++---
>  board/gdsys/405ep/iocon.c             |    7 ++++---
>  board/gdsys/dlvision/dlvision.c       |    7 ++++---
>  board/gdsys/gdppc440etx/gdppc440etx.c |    7 ++++---
>  board/gdsys/intip/intip.c             |    7 ++++---
>  board/gdsys/neo/neo.c                 |    7 ++++---
>  board/gw8260/gw8260.c                 |    8 ++++----
>  board/hermes/hermes.c                 |   16 +++++++---------
>  board/ixdp425/ixdp425.c               |    7 ++++---
>  board/lwmon5/lwmon5.c                 |    7 ++++---
>  board/micronas/vct/vct.c              |    7 ++++---
>  board/ml2/ml2.c                       |   18 +++++++-----------
>  board/mosaixtech/icon/icon.c          |    7 ++++---
>  board/pcs440ep/pcs440ep.c             |    7 ++++---
>  board/prodrive/alpr/alpr.c            |    9 +++++----
>  board/prodrive/p3mx/p3mx.c            |    7 ++++---
>  board/prodrive/p3p440/p3p440.c        |    7 ++++---
>  board/prodrive/pdnb3/pdnb3.c          |    7 ++++---
>  board/quad100hd/quad100hd.c           |    7 ++++---
>  board/quantum/quantum.c               |   10 ++++++----
>  board/rbc823/rbc823.c                 |    9 +++++----
>  board/socrates/socrates.c             |   12 +++++++-----
>  board/svm_sc8xx/svm_sc8xx.c           |   32 +++++++++++++++++---------------
>  board/t3corp/t3corp.c                 |    7 ++++---
>  board/ti/omap5912osk/omap5912osk.c    |    7 ++++---
>  board/tqc/tqm8260/tqm8260.c           |    8 ++++----
>  board/tqc/tqm8272/tqm8272.c           |    8 ++++++--
>  board/tqc/tqm85xx/tqm85xx.c           |   19 +++++++++++--------
>  board/tqc/tqm8xx/tqm8xx.c             |   18 ++++++++++--------
>  board/xes/common/board.c              |   17 +++++++++++------
>  board/xes/xpedite1000/xpedite1000.c   |   21 +++++++++++----------
>  board/zeus/zeus.c                     |    7 ++++---
>  61 files changed, 324 insertions(+), 260 deletions(-)

Applied (with fix for board/digsy_mtc/digsy_mtc.c as pointed out by
Detlev).

Best regards,

Wolfgang Denk

Patch

diff --git a/board/LEOX/elpt860/elpt860.c b/board/LEOX/elpt860/elpt860.c
index 905df92..03868cd 100644
--- a/board/LEOX/elpt860/elpt860.c
+++ b/board/LEOX/elpt860/elpt860.c
@@ -169,9 +169,10 @@  int board_early_init_f (void)
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
-	if (!s || strncmp (s, "ELPT860", 7))
+	if ((i < 0) || strncmp(buf, "ELPT860", 7))
 		printf ("### No HW ID - assuming ELPT860\n");
 
 	return (0);		/* success */
diff --git a/board/RRvision/RRvision.c b/board/RRvision/RRvision.c
index 9d016c5..0182d8a 100644
--- a/board/RRvision/RRvision.c
+++ b/board/RRvision/RRvision.c
@@ -93,14 +93,16 @@  const uint sdram_table[] =
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i;
+	int l = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: RRvision ");
 
-	for (; s && *s; ++s) {
-		if (*s == ' ')
+	for (i=0; i < l; ++i) {
+		if (buf[i] == ' ')
 			break;
-		putc (*s);
+		putc (buf[i]);
 	}
 
 	putc ('\n');
diff --git a/board/actux1/actux1.c b/board/actux1/actux1.c
index e73aff8..85e3f9e 100644
--- a/board/actux1/actux1.c
+++ b/board/actux1/actux1.c
@@ -89,14 +89,15 @@  int board_init (void)
  */
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: AcTux-1 rev.");
 	putc (ACTUX1_BOARDREL + 'A' - 1);
 
-	if (s != NULL) {
-		puts (", serial# ");
-		puts (s);
+	if (i > 0) {
+		puts(", serial# ");
+		puts(buf);
 	}
 	putc ('\n');
 
diff --git a/board/actux2/actux2.c b/board/actux2/actux2.c
index d6aaad6..0d67f80 100644
--- a/board/actux2/actux2.c
+++ b/board/actux2/actux2.c
@@ -96,14 +96,15 @@  int board_init (void)
  */
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: AcTux-2 rev.");
 	putc (ACTUX2_BOARDREL + 'A' - 1);
 
-	if (s != NULL) {
-		puts (", serial# ");
-		puts (s);
+	if (i > 0) {
+		puts(", serial# ");
+		puts(buf);
 	}
 	putc ('\n');
 
diff --git a/board/actux3/actux3.c b/board/actux3/actux3.c
index 63bf365..bace254 100644
--- a/board/actux3/actux3.c
+++ b/board/actux3/actux3.c
@@ -111,14 +111,15 @@  int board_init (void)
  */
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: AcTux-3 rev.");
 	putc (ACTUX3_BOARDREL + 'A' - 1);
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts (", serial# ");
-		puts (s);
+		puts (buf);
 	}
 	putc ('\n');
 
diff --git a/board/amcc/acadia/acadia.c b/board/amcc/acadia/acadia.c
index 4825611..68a99bd 100644
--- a/board/amcc/acadia/acadia.c
+++ b/board/amcc/acadia/acadia.c
@@ -102,15 +102,16 @@  int misc_init_f(void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 	u8 rev;
 
 	rev = in8(CONFIG_SYS_CPLD_BASE + 0);
 	printf("Board: Acadia - AMCC PPC405EZ Evaluation Board, Rev. %X", rev);
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/bamboo/bamboo.c b/board/amcc/bamboo/bamboo.c
index d4205e0..79788a8 100644
--- a/board/amcc/bamboo/bamboo.c
+++ b/board/amcc/bamboo/bamboo.c
@@ -440,12 +440,13 @@  int board_early_init_f(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: Bamboo - AMCC PPC440EP Evaluation Board");
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/bluestone/bluestone.c b/board/amcc/bluestone/bluestone.c
index fe8929c..584f5ef 100644
--- a/board/amcc/bluestone/bluestone.c
+++ b/board/amcc/bluestone/bluestone.c
@@ -78,13 +78,14 @@  int board_early_init_f(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts("Board: Bluestone Evaluation Board");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/bubinga/bubinga.c b/board/amcc/bubinga/bubinga.c
index 49eadb9..1ed0aee 100644
--- a/board/amcc/bubinga/bubinga.c
+++ b/board/amcc/bubinga/bubinga.c
@@ -53,13 +53,14 @@  int board_early_init_f(void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts("Board: Bubinga - AMCC PPC405EP Evaluation Board");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/canyonlands/canyonlands.c b/board/amcc/canyonlands/canyonlands.c
index 80e2739..2f0d941 100644
--- a/board/amcc/canyonlands/canyonlands.c
+++ b/board/amcc/canyonlands/canyonlands.c
@@ -293,7 +293,8 @@  int checkboard(void)
 {
 	struct board_bcsr *bcsr_data =
 		(struct board_bcsr *)CONFIG_SYS_BCSR_BASE;
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	if (pvr_460ex()) {
 		printf("Board: Canyonlands - AMCC PPC460EX Evaluation Board");
@@ -319,9 +320,9 @@  int checkboard(void)
 
 	printf(", Rev. %X", in_8(&bcsr_data->cpld_rev));
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/ebony/ebony.c b/board/amcc/ebony/ebony.c
index 923dbca..ad94394 100644
--- a/board/amcc/ebony/ebony.c
+++ b/board/amcc/ebony/ebony.c
@@ -92,12 +92,13 @@  int board_early_init_f(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: Ebony - AMCC PPC440GP Evaluation Board");
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/katmai/katmai.c b/board/amcc/katmai/katmai.c
index 7301cd5..3438065 100644
--- a/board/amcc/katmai/katmai.c
+++ b/board/amcc/katmai/katmai.c
@@ -236,12 +236,13 @@  int board_early_init_f (void)
 
 int checkboard (void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: Katmai - AMCC 440SPe Evaluation Board");
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/kilauea/kilauea.c b/board/amcc/kilauea/kilauea.c
index bd6550c..1648734 100644
--- a/board/amcc/kilauea/kilauea.c
+++ b/board/amcc/kilauea/kilauea.c
@@ -307,16 +307,17 @@  int board_pcie_last(void)
 
 int checkboard (void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	if (is_405exr())
 		printf("Board: Haleakala - AMCC PPC405EXr Evaluation Board");
 	else
 		printf("Board: Kilauea - AMCC PPC405EX Evaluation Board");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	printf(" (CPLD rev. %ld)\n", gd->board_type);
 
diff --git a/board/amcc/luan/luan.c b/board/amcc/luan/luan.c
index b2595a8..d4b620e 100644
--- a/board/amcc/luan/luan.c
+++ b/board/amcc/luan/luan.c
@@ -105,13 +105,14 @@  int misc_init_r(void)
  ************************************************************************/
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: Luan - AMCC PPC440SP Evaluation Board");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/makalu/makalu.c b/board/amcc/makalu/makalu.c
index 483df66..34a094f 100644
--- a/board/amcc/makalu/makalu.c
+++ b/board/amcc/makalu/makalu.c
@@ -224,13 +224,14 @@  int misc_init_r(void)
 
 int checkboard (void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: Makalu - AMCC PPC405EX Evaluation Board");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/ocotea/ocotea.c b/board/amcc/ocotea/ocotea.c
index bbb5331..d2091e5 100644
--- a/board/amcc/ocotea/ocotea.c
+++ b/board/amcc/ocotea/ocotea.c
@@ -200,12 +200,13 @@  int board_early_init_f (void)
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf ("Board: Ocotea - AMCC PPC440GX Evaluation Board");
-	if (s != NULL) {
-		puts (", serial# ");
-		puts (s);
+	if (i > 0) {
+		puts(", serial# ");
+		puts(buf);
 	}
 	putc ('\n');
 
diff --git a/board/amcc/redwood/redwood.c b/board/amcc/redwood/redwood.c
index bb7565e..8ca1495 100644
--- a/board/amcc/redwood/redwood.c
+++ b/board/amcc/redwood/redwood.c
@@ -200,12 +200,13 @@  int board_early_init_f(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: Redwood - AMCC 460SX Reference Board");
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/sequoia/sequoia.c b/board/amcc/sequoia/sequoia.c
index b518aa7..45e87f7 100644
--- a/board/amcc/sequoia/sequoia.c
+++ b/board/amcc/sequoia/sequoia.c
@@ -331,7 +331,8 @@  int misc_init_r(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 	u8 rev;
 	u32 clock = get_async_pci_freq();
 
@@ -344,9 +345,9 @@  int checkboard(void)
 	rev = in_8((void *)(CONFIG_SYS_BCSR_BASE + 0));
 	printf(", Rev. %X, PCI-Async=%d MHz", rev, clock / 1000000);
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/taihu/taihu.c b/board/amcc/taihu/taihu.c
index 87c9403..8c6b097 100644
--- a/board/amcc/taihu/taihu.c
+++ b/board/amcc/taihu/taihu.c
@@ -65,13 +65,14 @@  int board_early_init_f(void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts("Board: Taihu - AMCC PPC405EP Evaluation Board");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/taishan/taishan.c b/board/amcc/taishan/taishan.c
index 2957a77..fcaf7fd 100644
--- a/board/amcc/taishan/taishan.c
+++ b/board/amcc/taishan/taishan.c
@@ -193,12 +193,13 @@  int misc_init_r(void)
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf ("Board: Taishan - AMCC PPC440GX Evaluation Board");
-	if (s != NULL) {
-		puts (", serial# ");
-		puts (s);
+	if (i > 0) {
+		puts(", serial# ");
+		puts(buf);
 	}
 	putc ('\n');
 
diff --git a/board/amcc/walnut/walnut.c b/board/amcc/walnut/walnut.c
index 4f29932..d3287ce 100644
--- a/board/amcc/walnut/walnut.c
+++ b/board/amcc/walnut/walnut.c
@@ -67,7 +67,8 @@  int board_early_init_f(void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 	uint pvr = get_pvr();
 
 	if (pvr == PVR_405GPR_RB) {
@@ -76,9 +77,9 @@  int checkboard(void)
 		puts("Board: Walnut - AMCC PPC405GP Evaluation Board");
 	}
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/yosemite/yosemite.c b/board/amcc/yosemite/yosemite.c
index aaeab6f..0c95c36 100644
--- a/board/amcc/yosemite/yosemite.c
+++ b/board/amcc/yosemite/yosemite.c
@@ -188,7 +188,8 @@  int misc_init_r (void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 	u8 rev;
 	u32 clock = get_async_pci_freq();
 
@@ -201,9 +202,9 @@  int checkboard(void)
 	rev = in_8((void *)(CONFIG_SYS_BCSR_BASE + 0));
 	printf(", Rev. %X, PCI-Async=%d MHz", rev, clock / 1000000);
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amcc/yucca/yucca.c b/board/amcc/yucca/yucca.c
index b128e46..1fab794 100644
--- a/board/amcc/yucca/yucca.c
+++ b/board/amcc/yucca/yucca.c
@@ -542,12 +542,13 @@  int board_early_init_f (void)
 
 int checkboard (void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: Yucca - AMCC 440SPe Evaluation Board");
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/amirix/ap1000/ap1000.c b/board/amirix/ap1000/ap1000.c
index c8dd99e..64de04c 100644
--- a/board/amirix/ap1000/ap1000.c
+++ b/board/amirix/ap1000/ap1000.c
@@ -37,8 +37,8 @@  int board_pre_init (void)
 /** serial number and platform display at startup */
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
-	char *e;
+	char buf[64];
+	int l = getenv_f("serial#", buf, sizeof(buf));
 
 	/* After a loadace command, the SystemAce control register is left in a wonky state. */
 	/* this code did not work in board_pre_init */
@@ -115,17 +115,19 @@  int checkboard (void)
 
 	puts ("Serial#: ");
 
-	if (!s) {
+	if (l < 0) {
 		printf ("### No HW ID - assuming AMIRIX");
 	} else {
-		for (e = s; *e; ++e) {
-			if (*e == ' ')
+		int i;
+
+		for (i = 0; i < l; ++i) {
+			if (buf[i] == ' ') {
+				buf[i] = '\0';
 				break;
+			}
 		}
 
-		for (; s < e; ++s) {
-			putc (*s);
-		}
+		puts(buf);
 	}
 
 	putc ('\n');
@@ -136,9 +138,11 @@  int checkboard (void)
 
 phys_size_t initdram (int board_type)
 {
-	char *s = getenv ("dramsize");
+	char buf[64];
+	int i = getenv_f("dramsize", buf, sizeof(buf));
 
-	if (s != NULL) {
+	if (i > 0) {
+		char *s = buf;
 		if ((s[0] == '0') && ((s[1] == 'x') || (s[1] == 'X'))) {
 			s += 2;
 		}
diff --git a/board/avnet/fx12mm/fx12mm.c b/board/avnet/fx12mm/fx12mm.c
index e671a7b..c975efa 100644
--- a/board/avnet/fx12mm/fx12mm.c
+++ b/board/avnet/fx12mm/fx12mm.c
@@ -32,20 +32,19 @@ 
 
 int checkboard(void)
 {
-	char tmp[64];
-	char *s, *e;
-	int i = getenv_f("serial", tmp, sizeof(tmp));
+	char buf[64];
+	int i;
+	int l = getenv_f("serial#", buf, sizeof(buf));
 
-	if (i < 0) {
+	if (l < 0) {
 		printf("Avnet Virtex4 FX12 with no serial #");
 	} else {
-		for (e = tmp; *e; ++e) {
-			if (*e == ' ')
+		printf("Avnet Virtex4 FX12 Minimodul # ");
+		for (i = 0; i < l; ++i) {
+			if (buf[i] == ' ')
 				break;
+			putc(buf[i]);
 		}
-		printf("Avnet Virtex4 FX12 Minimodul # ");
-		for (s = tmp; s < e; ++s)
-			putc(*s);
 	}
 	putc('\n');
 	return 0;
diff --git a/board/c2mon/c2mon.c b/board/c2mon/c2mon.c
index 717a64b..348dfa0 100644
--- a/board/c2mon/c2mon.c
+++ b/board/c2mon/c2mon.c
@@ -91,14 +91,16 @@  const uint sdram_table[] =
 
 int checkboard (void)
 {
-	unsigned char *s = (unsigned char *)getenv ("serial#");
+	char buf[64];
+	int i;
+	int l = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: TTTech C2MON ");
 
-	for (; s && *s; ++s) {
-		if (*s == ' ')
+	for (i = 0; i < l;  ++i) {
+		if (buf[i] == ' ')
 			break;
-		putc (*s);
+		putc (buf[i]);
 	}
 
 	putc ('\n');
diff --git a/board/digsy_mtc/digsy_mtc.c b/board/digsy_mtc/digsy_mtc.c
index 9f13a3d..a0c4b10 100644
--- a/board/digsy_mtc/digsy_mtc.c
+++ b/board/digsy_mtc/digsy_mtc.c
@@ -191,15 +191,16 @@  phys_size_t initdram(int board_type)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: InterControl digsyMTC");
 #if defined(CONFIG_DIGSY_REV5)
 	puts (" rev5");
 #endif
-	if (s != NULL) {
-		puts(", ");
-		puts(s);
+	if (i > 0) {
+		puts(", serial# ");
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/etx094/etx094.c b/board/etx094/etx094.c
index d6f638a..abefe4a 100644
--- a/board/etx094/etx094.c
+++ b/board/etx094/etx094.c
@@ -92,8 +92,9 @@  const uint sdram_table[] = {
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
-	char *e;
+	char buf[64];
+	int i;
+	int l = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: ");
 
@@ -103,19 +104,16 @@  int checkboard (void)
 	gd->board_type = 1; /* 1 = 1SDRAM-Device */
 #endif
 
-	if (!s || strncmp (s, "ETX_", 4)) {
+	if (l < 0 || strncmp(buf, "ETX_", 4)) {
 		puts ("### No HW ID - assuming ETX_094\n");
 		read_hw_vers ();
 		return (0);
 	}
 
-	for (e = s; *e; ++e) {
-		if (*e == ' ')
+	for (i = 0; i < l; ++i) {
+		if (buf[i] == ' ')
 			break;
-	}
-
-	for (; s < e; ++s) {
-		putc (*s);
+		putc(buf[i]);
 	}
 	putc ('\n');
 
diff --git a/board/gdsys/405ep/dlvision-10g.c b/board/gdsys/405ep/dlvision-10g.c
index 0388541..ecba66e 100644
--- a/board/gdsys/405ep/dlvision-10g.c
+++ b/board/gdsys/405ep/dlvision-10g.c
@@ -225,15 +225,16 @@  static void print_fpga_info(unsigned dev)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: ");
 
 	printf("DLVision 10G");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 
 	puts("\n");
diff --git a/board/gdsys/405ep/io.c b/board/gdsys/405ep/io.c
index 0974019..db1ea7f 100644
--- a/board/gdsys/405ep/io.c
+++ b/board/gdsys/405ep/io.c
@@ -87,8 +87,9 @@  err_out:
  */
 int checkboard(void)
 {
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 	ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(0);
-	char *s = getenv("serial#");
 	u16 versions = in_le16(&fpga->versions);
 	u16 fpga_version = in_le16(&fpga->fpga_version);
 	u16 fpga_features = in_le16(&fpga->fpga_features);
@@ -106,9 +107,9 @@  int checkboard(void)
 
 	printf("CATCenter Io");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	puts("\n       ");
 
diff --git a/board/gdsys/405ep/iocon.c b/board/gdsys/405ep/iocon.c
index 20770e4..ce53340 100644
--- a/board/gdsys/405ep/iocon.c
+++ b/board/gdsys/405ep/iocon.c
@@ -69,8 +69,9 @@  enum {
  */
 int checkboard(void)
 {
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 	ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(0);
-	char *s = getenv("serial#");
 	u16 versions = in_le16(&fpga->versions);
 	u16 fpga_version = in_le16(&fpga->fpga_version);
 	u16 fpga_features = in_le16(&fpga->fpga_features);
@@ -98,9 +99,9 @@  int checkboard(void)
 
 	printf("IoCon");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	puts("\n       ");
 
diff --git a/board/gdsys/dlvision/dlvision.c b/board/gdsys/dlvision/dlvision.c
index 3499bdc..5c70326 100644
--- a/board/gdsys/dlvision/dlvision.c
+++ b/board/gdsys/dlvision/dlvision.c
@@ -75,7 +75,8 @@  int misc_init_r(void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 	u8 channel2_msr = in_8((void *)CONFIG_UART_BASE + 0x26);
 	u8 channel3_msr = in_8((void *)CONFIG_UART_BASE + 0x36);
 	u8 channel7_msr = in_8((void *)CONFIG_UART_BASE + 0x76);
@@ -108,9 +109,9 @@  int checkboard(void)
 		break;
 	}
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	puts("\n       ");
 
diff --git a/board/gdsys/gdppc440etx/gdppc440etx.c b/board/gdsys/gdppc440etx/gdppc440etx.c
index 328eb95..c58411e 100644
--- a/board/gdsys/gdppc440etx/gdppc440etx.c
+++ b/board/gdsys/gdppc440etx/gdppc440etx.c
@@ -145,13 +145,14 @@  int misc_init_r(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: GDPPC440ETX - G&D PPC440EP/GR ETX-module");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/gdsys/intip/intip.c b/board/gdsys/intip/intip.c
index aa85ea4..0132b25 100644
--- a/board/gdsys/intip/intip.c
+++ b/board/gdsys/intip/intip.c
@@ -124,7 +124,8 @@  int get_cpu_num(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 #ifdef CONFIG_DEVCONCENTER
 	printf("Board: DevCon-Center");
@@ -132,9 +133,9 @@  int checkboard(void)
 	printf("Board: Intip");
 #endif
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/gdsys/neo/neo.c b/board/gdsys/neo/neo.c
index a56c2cc..d21d599 100644
--- a/board/gdsys/neo/neo.c
+++ b/board/gdsys/neo/neo.c
@@ -53,7 +53,8 @@  int board_early_init_f(void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 	u16 val = in_le16((void *)CONFIG_FPGA_BASE + 2);
 	u8 unit_type;
 	u8 hardware_cpu_ports;
@@ -62,9 +63,9 @@  int checkboard(void)
 
 	printf("Board: CATCenter Neo");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	puts("\n       ");
 
diff --git a/board/gw8260/gw8260.c b/board/gw8260/gw8260.c
index 28f5ca9..77a1e1d 100644
--- a/board/gw8260/gw8260.c
+++ b/board/gw8260/gw8260.c
@@ -214,13 +214,13 @@  const iop_conf_t iop_conf_tab[4][32] = {
 /*********************************************************************/
 int checkboard (void)
 {
-	char *str;
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: Advent Networks gw8260\n");
 
-	str = getenv ("serial#");
-	if (str != NULL) {
-		printf ("SN:    %s\n", str);
+	if (i > 0) {
+		printf("SN:    %s\n", buf);
 	}
 	return 0;
 }
diff --git a/board/hermes/hermes.c b/board/hermes/hermes.c
index 9a3e5f6..acf364e 100644
--- a/board/hermes/hermes.c
+++ b/board/hermes/hermes.c
@@ -107,21 +107,19 @@  const uint sdram_table[] = {
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
-	char *e;
+	char buf[64];
+	int i;
+	int l = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: ");
 
-	if (!s || strncmp (s, "HERMES", 6)) {
+	if (l < 0 || strncmp(buf, "HERMES", 6)) {
 		puts ("### No HW ID - assuming HERMES-PRO");
 	} else {
-		for (e = s; *e; ++e) {
-			if (*e == ' ')
+		for (i = 0; i < l; i++) {
+			if (buf[i] == ' ')
 				break;
-		}
-
-		for (; s < e; ++s) {
-			putc (*s);
+			putc (buf[i]);
 		}
 	}
 
diff --git a/board/ixdp425/ixdp425.c b/board/ixdp425/ixdp425.c
index 43ac8f6..a29d584 100644
--- a/board/ixdp425/ixdp425.c
+++ b/board/ixdp425/ixdp425.c
@@ -83,7 +83,8 @@  int board_init (void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 #ifdef CONFIG_IXDPG425
 	puts("Board: IXDPG425 - Intel Network Gateway Reference Platform");
@@ -91,9 +92,9 @@  int checkboard(void)
 	puts("Board: IXDP425 - Intel Development Platform");
 #endif
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/lwmon5/lwmon5.c b/board/lwmon5/lwmon5.c
index dd275bf..ecd9536 100644
--- a/board/lwmon5/lwmon5.c
+++ b/board/lwmon5/lwmon5.c
@@ -333,13 +333,14 @@  int misc_init_r(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts("Board: lwmon5");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/micronas/vct/vct.c b/board/micronas/vct/vct.c
index 7fc3507..a8eef37 100644
--- a/board/micronas/vct/vct.c
+++ b/board/micronas/vct/vct.c
@@ -80,8 +80,9 @@  phys_size_t initdram(int board_type)
 
 int checkboard(void)
 {
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 	u32 config0 = read_c0_prid();
-	char *s = getenv("serial#");
 
 	if ((config0 & 0xff0000) == PRID_COMP_LEGACY
 	    && (config0 & 0xff00) == PRID_IMP_LX4280) {
@@ -108,9 +109,9 @@  int checkboard(void)
 	}
 
 	printf("Board: Micronas VCT " BOARD_NAME BOARD_NAME_ADD);
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/ml2/ml2.c b/board/ml2/ml2.c
index 981e1de..319dca0 100644
--- a/board/ml2/ml2.c
+++ b/board/ml2/ml2.c
@@ -30,23 +30,19 @@  int board_early_init_f (void)
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
-	char *e;
+	char buf[64];
+	int i;
+	int l = getenv_f("serial#", buf, sizeof(buf));
 
-	if (!s || strncmp (s, "ML2", 9)) {
+	if (l < 0 || strncmp(buf, "ML2", 9)) {
 		printf ("### No HW ID - assuming ML2");
 	} else {
-		for (e = s; *e; ++e) {
-			if (*e == ' ')
+		for (i = 0; i < l; i++) {
+			if (buf[i] == ' ')
 				break;
-		}
-
-		for (; s < e; ++s) {
-			putc (*s);
+			putc(buf[i]);
 		}
 	}
-
-
 	putc ('\n');
 
 	return (0);
diff --git a/board/mosaixtech/icon/icon.c b/board/mosaixtech/icon/icon.c
index e09dbc3..e464e43 100644
--- a/board/mosaixtech/icon/icon.c
+++ b/board/mosaixtech/icon/icon.c
@@ -275,12 +275,13 @@  int board_early_init_r(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: ICON");
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/pcs440ep/pcs440ep.c b/board/pcs440ep/pcs440ep.c
index 70d8fe2..5a3ec58 100644
--- a/board/pcs440ep/pcs440ep.c
+++ b/board/pcs440ep/pcs440ep.c
@@ -509,12 +509,13 @@  int misc_init_r (void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: PCS440EP");
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/prodrive/alpr/alpr.c b/board/prodrive/alpr/alpr.c
index 1784982..a64f6b0 100644
--- a/board/prodrive/alpr/alpr.c
+++ b/board/prodrive/alpr/alpr.c
@@ -133,12 +133,13 @@  static int board_rev(void)
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf ("Board: ALPR");
-	if (s != NULL) {
-		puts (", serial# ");
-		puts (s);
+	if (i > 0) {
+		puts(", serial# ");
+		puts(buf);
 	}
 	printf(" (Rev. %d)\n", board_rev());
 
diff --git a/board/prodrive/p3mx/p3mx.c b/board/prodrive/p3mx/p3mx.c
index 05eca52..09e4f82 100644
--- a/board/prodrive/p3mx/p3mx.c
+++ b/board/prodrive/p3mx/p3mx.c
@@ -335,13 +335,14 @@  void after_reloc (ulong dest_addr, gd_t * gd)
 
 int checkboard (void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: %s", CONFIG_SYS_BOARD_NAME);
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/prodrive/p3p440/p3p440.c b/board/prodrive/p3p440/p3p440.c
index 020f66d..1bb9686 100644
--- a/board/prodrive/p3p440/p3p440.c
+++ b/board/prodrive/p3p440/p3p440.c
@@ -122,12 +122,13 @@  int board_early_init_f(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: P3P440");
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 
 	if (is_monarch()) {
diff --git a/board/prodrive/pdnb3/pdnb3.c b/board/prodrive/pdnb3/pdnb3.c
index 928dd22..3aaebf2 100644
--- a/board/prodrive/pdnb3/pdnb3.c
+++ b/board/prodrive/pdnb3/pdnb3.c
@@ -101,13 +101,14 @@  int board_init(void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts("Board: PDNB3");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/quad100hd/quad100hd.c b/board/quad100hd/quad100hd.c
index 2f72d2b..6044e85 100644
--- a/board/quad100hd/quad100hd.c
+++ b/board/quad100hd/quad100hd.c
@@ -58,16 +58,17 @@  int board_early_init_f(void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 #ifdef DISPLAY_BOARD_INFO
 	sys_info_t sysinfo;
 #endif
 
 	puts("Board: Quad100hd");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/quantum/quantum.c b/board/quantum/quantum.c
index d94b5d7..61c6a68 100644
--- a/board/quantum/quantum.c
+++ b/board/quantum/quantum.c
@@ -87,14 +87,16 @@  const uint sdram_table[] = {
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i;
+	int l = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board QUANTUM, Serial No: ");
 
-	for (; s && *s; ++s) {
-		if (*s == ' ')
+	for (i = 0; i < l; ++i) {
+		if (buf[i] == ' ')
 			break;
-		putc (*s);
+		putc (buf[i]);
 	}
 	putc ('\n');
 	return (0);		/* success */
diff --git a/board/rbc823/rbc823.c b/board/rbc823/rbc823.c
index e10d9f9..ddfba14 100644
--- a/board/rbc823/rbc823.c
+++ b/board/rbc823/rbc823.c
@@ -127,15 +127,16 @@  const uint static_table[] =
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
-	if (!s || strncmp (s, "TQM8", 4)) {
+	if (i < 0 || strncmp(buf, "TQM8", 4)) {
 		printf ("### No HW ID - assuming RBC823\n");
 		return (0);
 	}
 
-	puts (s);
-	putc ('\n');
+	puts(buf);
+	putc('\n');
 
 	return (0);
 }
diff --git a/board/socrates/socrates.c b/board/socrates/socrates.c
index 72e7401..65fb70a 100644
--- a/board/socrates/socrates.c
+++ b/board/socrates/socrates.c
@@ -52,15 +52,17 @@  ulong flash_get_size (ulong base, int banknum);
 int checkboard (void)
 {
 	volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
-
-	char *src;
+	char buf[64];
 	int f;
-	char *s = getenv("serial#");
+	int i = getenv_f("serial#", buf, sizeof(buf));
+#ifdef CONFIG_PCI
+	char *src;
+#endif
 
 	puts("Board: Socrates");
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/svm_sc8xx/svm_sc8xx.c b/board/svm_sc8xx/svm_sc8xx.c
index 4390e49..f34b835 100644
--- a/board/svm_sc8xx/svm_sc8xx.c
+++ b/board/svm_sc8xx/svm_sc8xx.c
@@ -75,27 +75,29 @@  const uint sdram_table[] =
  * Return 1 for "SC8xx" type, 0 else.
  */
 
-int checkboard (void)
+int checkboard(void)
 {
-    char *s = getenv("serial#");
-    int board_type;
+	char buf[64];
+	int i;
+	int l = getenv_f("serial#", buf, sizeof(buf));
+	int board_type;
 
-    if (!s || strncmp(s, "SVM8", 4)) {
-	printf ("### No HW ID - assuming SVM SC8xx\n");
-	return (0);
-    }
+	if (l < 0 || strncmp(buf, "SVM8", 4)) {
+		printf("### No HW ID - assuming SVM SC8xx\n");
+		return (0);
+	}
 
-    board_type = 1;
+	board_type = 1;
 
-    for (; *s; ++s) {
-	if (*s == ' ')
-	    break;
-	putc (*s);
-    }
+	for (i = 0; i < l; ++i) {
+		if (buf[i] == ' ')
+			break;
+		putc(buf[i]);
+	}
 
-    putc ('\n');
+	putc('\n');
 
-    return (0);
+	return (0);
 }
 
 /* ------------------------------------------------------------------------- */
diff --git a/board/t3corp/t3corp.c b/board/t3corp/t3corp.c
index f2853e4..57f09fa 100644
--- a/board/t3corp/t3corp.c
+++ b/board/t3corp/t3corp.c
@@ -89,13 +89,14 @@  int board_early_init_f(void)
 
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf("Board: T3CORP");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/ti/omap5912osk/omap5912osk.c b/board/ti/omap5912osk/omap5912osk.c
index cbf451b..6f0e763 100644
--- a/board/ti/omap5912osk/omap5912osk.c
+++ b/board/ti/omap5912osk/omap5912osk.c
@@ -295,13 +295,14 @@  void peripheral_power_enable (void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts("Board: OSK5912");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');
 
diff --git a/board/tqc/tqm8260/tqm8260.c b/board/tqc/tqm8260/tqm8260.c
index 95073b8..65a3174 100644
--- a/board/tqc/tqm8260/tqm8260.c
+++ b/board/tqc/tqm8260/tqm8260.c
@@ -195,17 +195,17 @@  const iop_conf_t iop_conf_tab[4][32] = {
  */
 int checkboard (void)
 {
-	char str[64];
-	int i = getenv_f("serial#", str, sizeof (str));
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: ");
 
-	if (!i || strncmp (str, "TQM82", 5)) {
+	if (i < 0 || strncmp(buf, "TQM82", 5)) {
 		puts ("### No HW ID - assuming TQM8260\n");
 		return (0);
 	}
 
-	puts (str);
+	puts (buf);
 	putc ('\n');
 
 	return 0;
diff --git a/board/tqc/tqm8272/tqm8272.c b/board/tqc/tqm8272/tqm8272.c
index 96ec078..9efb541 100644
--- a/board/tqc/tqm8272/tqm8272.c
+++ b/board/tqc/tqm8272/tqm8272.c
@@ -514,12 +514,16 @@  static inline int scanChar (char *p, int len, unsigned long *number)
 static int dump_hwib(void)
 {
 	HWIB_INFO	*hw = &hwinf;
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 	volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
-	char *s = getenv("serial#");
+
+	if (i < 0)
+		buf[0] = '\0';
 
 	if (hw->OK) {
 		printf ("HWIB on %x\n", HWIB_INFO_START_ADDR);
-		printf ("serial : %s\n", s);
+		printf ("serial : %s\n", buf);
 		printf ("ethaddr: %s\n", hw->ethaddr);
 		printf ("FLASH	: %x nr:%d\n", hw->flash, hw->flash_nr);
 		printf ("RAM	: %x cs:%d\n", hw->ram, hw->ram_cs);
diff --git a/board/tqc/tqm85xx/tqm85xx.c b/board/tqc/tqm85xx/tqm85xx.c
index 99b1331..8fb73ab 100644
--- a/board/tqc/tqm85xx/tqm85xx.c
+++ b/board/tqc/tqm85xx/tqm85xx.c
@@ -227,17 +227,19 @@  static const int casl_table[] = { 20, 25, 30 };
 
 int cas_latency (void)
 {
-	char *s = getenv ("serial#");
+	char buf[128];
 	int casl;
 	int val;
 	int i;
 
 	casl = CONFIG_DDR_DEFAULT_CL;
 
-	if (s != NULL) {
-		if (strncmp(s + strlen (s) - strlen (CASL_STRING1),
+	i = getenv_f("serial#", buf, sizeof(buf));
+
+	if (i >0) {
+		if (strncmp(buf + strlen (buf) - strlen (CASL_STRING1),
 			    CASL_STRING2, strlen (CASL_STRING2)) == 0) {
-			val = simple_strtoul (s + strlen (s) - 2, NULL, 10);
+			val = simple_strtoul (buf + strlen (buf) - 2, NULL, 10);
 
 			for (i = 0; i < N_CASL; ++i) {
 				if (val == casl_table[i]) {
@@ -252,12 +254,13 @@  int cas_latency (void)
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	printf ("Board: %s", CONFIG_BOARDNAME);
-	if (s != NULL) {
-		puts (", serial# ");
-		puts (s);
+	if (i > 0) {
+		puts(", serial# ");
+		puts(buf);
 	}
 	putc ('\n');
 
diff --git a/board/tqc/tqm8xx/tqm8xx.c b/board/tqc/tqm8xx/tqm8xx.c
index 6576e02..1fda53b 100644
--- a/board/tqc/tqm8xx/tqm8xx.c
+++ b/board/tqc/tqm8xx/tqm8xx.c
@@ -106,31 +106,33 @@  const uint sdram_table[] =
 
 int checkboard (void)
 {
-	char *s = getenv ("serial#");
+	char buf[64];
+	int i;
+	int l = getenv_f("serial#", buf, sizeof(buf));
 
 	puts ("Board: ");
 
-	if (!s || strncmp (s, "TQM8", 4)) {
+	if (l < 0 || strncmp(buf, "TQM8", 4)) {
 		puts ("### No HW ID - assuming TQM8xxL\n");
 		return (0);
 	}
 
-	if ((*(s + 6) == 'L')) {	/* a TQM8xxL type */
+	if ((buf[6] == 'L')) {	/* a TQM8xxL type */
 		gd->board_type = 'L';
 	}
 
-	if ((*(s + 6) == 'M')) {	/* a TQM8xxM type */
+	if ((buf[6] == 'M')) {	/* a TQM8xxM type */
 		gd->board_type = 'M';
 	}
 
-	if ((*(s + 6) == 'D')) {	/* a TQM885D type */
+	if ((buf[6] == 'D')) {	/* a TQM885D type */
 		gd->board_type = 'D';
 	}
 
-	for (; *s; ++s) {
-		if (*s == ' ')
+	for (i = 0; i < l; ++i) {
+		if (buf[i] == ' ')
 			break;
-		putc (*s);
+		putc (buf[i]);
 	}
 #ifdef CONFIG_VIRTLAB2
 	puts (" (Virtlab2)");
diff --git a/board/xes/common/board.c b/board/xes/common/board.c
index 738f0a6..4e60bb5 100644
--- a/board/xes/common/board.c
+++ b/board/xes/common/board.c
@@ -13,7 +13,9 @@ 
 int checkboard(void)
 {
 	char name[] = CONFIG_SYS_BOARD_NAME;
+	char buf[64];
 	char *s;
+	int i;
 
 #ifdef CONFIG_SYS_FORM_CUSTOM
 	s = "Custom";
@@ -52,12 +54,15 @@  int checkboard(void)
 
 	/* Display board specific information */
 	puts("       ");
-	if ((s = getenv("board_rev")))
-		printf("Rev %s, ", s);
-	if ((s = getenv("serial#")))
-		printf("Serial# %s, ", s);
-	if ((s = getenv("board_cfg")))
-		printf("Cfg %s", s);
+	i = getenv_f("board_rev", buf, sizeof(buf));
+	if (i > 0)
+		printf("Rev %s, ", buf);
+	i = getenv_f("serial#", buf, sizeof(buf));
+	if (i > 0)
+		printf("Serial# %s, ", buf);
+	i = getenv_f("board_cfg", buf, sizeof(buf));
+	if (i > 0)
+		printf("Cfg %s", buf);
 	puts("\n");
 
 	return 0;
diff --git a/board/xes/xpedite1000/xpedite1000.c b/board/xes/xpedite1000/xpedite1000.c
index a3534d2..4b0ee92 100644
--- a/board/xes/xpedite1000/xpedite1000.c
+++ b/board/xes/xpedite1000/xpedite1000.c
@@ -112,19 +112,20 @@  int board_early_init_f(void)
 
 int checkboard(void)
 {
-	char *s;
+	char buf[64];
+	int i;
 
 	printf("Board: X-ES %s PMC SBC\n", CONFIG_SYS_BOARD_NAME);
 	printf("       ");
-	s = getenv("board_rev");
-	if (s)
-		printf("Rev %s, ", s);
-	s = getenv("serial#");
-	if (s)
-		printf("Serial# %s, ", s);
-	s = getenv("board_cfg");
-	if (s)
-		printf("Cfg %s", s);
+	i = getenv_f("board_rev", buf, sizeof(buf));
+	if (i > 0)
+		printf("Rev %s, ", buf);
+	i = getenv_f("serial#", buf, sizeof(buf));
+	if (i > 0)
+		printf("Serial# %s, ", buf);
+	i = getenv_f("board_cfg", buf, sizeof(buf));
+	if (i > 0)
+		printf("Cfg %s", buf);
 	printf("\n");
 
 	return 0;
diff --git a/board/zeus/zeus.c b/board/zeus/zeus.c
index 7e33d3f..18cb85f 100644
--- a/board/zeus/zeus.c
+++ b/board/zeus/zeus.c
@@ -161,7 +161,8 @@  int misc_init_r(void)
  */
 int checkboard(void)
 {
-	char *s = getenv("serial#");
+	char buf[64];
+	int i = getenv_f("serial#", buf, sizeof(buf));
 
 	puts("Board: Zeus-");
 
@@ -172,9 +173,9 @@  int checkboard(void)
 
 	puts(" of BulletEndPoint");
 
-	if (s != NULL) {
+	if (i > 0) {
 		puts(", serial# ");
-		puts(s);
+		puts(buf);
 	}
 	putc('\n');