From 4cf95dec7d97f21938ba396b07055e17a370b32c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 26 Jan 2010 18:20:25 -0800 Subject: [PATCH] another .27 patch --- ...ould-call-write_lock_irqsave-restore.patch | 47 +++++++++++++++++++ review-2.6.27/series | 1 + 2 files changed, 48 insertions(+) create mode 100644 review-2.6.27/fnctl-f_modown-should-call-write_lock_irqsave-restore.patch diff --git a/review-2.6.27/fnctl-f_modown-should-call-write_lock_irqsave-restore.patch b/review-2.6.27/fnctl-f_modown-should-call-write_lock_irqsave-restore.patch new file mode 100644 index 00000000000..4b74167a8e7 --- /dev/null +++ b/review-2.6.27/fnctl-f_modown-should-call-write_lock_irqsave-restore.patch @@ -0,0 +1,47 @@ +From b04da8bfdfbbd79544cab2fadfdc12e87eb01600 Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Tue, 26 Jan 2010 15:04:02 -0800 +Subject: fnctl: f_modown should call write_lock_irqsave/restore + +From: Greg Kroah-Hartman + +commit b04da8bfdfbbd79544cab2fadfdc12e87eb01600 upstream. + +Commit 703625118069f9f8960d356676662d3db5a9d116 exposed that f_modown() +should call write_lock_irqsave instead of just write_lock_irq so that +because a caller could have a spinlock held and it would not be good to +renable interrupts. + +Cc: Eric W. Biederman +Cc: Al Viro +Cc: Alan Cox +Cc: Tavis Ormandy +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Linus Torvalds + +--- + fs/fcntl.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/fs/fcntl.c ++++ b/fs/fcntl.c +@@ -200,7 +200,9 @@ static int setfl(int fd, struct file * f + static void f_modown(struct file *filp, struct pid *pid, enum pid_type type, + uid_t uid, uid_t euid, int force) + { +- write_lock_irq(&filp->f_owner.lock); ++ unsigned long flags; ++ ++ write_lock_irqsave(&filp->f_owner.lock, flags); + if (force || !filp->f_owner.pid) { + put_pid(filp->f_owner.pid); + filp->f_owner.pid = get_pid(pid); +@@ -208,7 +210,7 @@ static void f_modown(struct file *filp, + filp->f_owner.uid = uid; + filp->f_owner.euid = euid; + } +- write_unlock_irq(&filp->f_owner.lock); ++ write_unlock_irqrestore(&filp->f_owner.lock, flags); + } + + int __f_setown(struct file *filp, struct pid *pid, enum pid_type type, diff --git a/review-2.6.27/series b/review-2.6.27/series index dc170a65b36..8315b0bea88 100644 --- a/review-2.6.27/series +++ b/review-2.6.27/series @@ -9,3 +9,4 @@ usb-ehci-fix-handling-of-unusual-interrupt-intervals.patch usb-ehci-uhci-fix-race-between-root-hub-suspend-and-port-resume.patch ipc-ns-fix-memory-leak-idr.patch kvm-s390-fix-potential-array-overrun-in-intercept-handling.patch +fnctl-f_modown-should-call-write_lock_irqsave-restore.patch -- 2.47.3