summaryrefslogtreecommitdiff
path: root/fs/open.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2019-09-10 16:51:17 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2019-09-10 16:51:17 +0200
commit8146856b0a2693d5f7334f720c9b39a987f7571d (patch)
treee51fd6831162103d32e8a2ad83bf4077768a51b2 /fs/open.c
parent16cfacc8085782dab8e365979356ce1ca87fd6cc (diff)
parentff42df49e75f053a8a6b4c2533100cdcc23afe69 (diff)
Merge tag 'kvm-ppc-next-5.4-1' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc into HEAD
PPC KVM update for 5.4 - Some prep for extending the uses of the rmap array - Various minor fixes - Commits from the powerpc topic/ppc-kvm branch, which fix a problem with interrupts arriving after free_irq, causing host hangs and crashes.
Diffstat (limited to 'fs/open.c')
-rw-r--r--fs/open.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/fs/open.c b/fs/open.c
index b5b80469b93d..a59abe3c669a 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -374,6 +374,25 @@ long do_faccessat(int dfd, const char __user *filename, int mode)
override_cred->cap_permitted;
}
+ /*
+ * The new set of credentials can *only* be used in
+ * task-synchronous circumstances, and does not need
+ * RCU freeing, unless somebody then takes a separate
+ * reference to it.
+ *
+ * NOTE! This is _only_ true because this credential
+ * is used purely for override_creds() that installs
+ * it as the subjective cred. Other threads will be
+ * accessing ->real_cred, not the subjective cred.
+ *
+ * If somebody _does_ make a copy of this (using the
+ * 'get_current_cred()' function), that will clear the
+ * non_rcu field, because now that other user may be
+ * expecting RCU freeing. But normal thread-synchronous
+ * cred accesses will keep things non-RCY.
+ */
+ override_cred->non_rcu = 1;
+
old_cred = override_creds(override_cred);
retry:
res = user_path_at(dfd, filename, lookup_flags, &path);