[U-Boot] [PATCH 6/6] common: iotrace: fix behaviour when buffer is full

Simon Glass sjg at chromium.org
Sat May 26 02:07:27 UTC 2018


Hi Ramon,

On 25 May 2018 at 04:41, Ramon Fried <ramon.fried at gmail.com> wrote:
> When the buffer is full, there supposed to be no more
> writes, the code however misses the else statement and
> subsequently writes to arbitrary pointer location and increases
> the offset.

I don't think so. It writes to a local variable in this case. The
point of this is to detect how much space would be needed to hold the
I/O trace. Unless the pointer is incremented, there is no way to know.

Perhaps instead, iotrace_get_buffer() should be updated to also return
the number of valid records, as well as the pointer value?

> This patch fixes that by returning immediately.
>
> Signed-off-by: Ramon Fried <ramon.fried at gmail.com>
> ---
>  common/iotrace.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/common/iotrace.c b/common/iotrace.c
> index 74408a5dbb..5f06d2b250 100644
> --- a/common/iotrace.c
> +++ b/common/iotrace.c
> @@ -55,6 +55,8 @@ static void add_record(int flags, const void *ptr, ulong value)
>                 rec = (struct iotrace_record *)map_sysmem(
>                                         iotrace.start + iotrace.offset,
>                                         sizeof(value));
> +       } else {
> +               return;
>         }
>
>         rec->timestamp = get_ticks();
> --
> 2.17.0
>

Regards,
Simon


More information about the U-Boot mailing list