lkml.org 
[lkml]   [2019]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH 08/18] scs: add support for stack usage debugging
    From
    Implements CONFIG_DEBUG_STACK_USAGE for shadow stacks.

    Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
    ---
    kernel/scs.c | 39 +++++++++++++++++++++++++++++++++++++++
    1 file changed, 39 insertions(+)

    diff --git a/kernel/scs.c b/kernel/scs.c
    index 0e3cba49ea1a..1ec5c5a8dfae 100644
    --- a/kernel/scs.c
    +++ b/kernel/scs.c
    @@ -161,6 +161,44 @@ int scs_prepare(struct task_struct *tsk, int node)
    return 0;
    }

    +#ifdef CONFIG_DEBUG_STACK_USAGE
    +static inline unsigned long scs_used(struct task_struct *tsk)
    +{
    + unsigned long *p = __scs_base(tsk);
    + unsigned long *end = scs_magic(tsk);
    + uintptr_t s = (uintptr_t)p;
    +
    + while (p < end && *p)
    + p++;
    +
    + return (uintptr_t)p - s;
    +}
    +
    +static void scs_check_usage(struct task_struct *tsk)
    +{
    + static DEFINE_SPINLOCK(lock);
    + static unsigned long highest;
    + unsigned long used = scs_used(tsk);
    +
    + if (used <= highest)
    + return;
    +
    + spin_lock(&lock);
    +
    + if (used > highest) {
    + pr_info("%s: highest shadow stack usage %lu bytes\n",
    + __func__, used);
    + highest = used;
    + }
    +
    + spin_unlock(&lock);
    +}
    +#else
    +static inline void scs_check_usage(struct task_struct *tsk)
    +{
    +}
    +#endif
    +
    bool scs_corrupted(struct task_struct *tsk)
    {
    return *scs_magic(tsk) != SCS_END_MAGIC;
    @@ -175,6 +213,7 @@ void scs_release(struct task_struct *tsk)
    return;

    WARN_ON(scs_corrupted(tsk));
    + scs_check_usage(tsk);

    scs_account(tsk, -1);
    scs_task_init(tsk);
    --
    2.23.0.866.gb869b98d4c-goog
    \
     
     \ /
      Last update: 2019-10-18 18:12    [W:2.166 / U:0.356 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site