mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-13 11:50:10 +01:00
Aff info function for integrity device and print info ion status.
This commit is contained in:
@@ -1041,6 +1041,18 @@ int crypt_get_sector_size(struct crypt_device *cd);
|
|||||||
*/
|
*/
|
||||||
int crypt_get_verity_info(struct crypt_device *cd,
|
int crypt_get_verity_info(struct crypt_device *cd,
|
||||||
struct crypt_params_verity *vp);
|
struct crypt_params_verity *vp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get device parameters for INTEGRITY device.
|
||||||
|
*
|
||||||
|
* @param cd crypt device handle
|
||||||
|
* @param vp verity device info
|
||||||
|
*
|
||||||
|
* @e 0 on success or negative errno value otherwise.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int crypt_get_integrity_info(struct crypt_device *cd,
|
||||||
|
struct crypt_params_integrity *ip);
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ CRYPTSETUP_2.0 {
|
|||||||
crypt_get_integrity_key_size;
|
crypt_get_integrity_key_size;
|
||||||
crypt_get_integrity_tag_size;
|
crypt_get_integrity_tag_size;
|
||||||
crypt_get_integrity_sectors;
|
crypt_get_integrity_sectors;
|
||||||
|
crypt_get_integrity_info;
|
||||||
crypt_get_uuid;
|
crypt_get_uuid;
|
||||||
crypt_get_data_offset;
|
crypt_get_data_offset;
|
||||||
crypt_get_iv_offset;
|
crypt_get_iv_offset;
|
||||||
|
|||||||
@@ -1529,11 +1529,15 @@ static int _dm_query_integrity(uint32_t get_flags,
|
|||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
} else if (!strncmp(arg, "journal_crypt:", 14))
|
} else if (!strncmp(arg, "journal_crypt:", 14)) {
|
||||||
;/* ignore it for now */
|
str = &arg[14];
|
||||||
else if (!strncmp(arg, "journal_mac:", 12))
|
arg = strsep(&str, ":");
|
||||||
;/* ignore it for now */
|
dmd->u.integrity.journal_crypt = strdup(arg);
|
||||||
else /* unknown option */
|
} else if (!strncmp(arg, "journal_mac:", 12)) {
|
||||||
|
str = &arg[12];
|
||||||
|
arg = strsep(&str, ":");
|
||||||
|
dmd->u.integrity.journal_integrity = strdup(arg);
|
||||||
|
} else /* unknown option */
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
30
lib/setup.c
30
lib/setup.c
@@ -838,6 +838,9 @@ static int _init_by_name_integrity(struct crypt_device *cd, const char *name)
|
|||||||
cd->u.integrity.params.interleave_sectors = dmd.u.integrity.interleave_sectors;
|
cd->u.integrity.params.interleave_sectors = dmd.u.integrity.interleave_sectors;
|
||||||
cd->u.integrity.params.buffer_sectors = dmd.u.integrity.buffer_sectors;
|
cd->u.integrity.params.buffer_sectors = dmd.u.integrity.buffer_sectors;
|
||||||
cd->u.integrity.params.integrity = dmd.u.integrity.integrity;
|
cd->u.integrity.params.integrity = dmd.u.integrity.integrity;
|
||||||
|
cd->u.integrity.params.journal_integrity = dmd.u.integrity.journal_integrity;
|
||||||
|
cd->u.integrity.params.journal_crypt = dmd.u.integrity.journal_crypt;
|
||||||
|
|
||||||
//FIXME init keys?
|
//FIXME init keys?
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
@@ -2798,6 +2801,33 @@ int crypt_get_verity_info(struct crypt_device *cd,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int crypt_get_integrity_info(struct crypt_device *cd,
|
||||||
|
struct crypt_params_integrity *ip)
|
||||||
|
{
|
||||||
|
if (!isINTEGRITY(cd->type) || !ip)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
ip->journal_size = cd->u.integrity.params.journal_size;
|
||||||
|
ip->journal_watermark = cd->u.integrity.params.journal_watermark;
|
||||||
|
ip->journal_commit_time = cd->u.integrity.params.journal_commit_time;
|
||||||
|
ip->interleave_sectors = cd->u.integrity.params.interleave_sectors;
|
||||||
|
ip->tag_size = cd->u.integrity.params.tag_size;
|
||||||
|
ip->sector_size = cd->u.integrity.params.sector_size;
|
||||||
|
ip->buffer_sectors = cd->u.integrity.params.buffer_sectors;
|
||||||
|
|
||||||
|
ip->integrity = cd->u.integrity.params.integrity;
|
||||||
|
|
||||||
|
ip->journal_integrity = cd->u.integrity.params.journal_integrity;
|
||||||
|
ip->journal_integrity_key_size = cd->u.integrity.params.journal_integrity_key_size;
|
||||||
|
ip->journal_integrity_key = NULL;
|
||||||
|
|
||||||
|
ip->journal_crypt = cd->u.integrity.params.journal_crypt;
|
||||||
|
ip->journal_crypt_key_size = cd->u.integrity.params.journal_crypt_key_size;
|
||||||
|
ip->journal_crypt_key = NULL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int crypt_get_active_device(struct crypt_device *cd, const char *name,
|
int crypt_get_active_device(struct crypt_device *cd, const char *name,
|
||||||
struct crypt_active_device *cad)
|
struct crypt_active_device *cad)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -334,6 +334,7 @@ static int action_status(int arg)
|
|||||||
{
|
{
|
||||||
crypt_status_info ci;
|
crypt_status_info ci;
|
||||||
struct crypt_active_device cad;
|
struct crypt_active_device cad;
|
||||||
|
struct crypt_params_integrity ip = {};
|
||||||
struct crypt_device *cd = NULL;
|
struct crypt_device *cd = NULL;
|
||||||
char *backing_file;
|
char *backing_file;
|
||||||
const char *device;
|
const char *device;
|
||||||
@@ -374,8 +375,12 @@ static int action_status(int arg)
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
log_std(" tag size: %u\n", crypt_get_integrity_tag_size(cd));
|
r = crypt_get_integrity_info(cd, &ip);
|
||||||
log_std(" integrity: %s\n", crypt_get_integrity(cd) ?: "(none)");
|
if (r < 0)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
log_std(" tag size: %u\n", ip.tag_size);
|
||||||
|
log_std(" integrity: %s\n", ip.integrity ?: "(none)");
|
||||||
device = crypt_get_device_name(cd);
|
device = crypt_get_device_name(cd);
|
||||||
log_std(" device: %s\n", device);
|
log_std(" device: %s\n", device);
|
||||||
if (crypt_loop_device(device)) {
|
if (crypt_loop_device(device)) {
|
||||||
@@ -384,9 +389,22 @@ static int action_status(int arg)
|
|||||||
free(backing_file);
|
free(backing_file);
|
||||||
}
|
}
|
||||||
log_std(" sector size: %u sectors\n", crypt_get_sector_size(cd));
|
log_std(" sector size: %u sectors\n", crypt_get_sector_size(cd));
|
||||||
|
log_std(" interleave sectors: %u\n", ip.interleave_sectors);
|
||||||
log_std(" size: %" PRIu64 " sectors\n", cad.size);
|
log_std(" size: %" PRIu64 " sectors\n", cad.size);
|
||||||
log_std(" mode: %s\n", cad.flags & CRYPT_ACTIVATE_READONLY ?
|
log_std(" mode: %s%s\n",
|
||||||
"readonly" : "read/write");
|
cad.flags & CRYPT_ACTIVATE_READONLY ? "readonly" : "read/write",
|
||||||
|
cad.flags & CRYPT_ACTIVATE_RECOVERY ? " recovery" : "");
|
||||||
|
if (cad.flags & CRYPT_ACTIVATE_NO_JOURNAL) {
|
||||||
|
log_std(" journal: not active\n");
|
||||||
|
} else {
|
||||||
|
log_std(" journal size: %" PRIu64 " bytes\n", ip.journal_size);
|
||||||
|
log_std(" journal watermark: %u%%\n", ip.journal_watermark);
|
||||||
|
log_std(" journal commit time: %u ms\n", ip.journal_commit_time);
|
||||||
|
if (ip.journal_integrity)
|
||||||
|
log_std(" journal integrity MAC: %s\n", ip.journal_integrity);
|
||||||
|
if (ip.journal_crypt)
|
||||||
|
log_std(" journal encryption: %s\n", ip.journal_crypt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
crypt_free(cd);
|
crypt_free(cd);
|
||||||
|
|||||||
Reference in New Issue
Block a user