On Mon, Aug 31, 2015 at 10:59:36PM +0200, Fritjof Bornebusch wrote:

Ping ....

> 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