diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c
index 7b0c9890ed435ec03ba5f5935b57c2b718770f01..7739e37bdb20fddec4c7da6d3607150a76a50081 100755
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c
@@ -687,6 +687,14 @@ rlc_um_data_req (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP, mem_block_t
   char                 message_string[7000];
 #endif
 
+  /* put a hard limit of 16MB */
+  if (rlc_p->buffer_occupancy > 16 * 1024 * 1024) {
+    free_mem_block(sdu_pP);
+    LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" buffer full, dropping incoming data\n",
+          PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_p));
+    return;
+  }
+
   LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" RLC_UM_DATA_REQ size %d Bytes, BO %d , NB SDU %d\n",
         PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_p),
         ((struct rlc_um_data_req *) (sdu_pP->data))->data_size,