Commit | Line | Data |
---|---|---|
91ccbbac TS |
1 | /* SPDX-License-Identifier: GPL-2.0 |
2 | * | |
3 | * Copyright (C) 2021 Microsoft Corporation | |
4 | * | |
5 | * Author: Tushar Sugandhi <tusharsu@linux.microsoft.com> | |
6 | * | |
7 | * File: dm-ima.h | |
8 | * Header file for device mapper IMA measurements. | |
9 | */ | |
10 | ||
11 | #ifndef DM_IMA_H | |
12 | #define DM_IMA_H | |
13 | ||
14 | #define DM_IMA_MEASUREMENT_BUF_LEN 4096 | |
15 | #define DM_IMA_DEVICE_BUF_LEN 1024 | |
16 | #define DM_IMA_TARGET_METADATA_BUF_LEN 128 | |
17 | #define DM_IMA_TARGET_DATA_BUF_LEN 2048 | |
8eb6fab4 | 18 | #define DM_IMA_DEVICE_CAPACITY_BUF_LEN 128 |
8f509fd4 | 19 | #define DM_IMA_TABLE_HASH_ALG "sha256" |
91ccbbac | 20 | |
dc7b79cc TS |
21 | #define __dm_ima_stringify(s) #s |
22 | #define __dm_ima_str(s) __dm_ima_stringify(s) | |
23 | ||
24 | #define DM_IMA_VERSION_STR "dm_version=" \ | |
25 | __dm_ima_str(DM_VERSION_MAJOR) "." \ | |
26 | __dm_ima_str(DM_VERSION_MINOR) "." \ | |
27 | __dm_ima_str(DM_VERSION_PATCHLEVEL) ";" | |
28 | ||
91ccbbac TS |
29 | #ifdef CONFIG_IMA |
30 | ||
31 | struct dm_ima_device_table_metadata { | |
32 | /* | |
33 | * Contains data specific to the device which is common across | |
34 | * all the targets in the table (e.g. name, uuid, major, minor, etc). | |
35 | * The values are stored in comma separated list of key1=val1,key2=val2; | |
36 | * pairs delimited by a semicolon at the end of the list. | |
37 | */ | |
38 | char *device_metadata; | |
39 | unsigned int device_metadata_len; | |
40 | unsigned int num_targets; | |
41 | ||
42 | /* | |
43 | * Contains the sha256 hashes of the IMA measurements of the target | |
44 | * attributes' key-value pairs from the active/inactive tables. | |
45 | */ | |
46 | char *hash; | |
47 | unsigned int hash_len; | |
48 | }; | |
49 | ||
50 | /* | |
51 | * This structure contains device metadata, and table hash for | |
52 | * active and inactive tables for ima measurements. | |
53 | */ | |
54 | struct dm_ima_measurements { | |
55 | struct dm_ima_device_table_metadata active_table; | |
56 | struct dm_ima_device_table_metadata inactive_table; | |
dc7b79cc | 57 | unsigned int dm_version_str_len; |
91ccbbac TS |
58 | }; |
59 | ||
60 | void dm_ima_reset_data(struct mapped_device *md); | |
61 | void dm_ima_measure_on_table_load(struct dm_table *table, unsigned int status_flags); | |
8eb6fab4 | 62 | void dm_ima_measure_on_device_resume(struct mapped_device *md, bool swap); |
84010e51 | 63 | void dm_ima_measure_on_device_remove(struct mapped_device *md, bool remove_all); |
99169b93 | 64 | void dm_ima_measure_on_table_clear(struct mapped_device *md, bool new_map); |
7d1d1df8 | 65 | void dm_ima_measure_on_device_rename(struct mapped_device *md); |
91ccbbac TS |
66 | |
67 | #else | |
68 | ||
69 | static inline void dm_ima_reset_data(struct mapped_device *md) {} | |
70 | static inline void dm_ima_measure_on_table_load(struct dm_table *table, unsigned int status_flags) {} | |
8eb6fab4 | 71 | static inline void dm_ima_measure_on_device_resume(struct mapped_device *md, bool swap) {} |
84010e51 | 72 | static inline void dm_ima_measure_on_device_remove(struct mapped_device *md, bool remove_all) {} |
99169b93 | 73 | static inline void dm_ima_measure_on_table_clear(struct mapped_device *md, bool new_map) {} |
7d1d1df8 | 74 | static inline void dm_ima_measure_on_device_rename(struct mapped_device *md) {} |
91ccbbac TS |
75 | |
76 | #endif /* CONFIG_IMA */ | |
77 | ||
78 | #endif /* DM_IMA_H */ |