From: Gao Feng <redacted>
When user_mss is zero, it means use the default value. But the current
codes don't permit user set TCP_MAXSEG to the default value.
It would return the -EINVAL when val is zero.
Signed-off-by: Gao Feng <redacted>
---
v2: Make codes more clearer, per Eric
v1: initial version
net/ipv4/tcp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
@@ -2470,7 +2470,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level,/* Values greater than interface MTU won't take effect. However*atthepointwhenthiscallisdonewetypicallydon'tyet*knowwhichinterfaceisgoingtobeused*/-if(val<TCP_MIN_MSS||val>MAX_TCP_WINDOW){+if(!val&&(val<TCP_MIN_MSS||val>MAX_TCP_WINDOW)){err=-EINVAL;break;}
@@ -2470,7 +2470,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level,/* Values greater than interface MTU won't take effect. However*atthepointwhenthiscallisdonewetypicallydon'tyet*knowwhichinterfaceisgoingtobeused*/-if(val<TCP_MIN_MSS||val>MAX_TCP_WINDOW){+if(!val&&(val<TCP_MIN_MSS||val>MAX_TCP_WINDOW)){err=-EINVAL;break;
I believe the sense of the val check is flipped in the proposed patch.
I believe Eric suggested:
if (val && (val < TCP_MIN_MSS || val > MAX_TCP_WINDOW)) {
Has this been tested?
neal
@@ -2470,7 +2470,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level,/* Values greater than interface MTU won't take effect. However*atthepointwhenthiscallisdonewetypicallydon'tyet*knowwhichinterfaceisgoingtobeused*/-if(val<TCP_MIN_MSS||val>MAX_TCP_WINDOW){+if(!val&&(val<TCP_MIN_MSS||val>MAX_TCP_WINDOW)){err=-EINVAL;break;
I believe the sense of the val check is flipped in the proposed patch.
I believe Eric suggested:
if (val && (val < TCP_MIN_MSS || val > MAX_TCP_WINDOW)) {
Has this been tested?
neal
Sorry, I missed the test this time because of the minor fix.
As a result, wrote the wrong logic.
Regards
Feng