On Sun, Aug 30, 2015 at 08:01:02PM +0200, Fritjof Bornebusch wrote:
> As suggested by deraadt@ and tobias@ it might be better to use the *return* 
> statement instead of exit(3) 
> inside the *main* function, to let the stack protector do its work.
> 
> This diff removes such calls in all *src/bin/* tools, except those who 
> already use it.
> I think I didn't miss a call and didn't introduce any bugs.
>

New diff with help from tobias@, as theo@ pointed me to a downside.

> --F.
> 



Index: cat/cat.c
===================================================================
RCS file: /cvs/src/bin/cat/cat.c,v
retrieving revision 1.21
diff -u -p -r1.21 cat.c
--- cat/cat.c   16 Jan 2015 06:39:28 -0000      1.21
+++ cat/cat.c   31 Aug 2015 20:44:20 -0000
@@ -103,8 +103,7 @@ main(int argc, char *argv[])
                raw_args(argv);
        if (fclose(stdout))
                err(1, "stdout");
-       exit(rval);
-       /* NOTREACHED */
+       return (rval);
 }
 
 void
Index: chio/chio.c
===================================================================
RCS file: /cvs/src/bin/chio/chio.c,v
retrieving revision 1.25
diff -u -p -r1.25 chio.c
--- chio/chio.c 16 Mar 2014 18:38:30 -0000      1.25
+++ chio/chio.c 31 Aug 2015 20:44:21 -0000
@@ -148,7 +148,7 @@ main(int argc, char *argv[])
        if (commands[i].cc_name == NULL)
                errx(1, "unknown command: %s", *argv);
 
-       exit((*commands[i].cc_handler)(commands[i].cc_name, argc, argv));
+       return ((*commands[i].cc_handler)(commands[i].cc_name, argc, argv));
 }
 
 static int
Index: chmod/chmod.c
===================================================================
RCS file: /cvs/src/bin/chmod/chmod.c,v
retrieving revision 1.34
diff -u -p -r1.34 chmod.c
--- chmod/chmod.c       25 Jun 2015 02:04:08 -0000      1.34
+++ chmod/chmod.c       31 Aug 2015 20:44:22 -0000
@@ -279,7 +279,7 @@ done:
        if (errno)
                err(1, "fts_read");
        fts_close(ftsp);
-       exit(rval);
+       return (rval);
 }
 
 /*
Index: cp/cp.c
===================================================================
RCS file: /cvs/src/bin/cp/cp.c,v
retrieving revision 1.38
diff -u -p -r1.38 cp.c
--- cp/cp.c     7 May 2015 17:32:20 -0000       1.38
+++ cp/cp.c     31 Aug 2015 20:44:22 -0000
@@ -224,7 +224,7 @@ main(int argc, char *argv[])
                type = FILE_TO_DIR;
        }
 
-       exit(copy(argv, type, fts_options));
+       return (copy(argv, type, fts_options));
 }
 
 char *
Index: date/date.c
===================================================================
RCS file: /cvs/src/bin/date/date.c,v
retrieving revision 1.47
diff -u -p -r1.47 date.c
--- date/date.c 17 Apr 2015 16:47:47 -0000      1.47
+++ date/date.c 31 Aug 2015 20:44:22 -0000
@@ -143,7 +143,7 @@ main(int argc, char *argv[])
                errx(1, "conversion error");
        (void)strftime(buf, sizeof(buf), format, tp);
        (void)printf("%s\n", buf);
-       exit(0);
+       return (0);
 }
 
 #define        ATOI2(ar)       ((ar) += 2, ((ar)[-2] - '0') * 10 + ((ar)[-1] - 
'0'))
Index: dd/dd.c
===================================================================
RCS file: /cvs/src/bin/dd/dd.c,v
retrieving revision 1.21
diff -u -p -r1.21 dd.c
--- dd/dd.c     16 Jan 2015 06:39:31 -0000      1.21
+++ dd/dd.c     31 Aug 2015 20:44:22 -0000
@@ -85,7 +85,7 @@ main(int argc, char *argv[])
        }
 
        dd_close();
-       exit(0);
+       return (0);
 }
 
 static void
Index: df/df.c
===================================================================
RCS file: /cvs/src/bin/df/df.c,v
retrieving revision 1.52
diff -u -p -r1.52 df.c
--- df/df.c     16 Jan 2015 06:39:31 -0000      1.52
+++ df/df.c     31 Aug 2015 20:44:23 -0000
@@ -175,7 +175,7 @@ main(int argc, char *argv[])
                        bsdprint(mntbuf, mntsize, maxwidth);
        }
 
-       exit(mntsize ? 0 : 1);
+       return (mntsize ? 0 : 1);
 }
 
 char *
Index: domainname/domainname.c
===================================================================
RCS file: /cvs/src/bin/domainname/domainname.c,v
retrieving revision 1.9
diff -u -p -r1.9 domainname.c
--- domainname/domainname.c     16 Jan 2015 06:39:31 -0000      1.9
+++ domainname/domainname.c     31 Aug 2015 20:44:23 -0000
@@ -66,7 +66,7 @@ main(int argc, char *argv[])
                        err(1, "getdomainname");
                (void)printf("%s\n", domainname);
        }
-       exit(0);
+       return (0);
 }
 
 void
Index: expr/expr.c
===================================================================
RCS file: /cvs/src/bin/expr/expr.c,v
retrieving revision 1.20
diff -u -p -r1.20 expr.c
--- expr/expr.c 11 Aug 2015 17:15:46 -0000      1.20
+++ expr/expr.c 31 Aug 2015 20:44:23 -0000
@@ -518,5 +518,5 @@ main(int argc, char *argv[])
        else
                printf("%s\n", vp->u.s);
 
-       exit(is_zero_or_null(vp));
+       return (is_zero_or_null(vp));
 }
Index: hostname/hostname.c
===================================================================
RCS file: /cvs/src/bin/hostname/hostname.c,v
retrieving revision 1.9
diff -u -p -r1.9 hostname.c
--- hostname/hostname.c 16 Jan 2015 06:39:32 -0000      1.9
+++ hostname/hostname.c 31 Aug 2015 20:44:23 -0000
@@ -72,7 +72,7 @@ main(int argc, char *argv[])
                        *p = '\0';
                (void)printf("%s\n", hostname);
        }
-       exit(0);
+       return (0);
 }
 
 void
Index: kill/kill.c
===================================================================
RCS file: /cvs/src/bin/kill/kill.c,v
retrieving revision 1.12
diff -u -p -r1.12 kill.c
--- kill/kill.c 23 Mar 2014 12:44:00 -0000      1.12
+++ kill/kill.c 31 Aug 2015 20:44:23 -0000
@@ -126,7 +126,7 @@ main(int argc, char *argv[])
                }
        }
 
-       exit(errors);
+       return (errors);
 }
 
 int
Index: ln/ln.c
===================================================================
RCS file: /cvs/src/bin/ln/ln.c,v
retrieving revision 1.22
diff -u -p -r1.22 ln.c
--- ln/ln.c     16 Jan 2015 06:39:32 -0000      1.22
+++ ln/ln.c     31 Aug 2015 20:44:24 -0000
@@ -99,7 +99,7 @@ main(int argc, char *argv[])
                usage();
        for (exitval = 0; *argv != sourcedir; ++argv)
                exitval |= linkit(*argv, sourcedir, 1);
-       exit(exitval);
+       return (exitval);
 }
 
  /*
Index: mkdir/mkdir.c
===================================================================
RCS file: /cvs/src/bin/mkdir/mkdir.c,v
retrieving revision 1.25
diff -u -p -r1.25 mkdir.c
--- mkdir/mkdir.c       2 Apr 2013 20:26:17 -0000       1.25
+++ mkdir/mkdir.c       31 Aug 2015 20:44:24 -0000
@@ -112,7 +112,7 @@ main(int argc, char *argv[])
                        exitval = 1;
                }
        }
-       exit(exitval);
+       return (exitval);
 }
 
 /*
Index: mt/mt.c
===================================================================
RCS file: /cvs/src/bin/mt/mt.c,v
retrieving revision 1.36
diff -u -p -r1.36 mt.c
--- mt/mt.c     12 Nov 2013 04:36:02 -0000      1.36
+++ mt/mt.c     31 Aug 2015 20:44:24 -0000
@@ -243,8 +243,7 @@ main(int argc, char *argv[])
 
        _rmtclose();
 
-       exit(X_FINOK);
-       /* NOTREACHED */
+       return (X_FINOK);
 }
 
 struct tape_desc {
Index: mv/mv.c
===================================================================
RCS file: /cvs/src/bin/mv/mv.c,v
retrieving revision 1.40
diff -u -p -r1.40 mv.c
--- mv/mv.c     24 Aug 2015 00:10:59 -0000      1.40
+++ mv/mv.c     31 Aug 2015 20:44:24 -0000
@@ -143,7 +143,7 @@ main(int argc, char *argv[])
                                rval = 1;
                }
        }
-       exit(rval);
+       return (rval);
 }
 
 int
Index: ps/ps.c
===================================================================
RCS file: /cvs/src/bin/ps/ps.c,v
retrieving revision 1.65
diff -u -p -r1.65 ps.c
--- ps/ps.c     29 Jun 2015 15:03:33 -0000      1.65
+++ ps/ps.c     31 Aug 2015 20:44:24 -0000
@@ -367,7 +367,7 @@ main(int argc, char *argv[])
                        lineno = 0;
                }
        }
-       exit(eval);
+       return (eval);
 }
 
 static void
Index: pwd/pwd.c
===================================================================
RCS file: /cvs/src/bin/pwd/pwd.c,v
retrieving revision 1.12
diff -u -p -r1.12 pwd.c
--- pwd/pwd.c   28 May 2014 06:55:58 -0000      1.12
+++ pwd/pwd.c   31 Aug 2015 20:44:24 -0000
@@ -77,7 +77,7 @@ main(int argc, char *argv[])
 
        puts(p);
 
-       exit(EXIT_SUCCESS);
+       return (0);
 }
 
 static char *
Index: rm/rm.c
===================================================================
RCS file: /cvs/src/bin/rm/rm.c,v
retrieving revision 1.30
diff -u -p -r1.30 rm.c
--- rm/rm.c     16 Jan 2015 06:39:32 -0000      1.30
+++ rm/rm.c     31 Aug 2015 20:44:26 -0000
@@ -116,7 +116,7 @@ main(int argc, char *argv[])
                        rm_file(argv);
        }
 
-       exit (eval);
+       return (eval);
 }
 
 void
Index: systrace/systrace.c
===================================================================
RCS file: /cvs/src/bin/systrace/systrace.c,v
retrieving revision 1.63
diff -u -p -r1.63 systrace.c
--- systrace/systrace.c 18 Apr 2015 18:28:37 -0000      1.63
+++ systrace/systrace.c 31 Aug 2015 20:44:26 -0000
@@ -822,5 +822,5 @@ main(int argc, char **argv)
 
        close(trfd);
 
-       exit(0);
+       return (0);
 }

Reply via email to