mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
[UDP]: Fix reversed logic in udp_get_port().
When this code was converted to use sk_for_each() the logic for the "best hash chain length" code was reversed, breaking everything. The original code was of the form: size = 0; do { if (++size >= best_size_so_far) goto next; } while ((sk = sk->next) != NULL); best_size_so_far = size; best = result; next:; and this got converted into: sk_for_each(sk2, node, head) if (++size < best_size_so_far) { best_size_so_far = size; best = result; } Which does something very very different from the original. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b23e353666
commit
5c668704b7
1 changed files with 8 additions and 5 deletions
|
@ -165,11 +165,14 @@ int __udp_lib_get_port(struct sock *sk, unsigned short snum,
|
||||||
goto gotit;
|
goto gotit;
|
||||||
}
|
}
|
||||||
size = 0;
|
size = 0;
|
||||||
sk_for_each(sk2, node, head)
|
sk_for_each(sk2, node, head) {
|
||||||
if (++size < best_size_so_far) {
|
if (++size >= best_size_so_far)
|
||||||
best_size_so_far = size;
|
goto next;
|
||||||
best = result;
|
}
|
||||||
}
|
best_size_so_far = size;
|
||||||
|
best = result;
|
||||||
|
next:
|
||||||
|
;
|
||||||
}
|
}
|
||||||
result = best;
|
result = best;
|
||||||
for(i = 0; i < (1 << 16) / UDP_HTABLE_SIZE; i++, result += UDP_HTABLE_SIZE) {
|
for(i = 0; i < (1 << 16) / UDP_HTABLE_SIZE; i++, result += UDP_HTABLE_SIZE) {
|
||||||
|
|
Loading…
Reference in a new issue