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
This commit is contained in:
Konstantin Belousov 2019-11-17 14:52:45 +00:00
parent b2e1b88984
commit 01a2b5679b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=354789

View File

@ -361,7 +361,6 @@ do_execve(struct thread *td, struct image_args *args, struct mac *mac_p)
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, struct mac *mac_p)
#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, struct mac *mac_p)
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 @@ do_execve(struct thread *td, struct image_args *args, struct mac *mac_p)
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);