Aff info function for integrity device and print info ion status.

This commit is contained in:
Milan Broz
2017-07-31 16:48:29 +02:00
parent cf9428fba1
commit 01598028c4
5 changed files with 74 additions and 9 deletions

View File

@@ -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);
/** @} */ /** @} */
/** /**

View File

@@ -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;

View File

@@ -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;
} }

View File

@@ -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)
{ {

View File

@@ -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);