Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
arm
include
asm
stackprotector.h
Go to the documentation of this file.
1
/*
2
* GCC stack protector support.
3
*
4
* Stack protector works by putting predefined pattern at the start of
5
* the stack frame and verifying that it hasn't been overwritten when
6
* returning from the function. The pattern is called stack canary
7
* and gcc expects it to be defined by a global variable called
8
* "__stack_chk_guard" on ARM. This unfortunately means that on SMP
9
* we cannot have a different canary value per task.
10
*/
11
12
#ifndef _ASM_STACKPROTECTOR_H
13
#define _ASM_STACKPROTECTOR_H 1
14
15
#include <linux/random.h>
16
#include <linux/version.h>
17
18
extern
unsigned
long
__stack_chk_guard
;
19
20
/*
21
* Initialize the stackprotector canary value.
22
*
23
* NOTE: this must only be called from functions that never return,
24
* and it must always be inlined.
25
*/
26
static
__always_inline
void
boot_init_stack_canary(
void
)
27
{
28
unsigned
long
canary;
29
30
/* Try to get a semi random initial value. */
31
get_random_bytes
(&canary,
sizeof
(canary));
32
canary ^= LINUX_VERSION_CODE;
33
34
current
->stack_canary = canary;
35
__stack_chk_guard
=
current
->stack_canary;
36
}
37
38
#endif
/* _ASM_STACKPROTECTOR_H */
Generated on Thu Jan 10 2013 12:55:22 for Linux Kernel by
1.8.2