struct sctp_sock *sp = sctp_sk(sk);
        struct sctp_association *asoc;
        struct sctp_assoc_ids *ids;
+       size_t ids_size;
        u32 num = 0;
 
        if (sctp_style(sk, TCP))
                num++;
        }
 
-       if (len < sizeof(struct sctp_assoc_ids) + sizeof(sctp_assoc_t) * num)
+       ids_size = struct_size(ids, gaids_assoc_id, num);
+       if (len < ids_size)
                return -EINVAL;
 
-       len = sizeof(struct sctp_assoc_ids) + sizeof(sctp_assoc_t) * num;
-
+       len = ids_size;
        ids = kmalloc(len, GFP_USER | __GFP_NOWARN);
        if (unlikely(!ids))
                return -ENOMEM;