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>
This commit is contained in:
JP Abgrall 2012-10-09 20:38:21 -07:00 committed by John Stultz
parent 712fffff99
commit 839c250642

View file

@ -2752,7 +2752,7 @@ static int qtudev_open(struct inode *inode, struct file *file)
utd_entry = get_uid_data(current_fsuid(), &utd_entry_found); utd_entry = get_uid_data(current_fsuid(), &utd_entry_found);
if (IS_ERR_OR_NULL(utd_entry)) { if (IS_ERR_OR_NULL(utd_entry)) {
res = PTR_ERR(utd_entry); res = PTR_ERR(utd_entry);
goto err; goto err_unlock;
} }
/* Look for existing PID based proc_data */ /* Look for existing PID based proc_data */
@ -2794,8 +2794,8 @@ err_unlock_free_utd:
rb_erase(&utd_entry->node, &uid_tag_data_tree); rb_erase(&utd_entry->node, &uid_tag_data_tree);
kfree(utd_entry); kfree(utd_entry);
} }
err_unlock:
spin_unlock_bh(&uid_tag_data_tree_lock); spin_unlock_bh(&uid_tag_data_tree_lock);
err:
return res; return res;
} }