diff --git a/src/box/xrow.c b/src/box/xrow.c
index 397e236866c757d683a47ae7bc936248d1285fc2..1a2646c75a0df1e6fc576ae1ec409cfd172fa332 100644
--- a/src/box/xrow.c
+++ b/src/box/xrow.c
@@ -113,9 +113,14 @@ mp_decode_vclock(const char **data, struct vclock *vclock)
 		if (mp_typeof(**data) != MP_UINT)
 			return -1;
 		uint32_t id = mp_decode_uint(data);
+		if (id >= VCLOCK_MAX)
+			return -1;
 		if (mp_typeof(**data) != MP_UINT)
 			return -1;
 		int64_t lsn = mp_decode_uint(data);
+		int64_t prev_lsn = vclock_get(vclock, id);
+		if (lsn <= prev_lsn)
+			return -1;
 		if (lsn > 0)
 			vclock_follow(vclock, id, lsn);
 	}