diff options
| -rw-r--r-- | include/linux/integrity.h | 6 | ||||
| -rw-r--r-- | init/main.c | 6 | ||||
| -rw-r--r-- | security/integrity/iint.c | 11 |
3 files changed, 22 insertions, 1 deletions
diff --git a/include/linux/integrity.h b/include/linux/integrity.h index 83222cebd47b..c2d6082a1a4c 100644 --- a/include/linux/integrity.h +++ b/include/linux/integrity.h | |||
| @@ -24,6 +24,7 @@ enum integrity_status { | |||
| 24 | #ifdef CONFIG_INTEGRITY | 24 | #ifdef CONFIG_INTEGRITY |
| 25 | extern struct integrity_iint_cache *integrity_inode_get(struct inode *inode); | 25 | extern struct integrity_iint_cache *integrity_inode_get(struct inode *inode); |
| 26 | extern void integrity_inode_free(struct inode *inode); | 26 | extern void integrity_inode_free(struct inode *inode); |
| 27 | extern void __init integrity_load_keys(void); | ||
| 27 | 28 | ||
| 28 | #else | 29 | #else |
| 29 | static inline struct integrity_iint_cache * | 30 | static inline struct integrity_iint_cache * |
| @@ -36,5 +37,10 @@ static inline void integrity_inode_free(struct inode *inode) | |||
| 36 | { | 37 | { |
| 37 | return; | 38 | return; |
| 38 | } | 39 | } |
| 40 | |||
| 41 | static inline void integrity_load_keys(void) | ||
| 42 | { | ||
| 43 | } | ||
| 39 | #endif /* CONFIG_INTEGRITY */ | 44 | #endif /* CONFIG_INTEGRITY */ |
| 45 | |||
| 40 | #endif /* _LINUX_INTEGRITY_H */ | 46 | #endif /* _LINUX_INTEGRITY_H */ |
diff --git a/init/main.c b/init/main.c index e8ae1fef0908..2c1928d08b78 100644 --- a/init/main.c +++ b/init/main.c | |||
| @@ -78,6 +78,7 @@ | |||
| 78 | #include <linux/context_tracking.h> | 78 | #include <linux/context_tracking.h> |
| 79 | #include <linux/random.h> | 79 | #include <linux/random.h> |
| 80 | #include <linux/list.h> | 80 | #include <linux/list.h> |
| 81 | #include <linux/integrity.h> | ||
| 81 | 82 | ||
| 82 | #include <asm/io.h> | 83 | #include <asm/io.h> |
| 83 | #include <asm/bugs.h> | 84 | #include <asm/bugs.h> |
| @@ -1026,8 +1027,11 @@ static noinline void __init kernel_init_freeable(void) | |||
| 1026 | * Ok, we have completed the initial bootup, and | 1027 | * Ok, we have completed the initial bootup, and |
| 1027 | * we're essentially up and running. Get rid of the | 1028 | * we're essentially up and running. Get rid of the |
| 1028 | * initmem segments and start the user-mode stuff.. | 1029 | * initmem segments and start the user-mode stuff.. |
| 1030 | * | ||
| 1031 | * rootfs is available now, try loading the public keys | ||
| 1032 | * and default modules | ||
| 1029 | */ | 1033 | */ |
| 1030 | 1034 | ||
| 1031 | /* rootfs is available now, try loading default modules */ | 1035 | integrity_load_keys(); |
| 1032 | load_default_modules(); | 1036 | load_default_modules(); |
| 1033 | } | 1037 | } |
diff --git a/security/integrity/iint.c b/security/integrity/iint.c index dbee618526b6..df45640fbac6 100644 --- a/security/integrity/iint.c +++ b/security/integrity/iint.c | |||
| @@ -245,3 +245,14 @@ out: | |||
| 245 | fput(file); | 245 | fput(file); |
| 246 | return rc; | 246 | return rc; |
| 247 | } | 247 | } |
| 248 | |||
| 249 | /* | ||
| 250 | * integrity_load_keys - load integrity keys hook | ||
| 251 | * | ||
| 252 | * Hooks is called from init/main.c:kernel_init_freeable() | ||
| 253 | * when rootfs is ready | ||
| 254 | */ | ||
| 255 | void __init integrity_load_keys(void) | ||
| 256 | { | ||
| 257 | ima_load_x509(); | ||
| 258 | } | ||
