Details

[Home]

Issue of the Implementation # L0195

Brief

target: potential double lock in iscsit_get_tpg()

Detailed Description

There is a potential double lock because of quite strange code in iscsit_get_tpg().

drivers/target/iscsi/iscsi_target_tpg.c:
int iscsit_get_tpg(
	struct iscsi_portal_group *tpg)
{
	int ret;
	ret = mutex_lock_interruptible(&tpg->tpg_access_lock);
	return ((ret != 0) || signal_pending(current)) ? -1 : 0;
}
If mutex_lock_interruptible() successfully acquires the mutex, but there is a pending signal, the function returns error, but it leaves the mutex held. Callers do not expect such behaviour that can lead to a deadlock.

Component

linux-kernel 3.19

Accepted

https://lkml.org/lkml/2015/5/19/964
commit

Status

Fixed in kernel 4.1

[Home]