[Buildroot] [PATCH 1/2] util-linux: nommu: Add patch to use vfork in nommu arch.

sonic.adi at gmail.com sonic.adi at gmail.com
Mon Nov 11 10:29:24 UTC 2013


From: Sonic Zhang <sonic.zhang at analog.com>

Signed-off-by: Sonic Zhang <sonic.zhang at analog.com>
---
 package/util-linux/util-linux-nommu.patch | 591 ++++++++++++++++++++++++++++++
 1 file changed, 591 insertions(+)
 create mode 100644 package/util-linux/util-linux-nommu.patch

diff --git a/package/util-linux/util-linux-nommu.patch b/package/util-linux/util-linux-nommu.patch
new file mode 100644
index 0000000..b09783c
--- /dev/null
+++ b/package/util-linux/util-linux-nommu.patch
@@ -0,0 +1,591 @@
+diff -urN util-linux-2.23.2.old/configure.ac util-linux-2.23.2/configure.ac
+--- util-linux-2.23.2.old/configure.ac	2013-11-11 14:34:33.550893863 +0800
++++ util-linux-2.23.2/configure.ac	2013-11-11 14:44:23.762438640 +0800
+@@ -311,6 +311,7 @@
+ 	err \
+ 	errx \
+ 	fsync \
++	fork \
+ 	futimens \
+ 	getdomainname \
+ 	getdtablesize \
+diff -urN util-linux-2.23.2.old/disk-utils/fsck.c util-linux-2.23.2/disk-utils/fsck.c
+--- util-linux-2.23.2.old/disk-utils/fsck.c	2013-06-13 15:46:10.377650254 +0800
++++ util-linux-2.23.2/disk-utils/fsck.c	2013-11-11 14:48:48.383360534 +0800
+@@ -606,7 +606,11 @@
+ 	/* Fork and execute the correct program. */
+ 	if (noexecute)
+ 		pid = -1;
++#ifndef HAVE_FORK
++	else if ((pid = vfork()) < 0) {
++#else
+ 	else if ((pid = fork()) < 0) {
++#endif
+ 		warn(_("fork failed"));
+ 		free(inst);
+ 		return errno;
+@@ -755,10 +759,18 @@
+ 			 * time to set up the signal handler
+ 			 */
+ 			if (inst2->start_time.tv_sec < time(0) + 2) {
++#ifndef HAVE_FORK
++				if (vfork() == 0) {
++#else
+ 				if (fork() == 0) {
++#endif
+ 					sleep(1);
+ 					kill(inst2->pid, SIGUSR1);
++#ifndef HAVE_FORK
++					_exit(EXIT_OK);
++#else
+ 					exit(FSCK_EX_OK);
++#endif
+ 				}
+ 			} else
+ 				kill(inst2->pid, SIGUSR1);
+diff -urN util-linux-2.23.2.old/fdisks/fdiskbsdlabel.h util-linux-2.23.2/fdisks/fdiskbsdlabel.h
+--- util-linux-2.23.2.old/fdisks/fdiskbsdlabel.h	2013-07-30 16:54:15.362994206 +0800
++++ util-linux-2.23.2/fdisks/fdiskbsdlabel.h	2013-11-11 14:52:18.285623027 +0800
+@@ -50,7 +50,7 @@
+     defined (__mips__) || defined (__s390__) || defined (__sh__) || \
+     defined (__aarch64__) || defined(__xtensa__) || \
+     defined (__x86_64__) || defined (__avr32__) || defined(__cris__) || \
+-    defined (__microblaze__)
++    defined(__bfin__) || defined (__microblaze__)
+ #define BSD_LABELSECTOR   1
+ #define BSD_LABELOFFSET   0
+ #elif defined (__alpha__) || defined (__powerpc__) || defined (__ia64__) || defined (__hppa__)
+diff -urN util-linux-2.23.2.old/libblkid/src/topology/dm.c util-linux-2.23.2/libblkid/src/topology/dm.c
+--- util-linux-2.23.2.old/libblkid/src/topology/dm.c	2013-06-13 15:46:10.428650690 +0800
++++ util-linux-2.23.2/libblkid/src/topology/dm.c	2013-11-11 15:13:11.316088170 +0800
+@@ -61,7 +61,11 @@
+ 		goto nothing;
+ 	}
+ 
++#ifndef HAVE_FORK
++	switch (vfork()) {
++#else
+ 	switch (fork()) {
++#endif
+ 	case 0:
+ 	{
+ 		char *dmargv[7], maj[16], min[16];
+@@ -74,9 +78,9 @@
+ 
+ 		/* The libblkid library could linked with setuid programs */
+ 		if (setgid(getgid()) < 0)
+-			 exit(1);
++			 _exit(1);
+ 		if (setuid(getuid()) < 0)
+-			 exit(1);
++			 _exit(1);
+ 
+ 		snprintf(maj, sizeof(maj), "%d", major(devno));
+ 		snprintf(min, sizeof(min), "%d", minor(devno));
+@@ -92,7 +96,7 @@
+ 		execv(dmargv[0], dmargv);
+ 
+ 		DBG(LOWPROBE, blkid_debug("Failed to execute %s: errno=%d", cmd, errno));
+-		exit(1);
++		_exit(1);
+ 	}
+ 	case -1:
+ 		DBG(LOWPROBE, blkid_debug("Failed to forking: errno=%d", errno));
+diff -urN util-linux-2.23.2.old/libblkid/src/topology/lvm.c util-linux-2.23.2/libblkid/src/topology/lvm.c
+--- util-linux-2.23.2.old/libblkid/src/topology/lvm.c	2013-06-13 15:46:10.429650699 +0800
++++ util-linux-2.23.2/libblkid/src/topology/lvm.c	2013-11-11 15:14:07.483452404 +0800
+@@ -71,7 +71,11 @@
+ 		goto nothing;
+ 	}
+ 
++#ifndef HAVE_FORK
++	switch (vfork()) {
++#else
+ 	switch (fork()) {
++#endif
+ 	case 0:
+ 	{
+ 		char *lvargv[3];
+@@ -84,9 +88,9 @@
+ 
+ 		/* The libblkid library could linked with setuid programs */
+ 		if (setgid(getgid()) < 0)
+-			 exit(1);
++			 _exit(1);
+ 		if (setuid(getuid()) < 0)
+-			 exit(1);
++			 _exit(1);
+ 
+ 		lvargv[0] = cmd;
+ 		lvargv[1] = devname;
+@@ -95,7 +99,7 @@
+ 		execv(lvargv[0], lvargv);
+ 
+ 		DBG(LOWPROBE, blkid_debug("Failed to execute %s: errno=%d", cmd, errno));
+-		exit(1);
++		_exit(1);
+ 	}
+ 	case -1:
+ 		DBG(LOWPROBE, blkid_debug("Failed to forking: errno=%d", errno));
+diff -urN util-linux-2.23.2.old/libmount/src/context_mount.c util-linux-2.23.2/libmount/src/context_mount.c
+--- util-linux-2.23.2.old/libmount/src/context_mount.c	2013-06-13 15:46:10.432650724 +0800
++++ util-linux-2.23.2/libmount/src/context_mount.c	2013-11-11 14:44:33.215049590 +0800
+@@ -499,17 +499,29 @@
+ 
+ 	DBG_FLUSH;
+ 
++#ifndef HAVE_FORK
++	switch (vfork()) {
++#else
+ 	switch (fork()) {
++#endif
+ 	case 0:
+ 	{
+ 		const char *args[12], *type;
+ 		int i = 0;
+ 
+ 		if (setgid(getgid()) < 0)
++#ifndef HAVE_FORK
++			_exit(EXIT_FAILURE);
++#else
+ 			exit(EXIT_FAILURE);
++#endif
+ 
+ 		if (setuid(getuid()) < 0)
++#ifndef HAVE_FORK
++			_exit(EXIT_FAILURE);
++#else
+ 			exit(EXIT_FAILURE);
++#endif
+ 
+ 		type = mnt_fs_get_fstype(cxt->fs);
+ 
+@@ -546,7 +558,11 @@
+ #endif
+ 		DBG_FLUSH;
+ 		execv(cxt->helper, (char * const *) args);
++#ifndef HAVE_FORK
++		_exit(EXIT_FAILURE);
++#else
+ 		exit(EXIT_FAILURE);
++#endif
+ 	}
+ 	default:
+ 	{
+@@ -1123,7 +1123,7 @@
+ 	if (mnt_context_is_child(cxt)) {
+ 		DBG(CXT, mnt_debug_h(cxt, "next-mount: child exit [rc=%d]", rc));
+ 		DBG_FLUSH;
+-		exit(rc);
++		_exit(rc);
+ 	}
+ 	return 0;
+ }
+diff -urN util-linux-2.23.2.old/libmount/src/context_umount.c util-linux-2.23.2/libmount/src/context_umount.c
+--- util-linux-2.23.2.old/libmount/src/context_umount.c	2013-07-15 16:25:46.290049113 +0800
++++ util-linux-2.23.2/libmount/src/context_umount.c	2013-11-11 14:44:33.211047925 +0800
+@@ -441,17 +441,29 @@
+ 
+ 	DBG_FLUSH;
+ 
++#ifndef HAVE_FORK
++	switch (vfork()) {
++#else
+ 	switch (fork()) {
++#endif
+ 	case 0:
+ 	{
+ 		const char *args[10], *type;
+ 		int i = 0;
+ 
+ 		if (setgid(getgid()) < 0)
++#ifndef HAVE_FORK
++			_exit(EXIT_FAILURE);
++#else
+ 			exit(EXIT_FAILURE);
++#endif
+ 
+ 		if (setuid(getuid()) < 0)
++#ifndef HAVE_FORK
++			_exit(EXIT_FAILURE);
++#else
+ 			exit(EXIT_FAILURE);
++#endif
+ 
+ 		type = mnt_fs_get_fstype(cxt->fs);
+ 
+@@ -481,7 +493,11 @@
+ #endif
+ 		DBG_FLUSH;
+ 		execv(cxt->helper, (char * const *) args);
++#ifndef HAVE_FORK
++		_exit(EXIT_FAILURE);
++#else
+ 		exit(EXIT_FAILURE);
++#endif
+ 	}
+ 	default:
+ 	{
+diff -urN util-linux-2.23.2.old/login-utils/login.c util-linux-2.23.2/login-utils/login.c
+--- util-linux-2.23.2.old/login-utils/login.c	2013-07-30 16:39:26.222738397 +0800
++++ util-linux-2.23.2/login-utils/login.c	2013-11-11 15:10:11.720590863 +0800
+@@ -1079,7 +1079,11 @@
+ 	 * We must fork before setuid() because we need to call
+ 	 * pam_close_session() as root.
+ 	 */
++#ifndef HAVE_FORK
++	child_pid = vfork();
++#else
+ 	child_pid = fork();
++#endif
+ 	if (child_pid < 0) {
+ 		/*
+ 		 * fork() error
+@@ -1117,8 +1121,11 @@
+ 	sigaction(SIGHUP, &oldsa_hup, NULL);		/* restore old state */
+ 	sigaction(SIGTERM, &oldsa_term, NULL);
+ 	if (got_sig)
++#ifndef HAVE_FORK
++		_exit(EXIT_SUCCESS);
++#else
+ 		exit(EXIT_FAILURE);
+-
++#endif
+ 	/*
+ 	 * Problem: if the user's shell is a shell like ash that doesn't do
+ 	 * setsid() or setpgrp(), then a ctrl-\, sending SIGQUIT to every
+@@ -1428,7 +1435,7 @@
+ 	/* discard permissions last so can't get killed and drop core */
+ 	if (setuid(pwd->pw_uid) < 0 && pwd->pw_uid) {
+ 		syslog(LOG_ALERT, _("setuid() failed"));
+-		exit(EXIT_FAILURE);
++		_exit(EXIT_FAILURE);
+ 	}
+ 
+ 	/* wait until here to change directory! */
+@@ -1436,9 +1443,9 @@
+ 		warn(_("%s: change directory failed"), pwd->pw_dir);
+ 
+ 		if (!getlogindefs_bool("DEFAULT_HOME", 1))
+-			exit(0);
++			_exit(0);
+ 		if (chdir("/"))
+-			exit(EXIT_FAILURE);
++			_exit(EXIT_FAILURE);
+ 		pwd->pw_dir = "/";
+ 		printf(_("Logging in with home = \"/\".\n"));
+ 	}
+@@ -1473,7 +1480,7 @@
+ 	else
+ 		warn(_("no shell"));
+ 
+-	exit(EXIT_SUCCESS);
++	_exit(EXIT_SUCCESS);
+ }
+ 
+ 
+diff -urN util-linux-2.23.2.old/login-utils/vipw.c util-linux-2.23.2/login-utils/vipw.c
+--- util-linux-2.23.2.old/login-utils/vipw.c	2013-06-13 15:46:10.445650836 +0800
++++ util-linux-2.23.2/login-utils/vipw.c	2013-11-11 14:44:33.223052968 +0800
+@@ -208,7 +208,11 @@
+ 	else
+ 		p = editor;
+ 
++#ifndef HAVE_FORK
++	pid = vfork();
++#else
+ 	pid = fork();
++#endif
+ 	if (pid < 0)
+ 		err(EXIT_FAILURE, _("fork failed"));
+ 
+diff -urN util-linux-2.23.2.old/sys-utils/flock.c util-linux-2.23.2/sys-utils/flock.c
+--- util-linux-2.23.2.old/sys-utils/flock.c	2013-07-30 16:39:26.338739544 +0800
++++ util-linux-2.23.2/sys-utils/flock.c	2013-11-11 14:59:17.129680082 +0800
+@@ -286,8 +286,11 @@
+ 		pid_t w, f;
+ 		/* Clear any inherited settings */
+ 		signal(SIGCHLD, SIG_DFL);
++#ifndef HAVE_FORK
++		f = vfork();
++#else
+ 		f = fork();
+-
++#endif
+ 		if (f < 0) {
+ 			err(EX_OSERR, _("fork failed"));
+ 		} else if (f == 0) {
+diff -urN util-linux-2.23.2.old/sys-utils/setsid.c util-linux-2.23.2/sys-utils/setsid.c
+--- util-linux-2.23.2.old/sys-utils/setsid.c	2013-07-30 16:39:26.348739643 +0800
++++ util-linux-2.23.2/sys-utils/setsid.c	2013-11-11 14:58:28.542008597 +0800
+@@ -74,7 +74,11 @@
+ 		usage(stderr);
+ 
+ 	if (getpgrp() == getpid()) {
++#ifndef HAVE_FORK
++		switch(vfork()){
++#else
+ 		switch (fork()) {
++#endif
+ 		case -1:
+ 			err(EXIT_FAILURE, _("fork"));
+ 		case 0:
+diff -urN util-linux-2.23.2.old/sys-utils/swapon.c util-linux-2.23.2/sys-utils/swapon.c
+--- util-linux-2.23.2.old/sys-utils/swapon.c	2013-07-30 16:39:26.348739643 +0800
++++ util-linux-2.23.2/sys-utils/swapon.c	2013-11-11 14:44:33.223052968 +0800
+@@ -261,7 +261,11 @@
+ 
+ 	warnx(_("%s: reinitializing the swap."), device);
+ 
++#ifndef HAVE_FORK
++	switch((pid=vfork())) {
++#else
+ 	switch((pid=fork())) {
++#endif
+ 	case -1: /* fork error */
+ 		warn(_("fork failed"));
+ 		return -1;
+diff -urN util-linux-2.23.2.old/sys-utils/switch_root.c util-linux-2.23.2/sys-utils/switch_root.c
+--- util-linux-2.23.2.old/sys-utils/switch_root.c	2013-06-13 15:46:10.544651682 +0800
++++ util-linux-2.23.2/sys-utils/switch_root.c	2013-11-11 14:54:08.311226318 +0800
+@@ -172,7 +172,11 @@
+ 	}
+ 
+ 	if (cfd >= 0) {
++#ifndef HAVE_FORK
++		pid = vfork();
++#else
+ 		pid = fork();
++#endif
+ 		if (pid <= 0) {
+ 			if (fstat(cfd, &sb) == 0) {
+ 				if (sb.st_dev == makedev(0, 1))
+@@ -182,7 +186,11 @@
+ 			}
+ 
+ 			if (pid == 0)
++#ifndef HAVE_FORK
++				_exit(EXIT_SUCCESS);
++#else
+ 				exit(EXIT_SUCCESS);
++#endif
+ 		}
+ 		close(cfd);
+ 	}
+diff -urN util-linux-2.23.2.old/term-utils/script.c util-linux-2.23.2/term-utils/script.c
+--- util-linux-2.23.2.old/term-utils/script.c	2013-06-13 15:46:10.546651699 +0800
++++ util-linux-2.23.2/term-utils/script.c	2013-11-11 14:44:33.227054773 +0800
+@@ -257,7 +257,11 @@
+ 	sigaddset(&block_mask, SIGCHLD);
+ 
+ 	sigprocmask(SIG_SETMASK, &block_mask, &unblock_mask);
++#ifndef HAVE_FORK
++	child = vfork();
++#else
+ 	child = fork();
++#endif
+ 	sigprocmask(SIG_SETMASK, &unblock_mask, NULL);
+ 
+ 	if (child < 0) {
+@@ -267,7 +271,11 @@
+ 	if (child == 0) {
+ 
+ 		sigprocmask(SIG_SETMASK, &block_mask, NULL);
++#ifndef HAVE_FORK
++		subchild = child = vfork();
++#else
+ 		subchild = child = fork();
++#endif
+ 		sigprocmask(SIG_SETMASK, &unblock_mask, NULL);
+ 
+ 		if (child < 0) {
+@@ -505,11 +513,21 @@
+ 
+ 	if(eflg) {
+ 		if (WIFSIGNALED(childstatus))
+-			exit(WTERMSIG(childstatus) + 0x80);
++#ifndef HAVE_FORK
++			_exit(WTERMSIG(childstatus) + 0x80);
++		else
++			exit(WEXITSTATUS(childstatus));
++#else
++			_exit(WTERMSIG(childstatus) + 0x80);
+ 		else
+ 			exit(WEXITSTATUS(childstatus));
++#endif
+ 	}
++#ifndef HAVE_FORK
++	_exit(EXIT_SUCCESS);
++#else
+ 	exit(EXIT_SUCCESS);
++#endif
+ }
+ 
+ void
+diff -urN util-linux-2.23.2.old/term-utils/ttymsg.c util-linux-2.23.2/term-utils/ttymsg.c
+--- util-linux-2.23.2.old/term-utils/ttymsg.c	2013-07-30 16:39:26.352739682 +0800
++++ util-linux-2.23.2/term-utils/ttymsg.c	2013-11-11 14:44:33.227054773 +0800
+@@ -136,7 +136,11 @@
+ 				(void) close(fd);
+ 				_exit(EXIT_FAILURE);
+ 			}
++#ifndef HAVE_FORK
++			cpid = vfork();
++#else
+ 			cpid = fork();
++#endif
+ 			if (cpid < 0) {
+ 				if (strlen(strerror(errno)) > 1000)
+ 					(void) sprintf(errbuf, _("cannot fork"));
+diff -urN util-linux-2.23.2.old/text-utils/more.c util-linux-2.23.2/text-utils/more.c
+--- util-linux-2.23.2.old/text-utils/more.c	2013-07-30 16:39:26.358739741 +0800
++++ util-linux-2.23.2/text-utils/more.c	2013-11-11 14:51:17.355938643 +0800
+@@ -1659,7 +1659,11 @@
+ 
+ 	fflush(stdout);
+ 	reset_tty();
++#ifndef HAVE_FORK
++	for (n = 10; (id = vfork()) < 0 && n > 0; n--)
++#else
+ 	for (n = 10; (id = fork()) < 0 && n > 0; n--)
++#endif
+ 		sleep(5);
+ 	if (id == 0) {
+ 		if (!isatty(0)) {
+@@ -1691,7 +1695,11 @@
+ 
+ 		execvp(cmd, args);
+ 		putserr(_("exec failed\n"));
++#ifndef HAVE_FORK
++		_exit(EXIT_FAILURE);
++#else
+ 		exit(EXIT_FAILURE);
++#endif
+ 	}
+ 	if (id > 0) {
+ 		signal(SIGINT, SIG_IGN);
+diff -urN util-linux-2.23.2.old/text-utils/pg.c util-linux-2.23.2/text-utils/pg.c
+--- util-linux-2.23.2.old/text-utils/pg.c	2013-07-30 16:39:26.359739751 +0800
++++ util-linux-2.23.2/text-utils/pg.c	2013-11-11 14:44:33.231056254 +0800
+@@ -1330,7 +1330,11 @@
+ 					write_all(STDOUT_FILENO, "\n", 1);
+ 					my_sigset(SIGINT, SIG_IGN);
+ 					my_sigset(SIGQUIT, SIG_IGN);
++#ifndef HAVE_FORK
++					switch (cpid = vfork()) {
++#else
+ 					switch (cpid = fork()) {
++#endif
+ 					case 0:
+ 					{
+ 						const char *sh = getenv("SHELL");
+diff -urN util-linux-2.23.2.old/lib/pager.c util-linux-2.23.2/lib/pager.c
+--- util-linux-2.23.2.old/lib/pager.c	2013-07-30 16:39:26.204738219 +0800
++++ util-linux-2.23.2/lib/pager.c	2013-11-11 17:21:04.690487001 +0800
+@@ -70,7 +70,11 @@
+ 	}
+ 
+ 	fflush(NULL);
++#ifndef HAVE_FORK
++	cmd->pid = vfork();
++#else
+ 	cmd->pid = fork();
++#endif
+ 	if (!cmd->pid) {
+ 		if (need_in) {
+ 			dup2(fdin[0], 0);
+@@ -82,7 +86,7 @@
+ 
+ 		cmd->preexec_cb();
+ 		execvp(cmd->argv[0], (char *const*) cmd->argv);
+-		exit(127); /* cmd not found */
++		_exit(127); /* cmd not found */
+ 	}
+ 
+ 	if (cmd->pid < 0) {
+diff -urN util-linux-2.23.2.old/libmount/src/context.c util-linux-2.23.2/libmount/src/context.c
+--- util-linux-2.23.2.old/libmount/src/context.c	2013-07-30 16:39:26.214738318 +0800
++++ util-linux-2.23.2/libmount/src/context.c	2013-11-11 17:22:02.246527785 +0800
+@@ -2199,8 +2199,11 @@
+ 
+ 	DBG_FLUSH;
+ 
++#ifndef HAVE_FORK
++	pid = vfork();
++#else
+ 	pid = fork();
+-
++#endif
+ 	switch (pid) {
+ 	case -1: /* error */
+ 		DBG(CXT, mnt_debug_h(cxt, "fork failed %m"));
+diff -urN util-linux-2.23.2.old/login-utils/su-common.c util-linux-2.23.2/login-utils/su-common.c
+--- util-linux-2.23.2.old/login-utils/su-common.c	2013-07-30 16:39:26.223738407 +0800
++++ util-linux-2.23.2/login-utils/su-common.c	2013-11-11 17:30:35.612635118 +0800
+@@ -271,7 +271,11 @@
+   else
+     _pam_session_opened = 1;
+ 
++#ifndef HAVE_FORK
++  child = vfork ();
++#else
+   child = fork ();
++#endif
+   if (child == (pid_t) -1)
+     {
+       cleanup_pam (PAM_ABORT);
+diff -urN util-linux-2.23.2.old/login-utils/sulogin.c util-linux-2.23.2/login-utils/sulogin.c
+--- util-linux-2.23.2.old/login-utils/sulogin.c	2013-07-30 16:39:26.225738427 +0800
++++ util-linux-2.23.2/login-utils/sulogin.c	2013-11-11 17:29:48.421644098 +0800
+@@ -912,8 +912,11 @@
+ 		con = list_entry(ptr, struct console, entry);
+ 		if (con->id >= CONMAX)
+ 			break;
+-
++#ifndef HAVE_FORK
++		switch ((con->pid = vfork())) {
++#else
+ 		switch ((con->pid = fork())) {
++#endif
+ 		case 0:
+ 			mask_signal(SIGCHLD, SIG_DFL, NULL);
+ 			/* fall through */
+@@ -963,7 +966,7 @@
+ 			/*
+ 			 * User pressed Control-D.
+ 			 */
+-			exit(0);
++			_exit(0);
+ 		case -1:
+ 			warn(_("fork failed"));
+ 			/* fall through */
+diff -urN util-linux-2.23.2.old/sys-utils/eject.c util-linux-2.23.2/sys-utils/eject.c
+--- util-linux-2.23.2.old/sys-utils/eject.c	2013-07-30 16:53:48.342745064 +0800
++++ util-linux-2.23.2/sys-utils/eject.c	2013-11-11 17:31:55.427519728 +0800
+@@ -652,7 +652,11 @@
+ 
+ 	verbose(_("%s: unmounting"), name);
+ 
++#ifndef HAVE_FORK
++	switch (vfork()) {
++#else
+ 	switch (fork()) {
++#endif
+ 	case 0: /* child */
+ 		if (setgid(getgid()) < 0)
+ 			err(EXIT_FAILURE, _("cannot set group id"));
+diff -urN util-linux-2.23.2.old/sys-utils/nsenter.c util-linux-2.23.2/sys-utils/nsenter.c
+--- util-linux-2.23.2.old/sys-utils/nsenter.c	2013-07-30 16:39:26.345739613 +0800
++++ util-linux-2.23.2/sys-utils/nsenter.c	2013-11-11 17:33:23.038203353 +0800
+@@ -127,7 +127,11 @@
+ 
+ static void continue_as_child(void)
+ {
++#ifndef HAVE_FORK
++	pid_t child = vfork();
++#else
+ 	pid_t child = fork();
++#endif
+ 	int status;
+ 	pid_t ret;
+ 
-- 
1.8.2.3



More information about the buildroot mailing list