vcssb
static void pr_dbf_vcssb(const struct vcssb *s)
static char *get_key_description(struct vcssb *vcssb, const struct vce *vce)
cs_token = vcssb->cs_token;
static int create_key_from_vce(struct vcssb *vcssb, struct vce *vce,
desc = get_key_description(vcssb, vce);
static int get_vcssb(struct vcssb *vcssb)
memset(vcssb, 0, sizeof(*vcssb));
vcssb->vcssb_length = VCSSB_LEN_BYTES;
diag320_rc = diag320(DIAG320_STORAGE, vcssb);
pr_dbf_vcssb(vcssb);
if (vcssb->vcssb_length == VCSSB_LEN_NO_CERTS) {
static u32 get_4k_mult_vcb_size(struct vcssb *vcssb)
return round_up(vcssb->max_single_vcb_length, PAGE_SIZE);
static void fill_vcb_input(struct vcssb *vcssb, struct vcb *vcb, u16 index)
vcb->vcb_hdr.vcb_input_length = get_4k_mult_vcb_size(vcssb);
vcb->vcb_hdr.cs_token = vcssb->cs_token;
static int get_sevcb(struct vcssb *vcssb, u16 index, struct vcb *vcb)
fill_vcb_input(vcssb, vcb, index);
static int create_key_from_sevcb(struct vcssb *vcssb, u16 index,
vcb = vmalloc(get_4k_mult_vcb_size(vcssb));
vce = vmalloc(vcssb->max_single_vcb_length - sizeof(vcb->vcb_hdr));
rc = get_sevcb(vcssb, index, vcb);
rc = create_key_from_vce(vcssb, vce, keyring);
static int add_certificates_to_keyring(struct vcssb *vcssb, struct key *keyring)
for (index = 1; index < vcssb->total_vc_index_count + 1; index++) {
rc = create_key_from_sevcb(vcssb, index, keyring);
struct vcssb *vcssb;
vcssb = kmalloc(VCSSB_LEN_BYTES, GFP_KERNEL);
if (!vcssb)
rc = get_vcssb(vcssb);
rc = add_certificates_to_keyring(vcssb, cs_keyring);
kfree(vcssb);