On Mon, Aug 31, 2015 at 10:59:36PM +0200, Fritjof Bornebusch wrote:
> 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.
> >
>
Any comments or feedback?
>
>
> 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);
> }
>