The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / buildroot-2015.05 / package / portmap / 0003-NO_FORK-control-usage-of-fork-for-nommu-systems.patch
diff --git a/cirros-testvm/src-cirros/buildroot-2015.05/package/portmap/0003-NO_FORK-control-usage-of-fork-for-nommu-systems.patch b/cirros-testvm/src-cirros/buildroot-2015.05/package/portmap/0003-NO_FORK-control-usage-of-fork-for-nommu-systems.patch
new file mode 100644 (file)
index 0000000..41396b6
--- /dev/null
@@ -0,0 +1,95 @@
+From b3afea5757af1a7356ba30d2e0a7d5909ca18121 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Fri, 19 Nov 2010 23:48:20 -0500
+Subject: [PATCH 3/4] NO_FORK: control usage of fork() for nommu systems
+
+nommu systems lack a fork() function, so add a NO_FORK flag to control
+its usage.  We don't lose a ton of functionality in doing so, and on an
+embedded system, this is OK.
+
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+---
+ Makefile     |    5 +++++
+ README       |    1 +
+ pmap_check.c |    6 ++++--
+ portmap.c    |    6 ++++++
+ 4 files changed, 16 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index cfcfdbb..9df5574 100644
+--- a/Makefile
++++ b/Makefile
+@@ -27,6 +27,11 @@ MAN_SED += -e 's/USE_DNS/yes/'
+ endif
+ endif
++# For no-mmu systems, we have to disable the fork() functions.
++ifneq ($(NO_FORK),)
++CPPFLAGS += -DNO_FORK
++endif
++
+ # Comment out if your RPC library does not allocate privileged ports for
+ # requests from processes with root privilege, or the new portmap will
+ # always reject requests to register/unregister services on privileged
+diff --git a/README b/README
+index e0b561a..bda1707 100644
+--- a/README
++++ b/README
+@@ -18,6 +18,7 @@ There is no "./configure", just use "make".
+ Some make variable can be used to control compilation.
++ NO_FORK=       if non-empty, don't use fork (good for nommu systems)
+  NO_PIE=        if non-empty, don't build portmap as a PIE
+  NO_TCP_WRAPPER=  if non-empty, don't use tcp_wrappers
+  USE_DNS=       if set, tcp_wrappers can check peers based on hostname
+diff --git a/pmap_check.c b/pmap_check.c
+index 6b3e490..983414e 100644
+--- a/pmap_check.c
++++ b/pmap_check.c
+@@ -302,8 +302,10 @@ static void logit(int severity, struct sockaddr_in *addr,
+      * getrpcbynumber() or syslog() does its thing.
+      */
+-    if (fork() == 0) {
+-
++#ifndef NO_FORK
++    if (fork() == 0)
++#endif
++    {
+       /* Try to map program number to name. */
+       if (prognum == 0) {
+diff --git a/portmap.c b/portmap.c
+index 2a98881..94abc64 100644
+--- a/portmap.c
++++ b/portmap.c
+@@ -753,6 +755,7 @@ static void callit(struct svc_req *rqstp, SVCXPRT *xprt)
+       if ((pml = find_service(a.rmt_prog, a.rmt_vers,
+           (u_long)IPPROTO_UDP)) == NULL)
+               return;
++#ifndef NO_FORK
+       /*
+        * fork a child to do the work.  Parent immediately returns.
+        * Child exits upon completion.
+@@ -763,6 +766,7 @@ static void callit(struct svc_req *rqstp, SVCXPRT *xprt)
+                           a.rmt_prog);
+               return;
+       }
++#endif
+       port = pml->pml_map.pm_port;
+       get_myaddress(&me);
+       me.sin_port = htons(port);
+@@ -783,7 +787,9 @@ static void callit(struct svc_req *rqstp, SVCXPRT *xprt)
+               clnt_destroy(client);
+       }
+       (void)close(so);
++#ifndef NO_FORK
+       exit(0);
++#endif
+ }
+ #ifndef IGNORE_SIGCHLD                        /* Lionel Cons <cons@dxcern.cern.ch> */
+-- 
+1.7.3.1
+