]> err.no Git - linux-2.6/blobdiff - net/ipv4/udp.c
Pull alexey-fixes into release branch
[linux-2.6] / net / ipv4 / udp.c
index ef4d901ee9ad62f8e6a0118d6cb394db125175ad..4bc25b46f33ff9138512e5da915d01007048e9d0 100644 (file)
@@ -147,13 +147,14 @@ int __udp_lib_get_port(struct sock *sk, unsigned short snum,
        write_lock_bh(&udp_hash_lock);
 
        if (!snum) {
-               int i;
-               int low = sysctl_local_port_range[0];
-               int high = sysctl_local_port_range[1];
+               int i, low, high, remaining;
                unsigned rover, best, best_size_so_far;
 
+               inet_get_local_port_range(&low, &high);
+               remaining = (high - low) + 1;
+
                best_size_so_far = UINT_MAX;
-               best = rover = net_random() % (high - low) + low;
+               best = rover = net_random() % remaining + low;
 
                /* 1st pass: look for empty (or shortest) hash chain */
                for (i = 0; i < UDP_HTABLE_SIZE; i++) {
@@ -1151,7 +1152,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
                return __udp4_lib_mcast_deliver(skb, uh, saddr, daddr, udptable);
 
        sk = __udp4_lib_lookup(saddr, uh->source, daddr, uh->dest,
-                              skb->dev->ifindex, udptable        );
+                              inet_iif(skb), udptable);
 
        if (sk != NULL) {
                int ret = udp_queue_rcv_skb(sk, skb);