Le mardi 02 février 2010 à 23:30 -0500, Amerigo Wang a écrit : > This patch introduces /proc/sys/net/ipv4/ip_local_reserved_ports, > it can be used like ip_local_port_range, but this is used to > reserve ports for third-party applications which use fixed > port numbers within ip_local_port_range. > > This only affects the applications which call socket functions > like bind(2) with port number 0, to prevent the kernel getting the ports > within the specified range for them. For applications which use fixed > port number, it will have no effects. > > Any comments are welcome. > > Signed-off-by: WANG Cong <amwang@xxxxxxxxxx> > Cc: David Miller <davem@xxxxxxxxxxxxx> > Cc: Neil Horman <nhorman@xxxxxxxxxxxxx> > Cc: Eric Dumazet <eric.dumazet@xxxxxxxxx> > .procname = "igmp_max_memberships", > diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c > index f0126fd..83045ca 100644 > --- a/net/ipv4/udp.c > +++ b/net/ipv4/udp.c > @@ -210,8 +210,11 @@ int udp_lib_get_port(struct sock *sk, unsigned short snum, > inet_get_local_port_range(&low, &high); > remaining = (high - low) + 1; > > +again: > rand = net_random(); > first = (((u64)rand * remaining) >> 32) + low; > + if (inet_is_reserved_local_port(first)) > + goto again; > /* > * force rand to be an odd multiple of UDP_HTABLE_SIZE > */ Unless I misread the patch, you are checking only the 'first' port that udp_lib_get_port() chose. I would use inet_get_local_reserved_ports(&min_res, &max_res); and check every port that we chose in the loop to avoid it if necessary. -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html