Jamie Guinan writes:

It looks like latest uClibc defines ARCH_HAS_MMU, but a few busybox files
test UCLIBC_HAS_MMU, resulting in vfork() getting called instead of
fork(), etc.

Patch below.   Only tested for lash.

Cheers,
-Jamie
diff --git a/shell/hush.c b/shell/hush.c
index ad5ddf0..8f4cc97 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -1439,7 +1439,7 @@
 		}
 
 		/* XXX test for failed fork()? */
-#if !defined(__UCLIBC__) || defined(__UCLIBC_HAS_MMU__)
+#if !defined(__UCLIBC__) || defined(__ARCH_HAS_MMU__)
 		if (!(child->pid = fork()))
 #else
 		if (!(child->pid = vfork()))
@@ -2258,7 +2258,7 @@
 #if 1
 	int pid, channel[2];
 	if (pipe(channel)<0) bb_perror_msg_and_die("pipe");
-#if !defined(__UCLIBC__) || defined(__UCLIBC_HAS_MMU__)
+#if !defined(__UCLIBC__) || defined(__ARCH_HAS_MMU__)
 	pid=fork();
 #else
 	pid=vfork();
diff --git a/shell/lash.c b/shell/lash.c
index b46cee8..fa416c7 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -1380,7 +1380,7 @@
 			}
 		}
 
-#if !defined(__UCLIBC__) || defined(__UCLIBC_HAS_MMU__)
+#if !defined(__UCLIBC__) || defined(__ARCH_HAS_MMU__)
 		if (!(child->pid = fork()))
 #else
 		if (!(child->pid = vfork()))