poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] pkl: Add canary to exception and return stacks


From: Jose E. Marchesi
Subject: Re: [PATCH 2/2] pkl: Add canary to exception and return stacks
Date: Sun, 26 Dec 2021 19:49:54 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Hi Mohammad.

> 2021-12-26  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>
>       * libpoke/pvm.jitter (state-struct-backing-c): Remove `canary` field.
>       Add `canary_{,return,exception}stack` fields.
>       (state-initialization-c): Init new fields.
>       (canary): Install canaries for stacks.
>       (exit): Add assertions for stack canaries.
>       (strace): s/canary/canary_stack/.

This is OK for both master and maint/poke-1.
Thanks!

> ---
>  ChangeLog          |  9 +++++++++
>  libpoke/pvm.jitter | 28 +++++++++++++++++++++-------
>  2 files changed, 30 insertions(+), 7 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 0432f5d4..28dab956 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,12 @@
> +2021-12-26  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
> +
> +     * libpoke/pvm.jitter (state-struct-backing-c): Remove `canary` field.
> +     Add `canary_{,return,exception}stack` fields.
> +     (state-initialization-c): Init new fields.
> +     (canary): Install canaries for stacks.
> +     (exit): Add assertions for stack canaries.
> +     (strace): s/canary/canary_stack/.
> +
>  2021-12-26  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>  
>       * libpoke/pkl-ast.h (struct pkl_ast_return_stmt): Add new field
> diff --git a/libpoke/pvm.jitter b/libpoke/pvm.jitter
> index 4c48bef7..38cfc7f1 100644
> --- a/libpoke/pvm.jitter
> +++ b/libpoke/pvm.jitter
> @@ -963,7 +963,9 @@ state-struct-backing-c
>    code
>        enum pvm_exit_code exit_code;
>        pvm_val result_value;
> -      jitter_stack_height canary;
> +      jitter_stack_height canary_stack;
> +      jitter_stack_height canary_returnstack;
> +      jitter_stack_height canary_exceptionstack;
>        pvm vm;
>    end
>  end
> @@ -987,7 +989,9 @@ end
>  state-initialization-c
>    code
>        jitter_state_backing->vm = NULL;
> -      jitter_state_backing->canary = NULL;
> +      jitter_state_backing->canary_stack = NULL;
> +      jitter_state_backing->canary_returnstack = NULL;
> +      jitter_state_backing->canary_exceptionstack = NULL;
>        jitter_state_backing->exit_code = PVM_EXIT_OK;
>        jitter_state_backing->result_value = PVM_NULL;
>        jitter_state_runtime->endian = IOS_ENDIAN_MSB;
> @@ -1027,7 +1031,11 @@ end
>  
>  instruction canary ()
>    code
> -     PVM_STATE_BACKING_FIELD (canary) = JITTER_HEIGHT_STACK ();
> +     PVM_STATE_BACKING_FIELD (canary_stack) = JITTER_HEIGHT_STACK ();
> +     PVM_STATE_BACKING_FIELD (canary_returnstack) =
> +       JITTER_HEIGHT_RETURNSTACK ();
> +     PVM_STATE_BACKING_FIELD (canary_exceptionstack) =
> +       JITTER_HEIGHT_EXCEPTIONSTACK ();
>    end
>  end
>  
> @@ -1055,9 +1063,15 @@ instruction exit ()
>  
>      /* Check for the stack sentinel, but only if it was
>         installed.  */
> -    if (PVM_STATE_BACKING_FIELD (canary) != NULL)
> -      assert (PVM_STATE_BACKING_FIELD (canary)
> +    if (PVM_STATE_BACKING_FIELD (canary_stack) != NULL)
> +      assert (PVM_STATE_BACKING_FIELD (canary_stack)
>                == JITTER_HEIGHT_STACK ());
> +    if (PVM_STATE_BACKING_FIELD (canary_returnstack) != NULL)
> +      assert (PVM_STATE_BACKING_FIELD (canary_returnstack)
> +              == JITTER_HEIGHT_RETURNSTACK ());
> +    if (PVM_STATE_BACKING_FIELD (canary_exceptionstack) != NULL)
> +      assert (PVM_STATE_BACKING_FIELD (canary_exceptionstack)
> +              == JITTER_HEIGHT_EXCEPTIONSTACK ());
>  
>      /* Clear pending signals.  */
>      {
> @@ -6091,10 +6105,10 @@ instruction strace (?n)
>      int num_elems = (int) JITTER_ARGN0;
>      int num_elems_in_stack;
>  
> -    assert (PVM_STATE_BACKING_FIELD (canary) != NULL);
> +    assert (PVM_STATE_BACKING_FIELD (canary_stack) != NULL);
>  
>      num_elems_in_stack = (pvm_val *)JITTER_HEIGHT_STACK ()
> -                         - (pvm_val *)PVM_STATE_BACKING_FIELD (canary);
> +                         - (pvm_val *)PVM_STATE_BACKING_FIELD (canary_stack);
>      if (num_elems == 0 || num_elems > num_elems_in_stack)
>        num_elems = num_elems_in_stack;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]