]> git.neil.brown.name Git - history.git/commitdiff
[SCTP] Fix SCTP_INITMSG set socket option so that a parameter with 0
authorSridhar Samudrala <sri@us.ibm.com>
Thu, 12 Feb 2004 09:12:42 +0000 (01:12 -0800)
committerSridhar Samudrala <sri@us.ibm.com>
Thu, 12 Feb 2004 09:12:42 +0000 (01:12 -0800)
       value will not change its current value.

net/sctp/socket.c

index 4f7cbfe0e36c30910e90467ce7f24da44d457ff4..3c514b0bd79125b760e75f6602e86a912aa78684 100644 (file)
@@ -1683,10 +1683,23 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
  */
 static int sctp_setsockopt_initmsg(struct sock *sk, char *optval, int optlen)
 {
+       struct sctp_initmsg sinit;
+       struct sctp_opt *sp = sctp_sk(sk);
+
        if (optlen != sizeof(struct sctp_initmsg))
                return -EINVAL;
-       if (copy_from_user(&sctp_sk(sk)->initmsg, optval, optlen))
+       if (copy_from_user(&sinit, optval, optlen))
                return -EFAULT;
+
+       if (sinit.sinit_num_ostreams)
+               sp->initmsg.sinit_num_ostreams = sinit.sinit_num_ostreams;      
+       if (sinit.sinit_max_instreams)
+               sp->initmsg.sinit_max_instreams = sinit.sinit_max_instreams;    
+       if (sinit.sinit_max_attempts)
+               sp->initmsg.sinit_max_attempts = sinit.sinit_max_attempts;      
+       if (sinit.sinit_max_init_timeo)
+               sp->initmsg.sinit_max_init_timeo = sinit.sinit_max_init_timeo;  
+
        return 0;
 }