diff --git a/maestro/ofi.c b/maestro/ofi.c
index f72d0ec20d05ee6730357d8c7bfaee2063179b29..b6d387b929b32f84c12151db2616d17a7d3ccef6 100644
--- a/maestro/ofi.c
+++ b/maestro/ofi.c
@@ -2522,6 +2522,11 @@ mstro_ofi__submit_component_descriptor_read(struct mstro_endpoint *my_ep,
   DEBUG("Checking for PM config block MR at (remote addr) 0x%" PRIx64 ", key of len %zu value %" PRIx64 "\n",
         mr_addr, inforeg->raw_key.len, mr_key);
   
+  if(sizeof(g_pm_component_descriptor) > my_ep->fi->ep_attr->max_msg_size) {
+            ERR("component descriptor size exceeds endpoint's max_msg_size. FIXME: should split up operation\n");
+           
+          }
+
   assert(ctx->msg==NULL);
   assert(my_ep->peer_info_mr!=NULL); /* incoming buffer has been registered at local endpoint set creation */
   void * local_buf_mr_desc = fi_mr_desc(my_ep->peer_info_mr);
diff --git a/transport/rdma.c b/transport/rdma.c
index 1c2e244fa804690d3daa80eca386d6e4bcf1a393..dd1ad574dc59dbd9039094bbfea1fbb077b8776f 100644
--- a/transport/rdma.c
+++ b/transport/rdma.c
@@ -543,6 +543,12 @@ mstro_transport_rdma_dst_execute(mstro_cdo cdo_dst, Mstro__Pool__TransferTicket*
   ctx->ep = app_entry->ep;
   mstro_ofi__remember_ctx(app_entry->ep, ctx);
 
+  if(len> app_entry->ep->fi->ep_attr->max_msg_size) {
+    ERR("Transfer size exceeds endpoint's maximum operation size. FIXME: should split up operation\n");
+    status=MSTRO_UNIMPL;
+    goto BAILOUT;
+  }
+
   int num_retries = 3;
   
  RETRY_RDMA_TRANSPORT_READ: ;