Author: mjg
Date: Tue Apr  1 03:20:35 2014

New Revision: 263981
URL: http://svnweb.freebsd.org/changeset/base/263981

Log:
  Add a new errno: EMACS - Editor too big.

  Make a best-effort to detect that Emacs is about to executed and return
  the error.

  MFC after:    1 week

Modified:
  head/lib/libc/gen/errlst.c
  head/sys/kern/kern_exec.c
  head/sys/sys/errno.h

Modified: lib/libc/gen/errlst.c
===================================================================
--- head/lib/libc/gen/errlst.c  (263980)
+++ head/lib/libc/gen/errlst.c  (263981)
@@ -155,6 +155,7 @@
        "Not permitted in capability mode",     /* 94 - ECAPMODE */
        "State not recoverable",                /* 95 - ENOTRECOVERABLE */
        "Previous owner died",                  /* 96 - EOWNERDEAD */
+       "Editor too big",                       /* 97 - EMACS */
 };
 const int sys_nerr = sizeof(sys_errlist) / sizeof(sys_errlist[0]);
 
Modified: sys/kern/kern_exec.c
===================================================================
--- head/sys/kern/kern_exec.c   (263980)
+++ head/sys/kern/kern_exec.c   (263981)
@@ -337,6 +337,7 @@
        int (*img_first)(struct image_params *);
        struct pargs *oldargs = NULL, *newargs = NULL;
        struct sigacts *oldsigacts, *newsigacts;
+       char *e;
 #ifdef KTRACE
        struct vnode *tracevp = NULL;
        struct ucred *tracecred = NULL;
@@ -418,6 +419,19 @@
 
        SDT_PROBE(proc, kernel, , exec, args->fname, 0, 0, 0, 0 );
 
+       /*
+        * A best-effort to check whether the file to be run is EMACS
+        */
+       if (args->fname != NULL) {
+               e = args->fname + strlen(args->fname);
+               while (e > args->fname && *e != '/')
+                       e--;
+               if (strcasecmp(e, "/emacs") == 0) {
+                       error = EMACS;
+                       goto exec_fail;
+               }
+       }
+
 interpret:
        if (args->fname != NULL) {
 #ifdef CAPABILITY_MODE
Modified: sys/sys/errno.h
===================================================================
--- head/sys/sys/errno.h        (263980)
+++ head/sys/sys/errno.h        (263981)
@@ -178,10 +178,11 @@
 #define        ECAPMODE        94              /* Not permitted in capability 
mode */
 #define        ENOTRECOVERABLE 95              /* State not recoverable */
 #define        EOWNERDEAD      96              /* Previous owner died */
+#define        EMACS           97              /* Editor too big */
 #endif /* _POSIX_SOURCE */
 
 #ifndef _POSIX_SOURCE
-#define        ELAST           96              /* Must be equal largest errno 
*/
+#define        ELAST           97              /* Must be equal largest errno 
*/
 #endif /* _POSIX_SOURCE */
 
 #ifdef _KERNEL
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to