|
@@ -67,8 +67,9 @@ dns_resolver_instantiate(struct key *key, const void *_data, size_t datalen)
|
|
size_t result_len = 0;
|
|
size_t result_len = 0;
|
|
const char *data = _data, *end, *opt;
|
|
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')
|
|
if (datalen <= 1 || !data || data[datalen - 1] != '\0')
|
|
return -EINVAL;
|
|
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);
|
|
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 = {
|
|
struct key_type key_type_dns_resolver = {
|
|
.name = "dns_resolver",
|
|
.name = "dns_resolver",
|
|
.instantiate = dns_resolver_instantiate,
|
|
.instantiate = dns_resolver_instantiate,
|
|
@@ -224,7 +238,7 @@ struct key_type key_type_dns_resolver = {
|
|
.revoke = user_revoke,
|
|
.revoke = user_revoke,
|
|
.destroy = user_destroy,
|
|
.destroy = user_destroy,
|
|
.describe = dns_resolver_describe,
|
|
.describe = dns_resolver_describe,
|
|
- .read = user_read,
|
|
|
|
|
|
+ .read = dns_resolver_read,
|
|
};
|
|
};
|
|
|
|
|
|
static int __init init_dns_resolver(void)
|
|
static int __init init_dns_resolver(void)
|