[PATCH v2] man/man2/clone.2: Use munmap() to free child stack

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



While reading the help manual for clone.2, I notice that the parent
process in the example code does not release the stack of the child
process.

This is not a problem for the example program, but it is somewhat
misleading.

Signed-off-by: Chen Linxuan <chenlinxuan@xxxxxxxxxxxxx>
---
 man/man2/clone.2 | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/man/man2/clone.2 b/man/man2/clone.2
index 3ffe8e7b8..cd63fe0b1 100644
--- a/man/man2/clone.2
+++ b/man/man2/clone.2
@@ -1891,6 +1891,7 @@ main(int argc, char *argv[])
     char            *stackTop;      /* End of stack buffer */
     pid_t           pid;
     struct utsname  uts;
+    int savedErrno;
 \&
     if (argc < 2) {
         fprintf(stderr, "Usage: %s <child\-hostname>\[rs]n", argv[0]);
@@ -1910,8 +1911,18 @@ main(int argc, char *argv[])
        child commences execution in childFunc(). */
 \&
     pid = clone(childFunc, stackTop, CLONE_NEWUTS | SIGCHLD, argv[1]);
-    if (pid == \-1)
+\&
+    /* Free child stack, as it is not used by the parent. */
+\&
+    savedErrno = errno;
+    if (munmap(stack, STACK_SIZE)) {
+        warn("munmap");
+    }
+    errno = savedErrno;
+\&
+    if (pid == \-1) {
         err(EXIT_FAILURE, "clone");
+    }
     printf("clone() returned %jd\[rs]n", (intmax_t) pid);
 \&
     /* Parent falls through to here */
-- 
2.43.0





[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux