Skip to content

Commit

Permalink
keys: Implement update for the big_key type
Browse files Browse the repository at this point in the history
Implement the ->update op for the big_key type.

Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Jason A. Donenfeld <Jason@zx2c4.com>
  • Loading branch information
David Howells committed Jun 2, 2020
1 parent 521fd61 commit b6f61c3
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
1 change: 1 addition & 0 deletions include/keys/big_key-type.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
19 changes: 18 additions & 1 deletion security/keys/big_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};

/*
Expand Down Expand Up @@ -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
*/
Expand Down

0 comments on commit b6f61c3

Please sign in to comment.