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: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Gerrit Renker 2008-07-21 13:35:08 -07:00 committed by David S. Miller
parent 6579e57b31
commit 47112e25da
2 changed files with 5 additions and 1 deletions

View File

@ -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

View File

@ -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,
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;