port->icount.overrun++;
                }
 
-               for (i = 0; i < rxlen; ++i) {
-                       uart_insert_char(port, sts, MAX310X_LSR_RXOVR_BIT,
-                                        one->rx_buf[i], flag);
-               }
+               for (i = 0; i < (rxlen - 1); ++i)
+                       uart_insert_char(port, sts, 0, one->rx_buf[i], flag);
+
+               /*
+                * Handle the overrun case for the last character only, since
+                * the RxFIFO overflow happens after it is pushed to the FIFO
+                * tail.
+                */
+               uart_insert_char(port, sts, MAX310X_LSR_RXOVR_BIT,
+                                one->rx_buf[rxlen], flag);
 
        } else {
                if (unlikely(rxlen >= port->fifosize)) {