summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r--sys/kern/kern_exec.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index 204b284..78d86ce 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -284,7 +284,7 @@ do_execve(td, args, mac_p)
register_t *stack_base;
int error, len, i;
struct image_params image_params, *imgp;
- struct vattr attr;
+ struct vattr atimeattr, attr;
int (*img_first)(struct image_params *);
struct pargs *oldargs = NULL, *newargs = NULL;
struct sigacts *oldsigacts, *newsigacts;
@@ -695,6 +695,18 @@ interpret:
exec_setregs(td, imgp->entry_addr,
(u_long)(uintptr_t)stack_base, imgp->ps_strings);
+ /*
+ * Here we should update the access time of the file. This must
+ * be implemented by the underlying filesystem in the same way as
+ * access timestamps for a VOP_READ() because we want to avoid
+ * blocking and/or I/O, and have not called vn_start_write().
+ */
+ if ((imgp->vp->v_mount->mnt_flag & (MNT_NOATIME | MNT_RDONLY)) == 0) {
+ VATTR_NULL(&atimeattr);
+ atimeattr.va_vaflags |= VA_EXECVE_ATIME;
+ (void)VOP_SETATTR(imgp->vp, &atimeattr, td->td_ucred, td);
+ }
+
done1:
/*
* Free any resources malloc'd earlier that we didn't use.
OpenPOWER on IntegriCloud