{
        if (timeout > INT_MAX)
                timeout = INT_MAX;
-       WRITE_ONCE(ct->timeout, nfct_time_stamp + (u32)timeout);
+
+       if (nf_ct_is_confirmed(ct))
+               WRITE_ONCE(ct->timeout, nfct_time_stamp + (u32)timeout);
+       else
+               ct->timeout = (u32)timeout;
 }
 
 int __nf_ct_change_timeout(struct nf_conn *ct, u64 cta_timeout);
 
 static int ctnetlink_dump_timeout(struct sk_buff *skb, const struct nf_conn *ct,
                                  bool skip_zero)
 {
-       long timeout = nf_ct_expires(ct) / HZ;
+       long timeout;
+
+       if (nf_ct_is_confirmed(ct))
+               timeout = nf_ct_expires(ct) / HZ;
+       else
+               timeout = ct->timeout / HZ;
 
        if (skip_zero && timeout == 0)
                return 0;
        if (!cda[CTA_TIMEOUT])
                goto err1;
 
-       timeout = (u64)ntohl(nla_get_be32(cda[CTA_TIMEOUT])) * HZ;
-       __nf_ct_set_timeout(ct, timeout);
-
        rcu_read_lock();
        if (cda[CTA_HELP]) {
                char *helpname = NULL;
        /* we must add conntrack extensions before confirmation. */
        ct->status |= IPS_CONFIRMED;
 
+       timeout = (u64)ntohl(nla_get_be32(cda[CTA_TIMEOUT])) * HZ;
+       __nf_ct_set_timeout(ct, timeout);
+
        if (cda[CTA_STATUS]) {
                err = ctnetlink_change_status(ct, cda);
                if (err < 0)