diff --git a/devices/generic.c b/devices/generic.c
index 4e266b8b32e9d71cee3827c6df707f724415eeec..afef6e4d003a6f827a30d87f94fd244c70022889 100644
--- a/devices/generic.c
+++ b/devices/generic.c
@@ -314,11 +314,11 @@ void ec_gen_device_poll(
     struct kvec iov;
     int ret, budget = 10; // FIXME
 
-    iov.iov_base = dev->rx_buf;
-    iov.iov_len = EC_GEN_RX_BUF_SIZE;
-    memset(&msg, 0, sizeof(msg));
-
     do {
+        iov.iov_base = dev->rx_buf;
+        iov.iov_len = EC_GEN_RX_BUF_SIZE;
+        memset(&msg, 0, sizeof(msg));
+
         ret = kernel_recvmsg(dev->socket, &msg, &iov, 1, iov.iov_len,
                 MSG_DONTWAIT);
         if (ret > 0) {