• Nicolas Pitre's avatar
    ARM: stack protector: change the canary value per task · df0698be
    Nicolas Pitre authored
    A new random value for the canary is stored in the task struct whenever
    a new task is forked.  This is meant to allow for different canary values
    per task.  On ARM, GCC expects the canary value to be found in a global
    variable called __stack_chk_guard.  So this variable has to be updated
    with the value stored in the task struct whenever a task switch occurs.
    
    Because the variable GCC expects is global, this cannot work on SMP
    unfortunately.  So, on SMP, the same initial canary value is kept
    throughout, making this feature a bit less effective although it is still
    useful.
    
    One way to overcome this GCC limitation would be to locate the
    __stack_chk_guard variable into a memory page of its own for each CPU,
    and then use TLB locking to have each CPU see its own page at the same
    virtual address for each of them.
    Signed-off-by: default avatarNicolas Pitre <nicolas.pitre@linaro.org>
    df0698be
entry-armv.S 29.2 KB