sctp: allow unsetting sockopt MAXSEG
authorMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Thu, 26 Apr 2018 19:59:02 +0000 (16:59 -0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 27 Apr 2018 18:35:24 +0000 (14:35 -0400)
RFC 6458 Section 8.1.16 says that setting MAXSEG as 0 means that the user
is not limiting it, and not that it should set to the *current* maximum,
as we are doing.

This patch thus allow setting it as 0, effectively removing the user
limit.

Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/socket.c

index 2d35c8e..1b4593b 100644 (file)
@@ -3211,7 +3211,6 @@ static int sctp_setsockopt_mappedv4(struct sock *sk, char __user *optval, unsign
 static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned int optlen)
 {
        struct sctp_sock *sp = sctp_sk(sk);
-       struct sctp_af *af = sp->pf->af;
        struct sctp_assoc_value params;
        struct sctp_association *asoc;
        int val;
@@ -3249,12 +3248,6 @@ static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned
        }
 
        if (asoc) {
-               if (val == 0) {
-                       val = asoc->pathmtu - af->net_header_len;
-                       val -= af->ip_options_len(sk);
-                       val -= sizeof(struct sctphdr) +
-                              sctp_datachk_len(&asoc->stream);
-               }
                asoc->user_frag = val;
                sctp_assoc_update_frag_point(asoc);
        } else {