[Crash-utility] [PATCH] Fix list '-B' option incorrect loop 0 with single embedded list_head

Dave Anderson anderson at redhat.com
Mon Aug 5 18:46:34 UTC 2019


----- Original Message -----
> 
> Commit 6596f1121b added a '-B' option to the list command to allow
> more efficient enumeration of longer lists.  Unfortunately there
> is a small bug with this option where it may incorrectly flag a
> loop length of '0' on list of length 1. It is impossible to have
> a loop of length 0 and we can easily avoid the bug by looking at
> 'count'.

Hi Dave,

Queued for crash-7.2.7:
  
  https://github.com/crash-utility/crash/commit/69cd19866a1b852ece40d0800f0ae4a4d512e8af

Thanks,
  Dave


> Example:
> crash> mutex.wait_list 0xffff8801070d6958
>   wait_list = 0xffff88010802bd08
> crash> struct -o mutex.wait_list
> struct mutex {
>    [8] struct list_head *wait_list;
> }
> crash> list -B -H 0xffff8801070d6960 -o mutex_waiter.list -s mutex_waiter.task
> ffff88010802bd08
>   task = 0xffff88013e7d7520
> list: loop detected, loop length: 0
> crash> list -H 0xffff8801070d6960 -o mutex_waiter.list -s mutex_waiter.task
> ffff88010802bd08
>   task = 0xffff88013e7d7520
> crash>
> 
> Fixes: 6596f1121b
> Signed-off-by: Dave Wysochanski <dwysocha at redhat.com>
> ---
>  tools.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools.c b/tools.c
> index f32e62f..85c8166 100644
> --- a/tools.c
> +++ b/tools.c
> @@ -4146,7 +4146,7 @@ do_list_no_hash(struct list_data *ld)
>  			return -1;
>  
>  		if (!brent_loop_detect) {
> -			if (brent_x == brent_y) {
> +			if (count > 1 && brent_x == brent_y) {
>  				brent_loop_detect = 1;
>  				error(INFO, "loop detected, loop length: %ld\n", brent_lambda);
>  				/* reset x and y to start; advance y loop length */
> -- 
> 1.8.3.1




More information about the Crash-utility mailing list