Commit f4a289091ee226cb9a323e2b2796ba706c2fc149
authorFrej Drejhammar <frej.drejhammar@gmail.com>
Sun, 17 May 2015 14:34:49 +0000 (16:34 +0200)
committerFrej Drejhammar <frej.drejhammar@gmail.com>
Sun, 17 May 2015 15:10:22 +0000 (17:10 +0200)
On smaller AVRs, such as the attiny13, MAX_IOs will be larger than the
size of SRAM which will lead to out of range writes to a malloc
allocated buffer. Therefore limit the number of bytes cleared to the
size of SRAM.

simavr/sim/sim_avr.c

index 6c985cca1649de28561cf0f6ded9de55b25a409e..3e12c7490e224b59070eff5947086207172fb18f 100644 (file)
@@ -118,10 +118,11 @@ void avr_terminate(avr_t * avr)
 
 void avr_reset(avr_t * avr)
 {
+       int noof_ios = MAX_IOs > avr->ramend ? avr->ramend : avr->ramend;
        AVR_LOG(avr, LOG_TRACE, "%s reset\n", avr->mmcu);
 
        avr->state = cpu_Running;
-       for(int i = 0x20; i <= MAX_IOs; i++)
+       for(int i = 0x20; i < noof_ios; i++)
                avr->data[i] = 0;
        _avr_sp_set(avr, avr->ramend);
        avr->pc = 0;