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:
parent
b2e1b88984
commit
01a2b5679b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=354789
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user