svn commit: r263981 - in head: lib/libc/gen sys/kern sys/sys

Mateusz Guzik mjg at freebsd.org
Tue Apr 1 01:25:01 UTC 2014


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


More information about the svn-src-all mailing list