diff options
Diffstat (limited to 'net/dns_resolver/dns_key.c')
| -rw-r--r-- | net/dns_resolver/dns_key.c | 20 | 
1 files changed, 17 insertions, 3 deletions
diff --git a/net/dns_resolver/dns_key.c b/net/dns_resolver/dns_key.c index 739435a6af3..cfa7a5e1c5c 100644 --- a/net/dns_resolver/dns_key.c +++ b/net/dns_resolver/dns_key.c @@ -67,8 +67,9 @@ dns_resolver_instantiate(struct key *key, const void *_data, size_t datalen)  	size_t result_len = 0;  	const char *data = _data, *end, *opt; -	kenter("%%%d,%s,'%s',%zu", -	       key->serial, key->description, data, datalen); +	kenter("%%%d,%s,'%*.*s',%zu", +	       key->serial, key->description, +	       (int)datalen, (int)datalen, data, datalen);  	if (datalen <= 1 || !data || data[datalen - 1] != '\0')  		return -EINVAL; @@ -217,6 +218,19 @@ static void dns_resolver_describe(const struct key *key, struct seq_file *m)  		seq_printf(m, ": %u", key->datalen);  } +/* + * read the DNS data + * - the key's semaphore is read-locked + */ +static long dns_resolver_read(const struct key *key, +			      char __user *buffer, size_t buflen) +{ +	if (key->type_data.x[0]) +		return key->type_data.x[0]; + +	return user_read(key, buffer, buflen); +} +  struct key_type key_type_dns_resolver = {  	.name		= "dns_resolver",  	.instantiate	= dns_resolver_instantiate, @@ -224,7 +238,7 @@ struct key_type key_type_dns_resolver = {  	.revoke		= user_revoke,  	.destroy	= user_destroy,  	.describe	= dns_resolver_describe, -	.read		= user_read, +	.read		= dns_resolver_read,  };  static int __init init_dns_resolver(void)  |