aboutsummaryrefslogtreecommitdiff
path: root/net/netfilter
diff options
context:
space:
mode:
authorJP Abgrall <jpa@google.com>2012-10-09 20:38:21 -0700
committerColin Cross <ccross@android.com>2014-03-19 13:09:33 -0700
commit675e02ceb881df75b84a1d0bda7c6d0d1404ebf0 (patch)
tree60392a10d5e5465ea89d60abdf67d50d08f041b3 /net/netfilter
parentcf33e1c75a163e9eec79b16f77cd17bbf0fef881 (diff)
netfilter: xt_qtaguid: fix error exit that would keep a spinlock.
qtudev_open() could return with a uid_tag_data_tree_lock held when an kzalloc(..., GFP_ATOMIC) would fail. Very unlikely to get triggered AND survive the mayhem of running out of mem. Signed-off-by: JP Abgrall <jpa@google.com>
Diffstat (limited to 'net/netfilter')
-rw-r--r--net/netfilter/xt_qtaguid.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/netfilter/xt_qtaguid.c b/net/netfilter/xt_qtaguid.c
index 14b003da1423..6b22563a924f 100644
--- a/net/netfilter/xt_qtaguid.c
+++ b/net/netfilter/xt_qtaguid.c
@@ -2752,7 +2752,7 @@ static int qtudev_open(struct inode *inode, struct file *file)
utd_entry = get_uid_data(current_fsuid(), &utd_entry_found);
if (IS_ERR_OR_NULL(utd_entry)) {
res = PTR_ERR(utd_entry);
- goto err;
+ goto err_unlock;
}
/* Look for existing PID based proc_data */
@@ -2794,8 +2794,8 @@ err_unlock_free_utd:
rb_erase(&utd_entry->node, &uid_tag_data_tree);
kfree(utd_entry);
}
+err_unlock:
spin_unlock_bh(&uid_tag_data_tree_lock);
-err:
return res;
}