mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 19:07:52 +00:00
[TCP]: Problem bug with sysctl_tcp_congestion_control function
From: "Sam Jansen" <sjansen@google.com> sysctl_tcp_congestion_control seems to have a bug that prevents it from actually calling the tcp_set_default_congestion_control function. This is not so apparent because it does not return an error and generally the /proc interface is used to configure the default TCP congestion control algorithm. This is present in 2.6.18 onwards and probably earlier, though I have not inspected 2.6.15--2.6.17. sysctl_tcp_congestion_control calls sysctl_string and expects a successful return code of 0. In such a case it actually sets the congestion control algorithm with tcp_set_default_congestion_control. Otherwise, it returns the value returned by sysctl_string. This was correct in 2.6.14, as sysctl_string returned 0 on success. However, sysctl_string was updated to return 1 on success around about 2.6.15 and sysctl_tcp_congestion_control was not updated. Even though sysctl_tcp_congestion_control returns 1, do_sysctl_strategy converts this return code to '0', so the caller never notices the error. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6e42141009
commit
5487796f0c
1 changed files with 1 additions and 1 deletions
|
@ -191,7 +191,7 @@ static int sysctl_tcp_congestion_control(ctl_table *table, int __user *name,
|
||||||
|
|
||||||
tcp_get_default_congestion_control(val);
|
tcp_get_default_congestion_control(val);
|
||||||
ret = sysctl_string(&tbl, name, nlen, oldval, oldlenp, newval, newlen);
|
ret = sysctl_string(&tbl, name, nlen, oldval, oldlenp, newval, newlen);
|
||||||
if (ret == 0 && newval && newlen)
|
if (ret == 1 && newval && newlen)
|
||||||
ret = tcp_set_default_congestion_control(val);
|
ret = tcp_set_default_congestion_control(val);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue