Commit b6f61c31 authored by David Howells's avatar David Howells
Browse files

keys: Implement update for the big_key type



Implement the ->update op for the big_key type.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
parent 521fd61c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -18,5 +18,6 @@ extern void big_key_revoke(struct key *key);
extern void big_key_destroy(struct key *key);
extern void big_key_describe(const struct key *big_key, struct seq_file *m);
extern long big_key_read(const struct key *key, char *buffer, size_t buflen);
extern int big_key_update(struct key *key, struct key_preparsed_payload *prep);

#endif /* _KEYS_BIG_KEY_TYPE_H */
+18 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ struct key_type key_type_big_key = {
	.destroy		= big_key_destroy,
	.describe		= big_key_describe,
	.read			= big_key_read,
	/* no ->update(); don't add it without changing chacha20poly1305's nonce */
	.update			= big_key_update,
};

/*
@@ -191,6 +191,23 @@ void big_key_destroy(struct key *key)
	key->payload.data[big_key_data] = NULL;
}

/*
 * Update a big key
 */
int big_key_update(struct key *key, struct key_preparsed_payload *prep)
{
	int ret;

	ret = key_payload_reserve(key, prep->datalen);
	if (ret < 0)
		return ret;

	if (key_is_positive(key))
		big_key_destroy(key);

	return generic_key_instantiate(key, prep);
}

/*
 * describe the big_key key
 */