diff --git a/cpu/native/periph/timer.c b/cpu/native/periph/timer.c
index 3257e5ee8095df3f96b1706ded27fff9c045750d..1aa50f940530008c2aa498abafe7895c33d6012f 100644
--- a/cpu/native/periph/timer.c
+++ b/cpu/native/periph/timer.c
@@ -122,8 +122,15 @@ int timer_set(tim_t dev, int channel, unsigned int offset)
 int timer_set_absolute(tim_t dev, int channel, unsigned int value)
 {
     uint32_t now = timer_read(dev);
+    int64_t target = (int32_t)(value - now);
 
-    timer_set(dev, channel, value - now);
+    DEBUG("timer_set_absolute(): delta=%lli\n", target);
+    if (target < 0 && target > -NATIVE_TIMER_MIN_RES) {
+        DEBUG("timer_set_absolute(): preventing underflow.\n");
+        target = NATIVE_TIMER_MIN_RES;
+    }
+
+    timer_set(dev, channel, target);
 
     return 1;
 }