svn commit: r359567 - stable/12/sys/kern

Mark Johnston markj at FreeBSD.org
Thu Apr 2 15:37:51 UTC 2020


Author: markj
Date: Thu Apr  2 15:37:40 2020
New Revision: 359567
URL: https://svnweb.freebsd.org/changeset/base/359567

Log:
  MFC r359132:
  Enter a write sequence when updating rights.

Modified:
  stable/12/sys/kern/sys_capability.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/kern/sys_capability.c
==============================================================================
--- stable/12/sys/kern/sys_capability.c	Thu Apr  2 15:32:09 2020	(r359566)
+++ stable/12/sys/kern/sys_capability.c	Thu Apr  2 15:37:40 2020	(r359567)
@@ -223,6 +223,7 @@ kern_cap_rights_limit(struct thread *td, int fd, cap_r
 {
 	struct filedesc *fdp;
 	struct filedescent *fdep;
+	u_long *ioctls;
 	int error;
 
 	fdp = td->td_proc->p_fd;
@@ -232,18 +233,22 @@ kern_cap_rights_limit(struct thread *td, int fd, cap_r
 		FILEDESC_XUNLOCK(fdp);
 		return (EBADF);
 	}
+	ioctls = NULL;
 	error = _cap_check(cap_rights(fdp, fd), rights, CAPFAIL_INCREASE);
 	if (error == 0) {
+		seq_write_begin(&fdep->fde_seq);
 		fdep->fde_rights = *rights;
 		if (!cap_rights_is_set(rights, CAP_IOCTL)) {
-			free(fdep->fde_ioctls, M_FILECAPS);
+			ioctls = fdep->fde_ioctls;
 			fdep->fde_ioctls = NULL;
 			fdep->fde_nioctls = 0;
 		}
 		if (!cap_rights_is_set(rights, CAP_FCNTL))
 			fdep->fde_fcntls = 0;
+		seq_write_end(&fdep->fde_seq);
 	}
 	FILEDESC_XUNLOCK(fdp);
+	free(ioctls, M_FILECAPS);
 	return (error);
 }
 
@@ -428,8 +433,10 @@ kern_cap_ioctls_limit(struct thread *td, int fd, u_lon
 		goto out;
 
 	ocmds = fdep->fde_ioctls;
+	seq_write_begin(&fdep->fde_seq);
 	fdep->fde_ioctls = cmds;
 	fdep->fde_nioctls = ncmds;
+	seq_write_end(&fdep->fde_seq);
 
 	cmds = ocmds;
 	error = 0;
@@ -586,7 +593,9 @@ sys_cap_fcntls_limit(struct thread *td, struct cap_fcn
 		return (ENOTCAPABLE);
 	}
 
+	seq_write_begin(&fdep->fde_seq);
 	fdep->fde_fcntls = fcntlrights;
+	seq_write_end(&fdep->fde_seq);
 	FILEDESC_XUNLOCK(fdp);
 
 	return (0);


More information about the svn-src-stable-12 mailing list