When trying to bind 32 accounts to the same target, tgtadm outputs "unknown error" and exits returing status code 22 (EINVAL). This is because __inaccount_bind() function of tgtd does not increment target->account.nr_inaccount when it doubles maximum number of accounts for the target, and therefore it tries to allocate an aid slot on target->account.in_aids[] array even though no free aid slot is available there. This fixes the bug. Reported-by: Satoshi Yoshida <yoshida.satoshi@xxxxxxxxxxxxx> Signed-off-by: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxxxxxx> --- usr/target.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr/target.c b/usr/target.c index f4c5b4e..b6f324c 100644 --- a/usr/target.c +++ b/usr/target.c @@ -1581,7 +1581,6 @@ static tgtadm_err __inaccount_bind(struct target *target, int aid) } target->account.in_aids[i] = aid; - target->account.nr_inaccount++; } else { int new_max = target->account.max_inaccount << 1; int *buf; @@ -1597,6 +1596,7 @@ static tgtadm_err __inaccount_bind(struct target *target, int aid) target->account.in_aids[target->account.max_inaccount] = aid; target->account.max_inaccount = new_max; } + target->account.nr_inaccount++; return TGTADM_SUCCESS; } -- 1.7.9.3 -- To unsubscribe from this list: send the line "unsubscribe stgt" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html