summaryrefslogtreecommitdiff
path: root/irq.c
AgeCommit message (Expand)AuthorFilesLines
2013-06-11irq: do not process non-existant irq number of loDaniel Borkmann1-0/+2
2013-06-04xutils: eliminate xutils, move rest to epoll2Daniel Borkmann1-8/+1
2013-06-04irq: rename device_bind_irq_to_cpu to device_set_irq_affinityDaniel Borkmann1-1/+1
2013-06-04xutils: break out string handling and lockingDaniel Borkmann1-0/+1
2013-06-03irq: break out from xutils and save + restoreDaniel Borkmann1-0/+129
ref='/cgit.cgi/linux/net-next.git/diff/?h=nds-private-remove&id=01d4d673558985d9a118e1e05026633c3e2ade9b&id2=c54eeffbe9338fa982dc853d816fda9202a13b5a'>diff)
target: Fix multi-session dynamic se_node_acl double free OOPs
This patch addresses a long-standing bug with multi-session (eg: iscsi-target + iser-target) se_node_acl dynamic free withini transport_deregister_session(). This bug is caused when a storage endpoint is configured with demo-mode (generate_node_acls = 1 + cache_dynamic_acls = 1) initiators, and initiator login creates a new dynamic node acl and attaches two sessions to it. After that, demo-mode for the storage instance is disabled via configfs (generate_node_acls = 0 + cache_dynamic_acls = 0) and the existing dynamic acl is never converted to an explicit ACL. The end result is dynamic acl resources are released twice when the sessions are shutdown in transport_deregister_session(). If the storage instance is not changed to disable demo-mode, or the dynamic acl is converted to an explict ACL, or there is only a single session associated with the dynamic ACL, the bug is not triggered. To address this big, move the release of dynamic se_node_acl memory into target_complete_nacl() so it's only freed once when se_node_acl->acl_kref reaches zero. (Drop unnecessary list_del_init usage - HCH) Reported-by: Rob Millner <rlm@daterainc.com> Tested-by: Rob Millner <rlm@daterainc.com> Cc: Rob Millner <rlm@daterainc.com> Cc: stable@vger.kernel.org # 4.1+ Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat
-rw-r--r--drivers/target/target_core_transport.c69
-rw-r--r--include/target/target_core_base.h1
2 files changed, 44 insertions, 26 deletions
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c