/* TCP SACK sequence number adjustment */
 static unsigned int nf_ct_sack_adjust(struct sk_buff *skb,
                                      unsigned int protoff,
-                                     struct tcphdr *tcph,
                                      struct nf_conn *ct,
                                      enum ip_conntrack_info ctinfo)
 {
-       unsigned int dir, optoff, optend;
+       struct tcphdr *tcph = (void *)skb->data + protoff;
        struct nf_conn_seqadj *seqadj = nfct_seqadj(ct);
+       unsigned int dir, optoff, optend;
 
        optoff = protoff + sizeof(struct tcphdr);
        optend = protoff + tcph->doff * 4;
        if (!skb_make_writable(skb, optend))
                return 0;
 
+       tcph = (void *)skb->data + protoff;
        dir = CTINFO2DIR(ctinfo);
 
        while (optoff < optend) {
                 ntohl(newack));
        tcph->ack_seq = newack;
 
-       res = nf_ct_sack_adjust(skb, protoff, tcph, ct, ctinfo);
+       res = nf_ct_sack_adjust(skb, protoff, ct, ctinfo);
 out:
        spin_unlock_bh(&ct->lock);