unack_data = assoc->next_tsn - assoc->ctsn_ack_point - 1;
 
-       frags = sack->variable;
+       frags = (union sctp_sack_variable *)(sack + 1);
        for (i = 0; i < ntohs(sack->num_gap_ack_blocks); i++) {
                unack_data -= ((ntohs(frags[i].gab.end) -
                                ntohs(frags[i].gab.start) + 1));
        struct sctp_transport *transport;
        struct sctp_chunk *tchunk = NULL;
        struct list_head *lchunk, *transport_list, *temp;
-       union sctp_sack_variable *frags = sack->variable;
        __u32 sack_ctsn, ctsn, tsn;
        __u32 highest_tsn, highest_new_tsn;
        __u32 sack_a_rwnd;
 
        /* Get the highest TSN in the sack. */
        highest_tsn = sack_ctsn;
-       if (gap_ack_blocks)
+       if (gap_ack_blocks) {
+               union sctp_sack_variable *frags =
+                       (union sctp_sack_variable *)(sack + 1);
+
                highest_tsn += ntohs(frags[gap_ack_blocks - 1].gab.end);
+       }
 
        if (TSN_lt(asoc->highest_sacked, highest_tsn))
                asoc->highest_sacked = highest_tsn;
         *  Block are assumed to have been received correctly.
         */
 
-       frags = sack->variable;
+       frags = (union sctp_sack_variable *)(sack + 1);
        blocks = ntohs(sack->num_gap_ack_blocks);
        tsn_offset = tsn - ctsn;
        for (i = 0; i < blocks; ++i) {
 
                {
                        struct sctp_chunkhdr *unk_chunk_hdr;
 
-                       unk_chunk_hdr = (struct sctp_chunkhdr *)
-                                                       err_hdr->variable;
+                       unk_chunk_hdr = (struct sctp_chunkhdr *)(err_hdr + 1);
                        switch (unk_chunk_hdr->type) {
                        /* ADDIP 4.1 A9) If the peer responds to an ASCONF with
                         * an ERROR chunk reporting that it did not recognized
 
         * throughout the code today.
         */
        errhdr = (struct sctp_errhdr *)buffer;
-       addrparm = (union sctp_addr_param *)errhdr->variable;
+       addrparm = (union sctp_addr_param *)(errhdr + 1);
 
        /* Copy into a parm format. */
        len = af->to_addr_param(ssa, addrparm);