[SCTP]: Update AUTH structures to match declarations in draft-16.
authorVlad Yasevich <vladislav.yasevich@hp.com>
Wed, 27 Feb 2008 21:04:52 +0000 (16:04 -0500)
committerVlad Yasevich <vladislav.yasevich@hp.com>
Thu, 28 Feb 2008 21:45:04 +0000 (16:45 -0500)
The new SCTP socket api (draft 16) updates the AUTH API structures.
We never exported these since we knew they would change.
Update the rest to match the draft.

Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
include/net/sctp/user.h
net/sctp/auth.c
net/sctp/socket.c

index 9462d6ae2f372170594a1e7923fadb9a173f0094..9619b9d35c9e7d581db9b35448af14c1b9598b8c 100644 (file)
@@ -411,6 +411,7 @@ struct sctp_event_subscribe {
        __u8 sctp_shutdown_event;
        __u8 sctp_partial_delivery_event;
        __u8 sctp_adaptation_layer_event;
+       __u8 sctp_authentication_event;
 };
 
 /*
@@ -587,7 +588,7 @@ struct sctp_authchunk {
  * endpoint requires the peer to use.
 */
 struct sctp_hmacalgo {
-       __u16           shmac_num_idents;
+       __u32           shmac_num_idents;
        __u16           shmac_idents[];
 };
 
@@ -600,7 +601,7 @@ struct sctp_hmacalgo {
 struct sctp_authkey {
        sctp_assoc_t    sca_assoc_id;
        __u16           sca_keynumber;
-       __u16           sca_keylen;
+       __u16           sca_keylength;
        __u8            sca_key[];
 };
 
@@ -693,8 +694,9 @@ struct sctp_status {
  * the peer requires to be received authenticated only.
  */
 struct sctp_authchunks {
-       sctp_assoc_t            gauth_assoc_id;
-       uint8_t                 gauth_chunks[];
+       sctp_assoc_t    gauth_assoc_id;
+       __u32           gauth_number_of_chunks;
+       uint8_t         gauth_chunks[];
 };
 
 /*
index 8bb79f281774b690aec0f42973889de07e7d7fcd..675a5c3e68a6f82806b4b8d97411af24774d87fe 100644 (file)
@@ -838,11 +838,11 @@ int sctp_auth_set_key(struct sctp_endpoint *ep,
        }
 
        /* Create a new key data based on the info passed in */
-       key = sctp_auth_create_key(auth_key->sca_keylen, GFP_KERNEL);
+       key = sctp_auth_create_key(auth_key->sca_keylength, GFP_KERNEL);
        if (!key)
                goto nomem;
 
-       memcpy(key->data, &auth_key->sca_key[0], auth_key->sca_keylen);
+       memcpy(key->data, &auth_key->sca_key[0], auth_key->sca_keylength);
 
        /* If we are replacing, remove the old keys data from the
         * key id.  If we are adding new key id, add it to the
index 848df21dc6c12df7b014ba80a4dd9ba373509dfc..939892691a260e46f5901581123c723c007d0f5c 100644 (file)
@@ -1964,7 +1964,7 @@ static int sctp_setsockopt_disable_fragments(struct sock *sk,
 static int sctp_setsockopt_events(struct sock *sk, char __user *optval,
                                        int optlen)
 {
-       if (optlen != sizeof(struct sctp_event_subscribe))
+       if (optlen > sizeof(struct sctp_event_subscribe))
                return -EINVAL;
        if (copy_from_user(&sctp_sk(sk)->subscribe, optval, optlen))
                return -EFAULT;
@@ -5094,6 +5094,8 @@ static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,
        len = num_chunks;
        if (put_user(len, optlen))
                return -EFAULT;
+       if (put_user(num_chunks, &p->gauth_number_of_chunks))
+               return -EFAULT;
        if (copy_to_user(to, ch->chunks, len))
                return -EFAULT;
 
@@ -5133,6 +5135,8 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
        len = num_chunks;
        if (put_user(len, optlen))
                return -EFAULT;
+       if (put_user(num_chunks, &p->gauth_number_of_chunks))
+               return -EFAULT;
        if (copy_to_user(to, ch->chunks, len))
                return -EFAULT;