scsi: iscsi: target: Fix conn_ops double free
authorMike Christie <mchristi@redhat.com>
Mon, 27 Aug 2018 19:45:16 +0000 (14:45 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 30 Aug 2018 11:07:12 +0000 (07:07 -0400)
commit05a86e78ea9823ec25b3515db078dd8a76fc263c
tree47b7cd2caed9db4f3de6f98d6cc96cfac2229b98
parent7915919bb94e12460c58e27c708472e6f85f6699
scsi: iscsi: target: Fix conn_ops double free

If iscsi_login_init_conn fails it can free conn_ops.
__iscsi_target_login_thread will then call iscsi_target_login_sess_out
which will also free it.

This fixes the problem by organizing conn allocation/setup into parts that
are needed through the life of the conn and parts that are only needed for
the login. The free functions then release what was allocated in the alloc
functions.

With this patch we have:

iscsit_alloc_conn/iscsit_free_conn - allocs/frees the conn we need for the
entire life of the conn.

iscsi_login_init_conn/iscsi_target_nego_release - allocs/frees the parts
of the conn that are only needed during login.

Signed-off-by: Mike Christie <mchristi@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/iscsi/iscsi_target.c
drivers/target/iscsi/iscsi_target_login.c
drivers/target/iscsi/iscsi_target_login.h