Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Nov 2019 14:52:46 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r354789 - head/sys/kern
Message-ID:  <201911171452.xAHEqkrh067265@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Sun Nov 17 14:52:45 2019
New Revision: 354789
URL: https://svnweb.freebsd.org/changeset/base/354789

Log:
  kern_exec: p_osrel and p_fctl0 were obliterated by failed execve(2) attempt.
  
  Zeroing of them is needed so that an image activator can update the
  values as appropriate (or not set at all).
  
  Reviewed by:	markj
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 week
  Differential revision:	https://reviews.freebsd.org/D22379

Modified:
  head/sys/kern/kern_exec.c

Modified: head/sys/kern/kern_exec.c
==============================================================================
--- head/sys/kern/kern_exec.c	Sun Nov 17 14:41:47 2019	(r354788)
+++ head/sys/kern/kern_exec.c	Sun Nov 17 14:52:45 2019	(r354789)
@@ -361,7 +361,6 @@ do_execve(struct thread *td, struct image_args *args, 
 	struct ucred *oldcred;
 	struct uidinfo *euip = NULL;
 	register_t *stack_base;
-	int error, i;
 	struct image_params image_params, *imgp;
 	struct vattr attr;
 	int (*img_first)(struct image_params *);
@@ -380,6 +379,8 @@ do_execve(struct thread *td, struct image_args *args, 
 #ifdef HWPMC_HOOKS
 	struct pmckern_procexec pe;
 #endif
+	int error, i, orig_osrel;
+	uint32_t orig_fctl0;
 	static const char fexecv_proc_title[] = "(fexecv)";
 
 	imgp = &image_params;
@@ -405,6 +406,8 @@ do_execve(struct thread *td, struct image_args *args, 
 	imgp->attr = &attr;
 	imgp->args = args;
 	oldcred = p->p_ucred;
+	orig_osrel = p->p_osrel;
+	orig_fctl0 = p->p_fctl0;
 
 #ifdef MAC
 	error = mac_execve_enter(imgp, mac_p);
@@ -868,6 +871,11 @@ interpret:
 	SDT_PROBE1(proc, , , exec__success, args->fname);
 
 exec_fail_dealloc:
+	if (error != 0) {
+		p->p_osrel = orig_osrel;
+		p->p_fctl0 = orig_fctl0;
+	}
+
 	if (imgp->firstpage != NULL)
 		exec_unmap_first_page(imgp);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201911171452.xAHEqkrh067265>