loff_t offset = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
        unsigned long size = vma->vm_end - vma->vm_start;
        struct xdp_sock *xs = xdp_sk(sock->sk);
+       int state = READ_ONCE(xs->state);
        struct xsk_queue *q = NULL;
 
-       if (READ_ONCE(xs->state) != XSK_READY)
+       if (state != XSK_READY && state != XSK_BOUND)
                return -EBUSY;
 
        if (offset == XDP_PGOFF_RX_RING) {
                /* Matches the smp_wmb() in XDP_UMEM_REG */
                smp_rmb();
                if (offset == XDP_UMEM_PGOFF_FILL_RING)
-                       q = READ_ONCE(xs->fq_tmp);
+                       q = state == XSK_READY ? READ_ONCE(xs->fq_tmp) :
+                                                READ_ONCE(xs->pool->fq);
                else if (offset == XDP_UMEM_PGOFF_COMPLETION_RING)
-                       q = READ_ONCE(xs->cq_tmp);
+                       q = state == XSK_READY ? READ_ONCE(xs->cq_tmp) :
+                                                READ_ONCE(xs->pool->cq);
        }
 
        if (!q)