[INET]: Justification for local port range robustness.
There is a justifying patch for Stephen's patches. Stephen's patches disallows using a port range of one single port and brakes the meaning of the 'remaining' variable, in some places it has different meaning. My patch gives back the sense of 'remaining' variable. It should mean how many ports are remaining and nothing else. Also my patch allows using a single port. I sure we must be able to use mentioned port range, this does not restricted by documentation and does not brake current behavior. usefull links: Patches posted by Stephen Hemminger http://marc.info/?l=linux-netdev&m=119206106218187&w=2 http://marc.info/?l=linux-netdev&m=119206109918235&w=2 Andrew Morton's comment http://marc.info/?l=linux-kernel&m=119248225007737&w=2 1. Allows using a port range of one single port. 2. Gives back sense of 'remaining' variable. Signed-off-by: Anton Arapov <aarapov@redhat.com> Acked-by: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
be702d5e38
commit
a25de534f8
|
@ -2797,11 +2797,12 @@ static void cma_remove_one(struct ib_device *device)
|
|||
|
||||
static int cma_init(void)
|
||||
{
|
||||
int ret, low, high;
|
||||
int ret, low, high, remaining;
|
||||
|
||||
get_random_bytes(&next_port, sizeof next_port);
|
||||
inet_get_local_port_range(&low, &high);
|
||||
next_port = ((unsigned int) next_port % (high - low)) + low;
|
||||
remaining = (high - low) + 1;
|
||||
next_port = ((unsigned int) next_port % remaining) + low;
|
||||
|
||||
cma_wq = create_singlethread_workqueue("rdma_cm");
|
||||
if (!cma_wq)
|
||||
|
|
|
@ -93,7 +93,7 @@ int inet_csk_get_port(struct inet_hashinfo *hashinfo,
|
|||
int remaining, rover, low, high;
|
||||
|
||||
inet_get_local_port_range(&low, &high);
|
||||
remaining = high - low;
|
||||
remaining = (high - low) + 1;
|
||||
rover = net_random() % remaining + low;
|
||||
|
||||
do {
|
||||
|
|
|
@ -286,7 +286,7 @@ int inet_hash_connect(struct inet_timewait_death_row *death_row,
|
|||
struct inet_timewait_sock *tw = NULL;
|
||||
|
||||
inet_get_local_port_range(&low, &high);
|
||||
remaining = high - low;
|
||||
remaining = (high - low) + 1;
|
||||
|
||||
local_bh_disable();
|
||||
for (i = 1; i <= remaining; i++) {
|
||||
|
|
|
@ -122,7 +122,7 @@ static int ipv4_local_port_range(ctl_table *table, int write, struct file *filp,
|
|||
ret = proc_dointvec_minmax(&tmp, write, filp, buffer, lenp, ppos);
|
||||
|
||||
if (write && ret == 0) {
|
||||
if (range[1] <= range[0])
|
||||
if (range[1] < range[0])
|
||||
ret = -EINVAL;
|
||||
else
|
||||
set_local_port_range(range);
|
||||
|
@ -150,7 +150,7 @@ static int ipv4_sysctl_local_port_range(ctl_table *table, int __user *name,
|
|||
|
||||
ret = sysctl_intvec(&tmp, name, nlen, oldval, oldlenp, newval, newlen);
|
||||
if (ret == 0 && newval && newlen) {
|
||||
if (range[1] <= range[0])
|
||||
if (range[1] < range[0])
|
||||
ret = -EINVAL;
|
||||
else
|
||||
set_local_port_range(range);
|
||||
|
|
|
@ -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, low, high;
|
||||
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++) {
|
||||
|
|
|
@ -261,7 +261,7 @@ int inet6_hash_connect(struct inet_timewait_death_row *death_row,
|
|||
struct inet_timewait_sock *tw = NULL;
|
||||
|
||||
inet_get_local_port_range(&low, &high);
|
||||
remaining = high - low;
|
||||
remaining = (high - low) + 1;
|
||||
|
||||
local_bh_disable();
|
||||
for (i = 1; i <= remaining; i++) {
|
||||
|
|
Loading…
Reference in New Issue