Re: missing spin_unlock in tcp_v4_get_port
From: Ted Unangst <[EMAIL PROTECTED]> Subject: missing spin_unlock in tcp_v4_get_port Date: Mon, 22 Aug 2005 14:17:36 -0700 > There appears to be a missing spin_unlock in tcp_v4_get_port. > > do {rover++; > if (rover > high) > rover = low; > head = _bhash[tcp_bhashfn(rover)]; > spin_lock(>lock); > head->lock is acquired. > tb_for_each(tb, node, >chain) > if (tb->port == rover) > goto next; > we don't find what we want. break out of while loop. > break; > next: > spin_unlock(>lock); > } while (--remaining > 0); > tcp_port_rover = rover; > spin_unlock(_portalloc_lock); > > /* Exhausted local port range during search? */ > ret = 1; > if (remaining <= 0) > goto fail; > here we go to fail; head->lock is still acquired. Only if remaining <= 0, in which case we broke out of the loop due to the "while (--remaining > 0)" test, not because of the "break;" statement, and thus the lock is not held. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: missing spin_unlock in tcp_v4_get_port
From: Ted Unangst [EMAIL PROTECTED] Subject: missing spin_unlock in tcp_v4_get_port Date: Mon, 22 Aug 2005 14:17:36 -0700 There appears to be a missing spin_unlock in tcp_v4_get_port. do {rover++; if (rover high) rover = low; head = tcp_bhash[tcp_bhashfn(rover)]; spin_lock(head-lock); head-lock is acquired. tb_for_each(tb, node, head-chain) if (tb-port == rover) goto next; we don't find what we want. break out of while loop. break; next: spin_unlock(head-lock); } while (--remaining 0); tcp_port_rover = rover; spin_unlock(tcp_portalloc_lock); /* Exhausted local port range during search? */ ret = 1; if (remaining = 0) goto fail; here we go to fail; head-lock is still acquired. Only if remaining = 0, in which case we broke out of the loop due to the while (--remaining 0) test, not because of the break; statement, and thus the lock is not held. - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/