* [PATCH] ip: justification for local port range robustness
@ 2007-10-18 14:27 Anton Arapov
2007-10-18 15:30 ` Stephen Hemminger
0 siblings, 1 reply; 3+ messages in thread
From: Anton Arapov @ 2007-10-18 14:27 UTC (permalink / raw)
To: netdev; +Cc: David Miller, Stephen Hemminger, Andrew Morton
[-- Attachment #1: Type: text/plain, Size: 5108 bytes --]
Hi!
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
== Patch:
Justification of the Stephen Hemminger's patches, commit numbers
06393009000779b00a558fd2f280882cc7dc2008
227b60f5102cda4e4ab792b526a59c8cb20cd9f8
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>
---
drivers/infiniband/core/cma.c | 5 +++--
net/ipv4/inet_connection_sock.c | 2 +-
net/ipv4/inet_hashtables.c | 2 +-
net/ipv4/sysctl_net_ipv4.c | 4 ++--
net/ipv4/udp.c | 5 +++--
net/ipv6/inet6_hashtables.c | 2 +-
6 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 93644f8..d08fb30 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -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)
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
index 3cef128..8fb6ca2 100644
--- a/net/ipv4/inet_connection_sock.c
+++ b/net/ipv4/inet_connection_sock.c
@@ -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 {
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
index fac6398..16eecc7 100644
--- a/net/ipv4/inet_hashtables.c
+++ b/net/ipv4/inet_hashtables.c
@@ -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++) {
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
index c98ef16..ec353cf 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -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);
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index cb9fc58..35d2b0e 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -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++) {
diff --git a/net/ipv6/inet6_hashtables.c b/net/ipv6/inet6_hashtables.c
index 1c2c276..d6f1026 100644
--- a/net/ipv6/inet6_hashtables.c
+++ b/net/ipv6/inet6_hashtables.c
@@ -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++) {
--
Anton Arapov, <aarapov@redhat.com>
GPG Key ID: 0x6FA8C812
[-- Attachment #2: Type: application/pgp-signature, Size: 188 bytes --]
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] ip: justification for local port range robustness
2007-10-18 14:27 [PATCH] ip: justification for local port range robustness Anton Arapov
@ 2007-10-18 15:30 ` Stephen Hemminger
2007-10-19 5:00 ` David Miller
0 siblings, 1 reply; 3+ messages in thread
From: Stephen Hemminger @ 2007-10-18 15:30 UTC (permalink / raw)
To: Anton Arapov; +Cc: netdev, David Miller, Andrew Morton
On Thu, 18 Oct 2007 16:27:37 +0200
Anton Arapov <aarapov@redhat.com> wrote:
> Hi!
>
> 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
>
> == Patch:
>
> Justification of the Stephen Hemminger's patches, commit numbers
> 06393009000779b00a558fd2f280882cc7dc2008
> 227b60f5102cda4e4ab792b526a59c8cb20cd9f8
>
> 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>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] ip: justification for local port range robustness
2007-10-18 15:30 ` Stephen Hemminger
@ 2007-10-19 5:00 ` David Miller
0 siblings, 0 replies; 3+ messages in thread
From: David Miller @ 2007-10-19 5:00 UTC (permalink / raw)
To: shemminger; +Cc: aarapov, netdev, akpm
From: Stephen Hemminger <shemminger@linux-foundation.org>
Date: Thu, 18 Oct 2007 08:30:30 -0700
> > Justification of the Stephen Hemminger's patches, commit numbers
> > 06393009000779b00a558fd2f280882cc7dc2008
> > 227b60f5102cda4e4ab792b526a59c8cb20cd9f8
> >
> > 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>
Applied.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-10-19 5:00 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-18 14:27 [PATCH] ip: justification for local port range robustness Anton Arapov
2007-10-18 15:30 ` Stephen Hemminger
2007-10-19 5:00 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).