Подробности

[В начало]

Проблема в реализации № L0195

Краткое описание

target: Двойная блокировка в iscsit_get_tpg()

Подробное описание

Двойная блокировка может произойти из-за следующего кода в 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;
}
Если mutex_lock_interruptible() успешно захватывает мьютекс, но оказывается pending signal, то функция возвращает ошибку, но оставляет мьютекс захваченным. Вызывающие iscsit_get_tpg() к такому не готовы, в результате чего может случиться взаимная блокировка.

Компонент

linux-kernel 3.19

Принято

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

Статус

Исправлено в ядре 4.1

[В начало]