Blob Blame History Raw
diff --git a/session.c b/session.c
index 436ea48..49c9321 100644
--- a/session.c
+++ b/session.c
@@ -1561,6 +1561,13 @@ do_setusercontext(struct passwd *pw)
 #endif
 	}
 
+#ifdef WITH_SELINUX
+	if (options.chroot_directory == NULL ||
+	    strcasecmp(options.chroot_directory, "none") == 0) {
+		ssh_selinux_copy_context();
+	}
+#endif
+
 	if (getuid() != pw->pw_uid || geteuid() != pw->pw_uid)
 		fatal("Failed to set uids to %u.", (u_int) pw->pw_uid);
 }
@@ -1670,7 +1677,9 @@ do_child(Session *s, const char *command
 		/* When PAM is enabled we rely on it to do the nologin check */
 		if (!options.use_pam)
 			do_nologin(pw);
-		do_setusercontext(pw);
+		/* We are already separated */
+		if (!use_privsep)
+			do_setusercontext(pw);
 		/*
 		 * PAM session modules in do_setusercontext may have
 		 * generated messages, so if this in an interactive
@@ -1791,8 +1800,8 @@ do_child(Session *s, const char *command
 		optind = optreset = 1;
 		__progname = argv[0];
 #ifdef WITH_SELINUX
-		if (options.chroot_directory == NULL ||
-		    strcasecmp(options.chroot_directory, "none") == 0) {
+		if (!use_privsep &&
+		    (options.chroot_directory == NULL || strcasecmp(options.chroot_directory, "none") == 0)) {
 			ssh_selinux_copy_context();
 		}
 #endif