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.

Reply via email to