[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