diff options
author | Alan Cox <alan@redhat.com> | 2008-10-13 05:39:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-13 12:51:41 -0400 |
commit | 452a00d2ee288f2cbc36f676edd06cb14d2878c1 (patch) | |
tree | c8251c73924a6ac9b174bc557357bfeff0c8d1a8 /security/selinux | |
parent | f4d2a6c2096b764decb20070b1bf4356de9144a8 (diff) |
tty: Make get_current_tty use a kref
We now return a kref covered tty reference. That ensures the tty structure
doesn't go away when you have a return from get_current_tty. This is not
enough to protect you from most of the resources being freed behind your
back - yet.
[Updated to include fixes for SELinux problems found by Andrew Morton and
an s390 leak found while debugging the former]
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'security/selinux')
-rw-r--r-- | security/selinux/hooks.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 4a7374c12d9c..089d61a23952 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
@@ -2123,6 +2123,7 @@ static inline void flush_unauthorized_files(struct files_struct *files) | |||
2123 | 2123 | ||
2124 | mutex_lock(&tty_mutex); | 2124 | mutex_lock(&tty_mutex); |
2125 | tty = get_current_tty(); | 2125 | tty = get_current_tty(); |
2126 | mutex_unlock(&tty_mutex); | ||
2126 | if (tty) { | 2127 | if (tty) { |
2127 | file_list_lock(); | 2128 | file_list_lock(); |
2128 | file = list_entry(tty->tty_files.next, typeof(*file), f_u.fu_list); | 2129 | file = list_entry(tty->tty_files.next, typeof(*file), f_u.fu_list); |
@@ -2139,8 +2140,8 @@ static inline void flush_unauthorized_files(struct files_struct *files) | |||
2139 | } | 2140 | } |
2140 | } | 2141 | } |
2141 | file_list_unlock(); | 2142 | file_list_unlock(); |
2143 | tty_kref_put(tty); | ||
2142 | } | 2144 | } |
2143 | mutex_unlock(&tty_mutex); | ||
2144 | /* Reset controlling tty. */ | 2145 | /* Reset controlling tty. */ |
2145 | if (drop_tty) | 2146 | if (drop_tty) |
2146 | no_tty(); | 2147 | no_tty(); |