[PATCH 4/8] arm64: stacktrace: add stackinfo_on_stack() helper

Kalesh Singh kaleshsingh at google.com
Mon Aug 1 22:00:27 PDT 2022


On Mon, Aug 1, 2022 at 5:12 AM Mark Rutland <mark.rutland at arm.com> wrote:
>
> Factor the core predicate out of on_stack() into a helper which can be
> used on a pre-populated stack_info.
>
> There should be no functional change as a result of this patch.
>
> Signed-off-by: Mark Rutland <mark.rutland at arm.com>
> Cc: Fuad Tabba <tabba at google.com>
> Cc: Kalesh Singh <kaleshsingh at google.com>
> Cc: Madhavan T. Venkataraman <madvenka at linux.microsoft.com>
> Cc: Marc Zyngier <maz at kernel.org>
> Cc: Mark Brown <broonie at kernel.org>

Reviewed-by: Kalesh Singh <kaleshsingh at google.com>

> ---
>  arch/arm64/include/asm/stacktrace/common.h | 29 ++++++++++++++++------
>  1 file changed, 21 insertions(+), 8 deletions(-)
>
> diff --git a/arch/arm64/include/asm/stacktrace/common.h b/arch/arm64/include/asm/stacktrace/common.h
> index 676002d7d333c..9ed7feb493a36 100644
> --- a/arch/arm64/include/asm/stacktrace/common.h
> +++ b/arch/arm64/include/asm/stacktrace/common.h
> @@ -66,21 +66,34 @@ struct unwind_state {
>         struct task_struct *task;
>  };
>
> +static inline bool stackinfo_on_stack(const struct stack_info *info,
> +                                     unsigned long sp, unsigned long size)
> +{
> +       if (!info->low)
> +               return false;
> +
> +       if (sp < info->low || sp + size < sp || sp + size > info->high)
> +               return false;
> +
> +       return true;
> +}
> +
>  static inline bool on_stack(unsigned long sp, unsigned long size,
>                             unsigned long low, unsigned long high,
>                             enum stack_type type, struct stack_info *info)
>  {
> -       if (!low)
> -               return false;
> +       struct stack_info tmp = {
> +               .low = low,
> +               .high = high,
> +               .type = type,
> +       };
>
> -       if (sp < low || sp + size < sp || sp + size > high)
> +       if (!stackinfo_on_stack(&tmp, sp, size))
>                 return false;
>
> -       if (info) {
> -               info->low = low;
> -               info->high = high;
> -               info->type = type;
> -       }
> +       if (info)
> +               *info = tmp;
> +
>         return true;
>  }
>
> --
> 2.30.2
>



More information about the linux-arm-kernel mailing list