diff options
| -rw-r--r-- | arch/x86/kernel/module.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c index 49483137371f..e69f9882bf95 100644 --- a/arch/x86/kernel/module.c +++ b/arch/x86/kernel/module.c | |||
| @@ -48,6 +48,9 @@ do { \ | |||
| 48 | static unsigned long module_load_offset; | 48 | static unsigned long module_load_offset; |
| 49 | static int randomize_modules = 1; | 49 | static int randomize_modules = 1; |
| 50 | 50 | ||
| 51 | /* Mutex protects the module_load_offset. */ | ||
| 52 | static DEFINE_MUTEX(module_kaslr_mutex); | ||
| 53 | |||
| 51 | static int __init parse_nokaslr(char *p) | 54 | static int __init parse_nokaslr(char *p) |
| 52 | { | 55 | { |
| 53 | randomize_modules = 0; | 56 | randomize_modules = 0; |
| @@ -58,7 +61,7 @@ early_param("nokaslr", parse_nokaslr); | |||
| 58 | static unsigned long int get_module_load_offset(void) | 61 | static unsigned long int get_module_load_offset(void) |
| 59 | { | 62 | { |
| 60 | if (randomize_modules) { | 63 | if (randomize_modules) { |
| 61 | mutex_lock(&module_mutex); | 64 | mutex_lock(&module_kaslr_mutex); |
| 62 | /* | 65 | /* |
| 63 | * Calculate the module_load_offset the first time this | 66 | * Calculate the module_load_offset the first time this |
| 64 | * code is called. Once calculated it stays the same until | 67 | * code is called. Once calculated it stays the same until |
| @@ -67,7 +70,7 @@ static unsigned long int get_module_load_offset(void) | |||
| 67 | if (module_load_offset == 0) | 70 | if (module_load_offset == 0) |
| 68 | module_load_offset = | 71 | module_load_offset = |
| 69 | (get_random_int() % 1024 + 1) * PAGE_SIZE; | 72 | (get_random_int() % 1024 + 1) * PAGE_SIZE; |
| 70 | mutex_unlock(&module_mutex); | 73 | mutex_unlock(&module_kaslr_mutex); |
| 71 | } | 74 | } |
| 72 | return module_load_offset; | 75 | return module_load_offset; |
| 73 | } | 76 | } |
