void handle_device_resync(struct sock *sk, u32 seq, u64 rcd_sn)
 {
        struct tls_context *tls_ctx = tls_get_ctx(sk);
-       struct net_device *netdev = tls_ctx->netdev;
        struct tls_offload_context_rx *rx_ctx;
+       struct net_device *netdev;
        u32 is_req_pending;
        s64 resync_req;
        u32 req_seq;
        is_req_pending = resync_req;
 
        if (unlikely(is_req_pending) && req_seq == seq &&
-           atomic64_try_cmpxchg(&rx_ctx->resync_req, &resync_req, 0))
-               netdev->tlsdev_ops->tls_dev_resync_rx(netdev, sk,
-                                                     seq + TLS_HEADER_SIZE - 1,
-                                                     rcd_sn);
+           atomic64_try_cmpxchg(&rx_ctx->resync_req, &resync_req, 0)) {
+               seq += TLS_HEADER_SIZE - 1;
+               down_read(&device_offload_lock);
+               netdev = tls_ctx->netdev;
+               if (netdev)
+                       netdev->tlsdev_ops->tls_dev_resync_rx(netdev, sk, seq,
+                                                             rcd_sn);
+               up_read(&device_offload_lock);
+       }
 }
 
 static int tls_device_reencrypt(struct sock *sk, struct sk_buff *skb)