Benoît Canet <benoit.ca...@irqsave.net> writes: > The counter being reseted to zero make the array index negative. > Reset it to 1. > > Signed-off-by: Benoit Canet <ben...@irqsave.net> > --- > hw/ide/core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/ide/core.c b/hw/ide/core.c > index e1dfe54..c943a4d 100644 > --- a/hw/ide/core.c > +++ b/hw/ide/core.c > @@ -1602,7 +1602,7 @@ static bool cmd_smart(IDEState *s, uint8_t cmd) > case 2: /* extended self test */ > s->smart_selftest_count++; > if (s->smart_selftest_count > 21) { > - s->smart_selftest_count = 0; > + s->smart_selftest_count = 1; > } > n = 2 + (s->smart_selftest_count - 1) * 24; > s->smart_selftest_data[n] = s->sector;
Good catch. Commit message could use some love, though. On every 21st SMART EXECUTE OFFLINE: * We write before a dynamically allocated buffer Your diff's context has one of the writes. * We forget SMART history See the s->smart_selftest_count == 0 special cases in SMART READ DATA and SMART READ LOG.