Commit 47112e25 authored by Gerrit Renker's avatar Gerrit Renker Committed by David S. Miller

udplite: Protection against coverage value wrap-around

This patch clamps the cscov setsockopt values to a maximum of 0xFFFF.

Setsockopt values greater than 0xffff can cause an unwanted
wrap-around.  Further, IPv6 jumbograms are not supported (RFC 3838,
3.5), so that values greater than 0xffff are not even useful.

Further changes: fixed a typo in the documentation.
Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6579e57b
...@@ -148,7 +148,7 @@ ...@@ -148,7 +148,7 @@
getsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, &value, ...); getsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, &value, ...);
is meaningless (as in TCP). Packets with a zero checksum field are is meaningless (as in TCP). Packets with a zero checksum field are
illegal (cf. RFC 3828, sec. 3.1) will be silently discarded. illegal (cf. RFC 3828, sec. 3.1) and will be silently discarded.
4) Fragmentation 4) Fragmentation
......
...@@ -1325,6 +1325,8 @@ int udp_lib_setsockopt(struct sock *sk, int level, int optname, ...@@ -1325,6 +1325,8 @@ int udp_lib_setsockopt(struct sock *sk, int level, int optname,
return -ENOPROTOOPT; return -ENOPROTOOPT;
if (val != 0 && val < 8) /* Illegal coverage: use default (8) */ if (val != 0 && val < 8) /* Illegal coverage: use default (8) */
val = 8; val = 8;
else if (val > USHORT_MAX)
val = USHORT_MAX;
up->pcslen = val; up->pcslen = val;
up->pcflag |= UDPLITE_SEND_CC; up->pcflag |= UDPLITE_SEND_CC;
break; break;
...@@ -1337,6 +1339,8 @@ int udp_lib_setsockopt(struct sock *sk, int level, int optname, ...@@ -1337,6 +1339,8 @@ int udp_lib_setsockopt(struct sock *sk, int level, int optname,
return -ENOPROTOOPT; return -ENOPROTOOPT;
if (val != 0 && val < 8) /* Avoid silly minimal values. */ if (val != 0 && val < 8) /* Avoid silly minimal values. */
val = 8; val = 8;
else if (val > USHORT_MAX)
val = USHORT_MAX;
up->pcrlen = val; up->pcrlen = val;
up->pcflag |= UDPLITE_RECV_CC; up->pcflag |= UDPLITE_RECV_CC;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment