summaryrefslogtreecommitdiffstats
path: root/net/dns_resolver
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-07-10 21:43:43 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-07-10 21:43:43 -0400
commit028db3e290f15ac509084c0fc3b9d021f668f877 (patch)
tree7497244a90100f2464403063f88f83a555da03b3 /net/dns_resolver
parente9a83bd2322035ed9d7dcf35753d3f984d76c6a5 (diff)
Revert "Merge tag 'keys-acl-20190703' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs"
This reverts merge 0f75ef6a9cff49ff612f7ce0578bced9d0b38325 (and thus effectively commits 7a1ade847596 ("keys: Provide KEYCTL_GRANT_PERMISSION") 2e12256b9a76 ("keys: Replace uid/gid/perm permissions checking with an ACL") that the merge brought in). It turns out that it breaks booting with an encrypted volume, and Eric biggers reports that it also breaks the fscrypt tests [1] and loading of in-kernel X.509 certificates [2]. The root cause of all the breakage is likely the same, but David Howells is off email so rather than try to work it out it's getting reverted in order to not impact the rest of the merge window. [1] https://lore.kernel.org/lkml/20190710011559.GA7973@sol.localdomain/ [2] https://lore.kernel.org/lkml/20190710013225.GB7973@sol.localdomain/ Link: https://lore.kernel.org/lkml/CAHk-=wjxoeMJfeBahnWH=9zShKp2bsVy527vo3_y8HfOdhwAAw@mail.gmail.com/ Reported-by: Eric Biggers <ebiggers@kernel.org> Cc: David Howells <dhowells@redhat.com> Cc: James Morris <jmorris@namei.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'net/dns_resolver')
-rw-r--r--net/dns_resolver/dns_key.c12
-rw-r--r--net/dns_resolver/dns_query.c15
2 files changed, 5 insertions, 22 deletions
diff --git a/net/dns_resolver/dns_key.c b/net/dns_resolver/dns_key.c
index 6b201531b165..3e1a90669006 100644
--- a/net/dns_resolver/dns_key.c
+++ b/net/dns_resolver/dns_key.c
@@ -46,15 +46,6 @@ const struct cred *dns_resolver_cache;
46 46
47#define DNS_ERRORNO_OPTION "dnserror" 47#define DNS_ERRORNO_OPTION "dnserror"
48 48
49static struct key_acl dns_keyring_acl = {
50 .usage = REFCOUNT_INIT(1),
51 .nr_ace = 2,
52 .aces = {
53 KEY_POSSESSOR_ACE(KEY_ACE_SEARCH | KEY_ACE_WRITE),
54 KEY_OWNER_ACE(KEY_ACE_VIEW | KEY_ACE_READ | KEY_ACE_CLEAR),
55 }
56};
57
58/* 49/*
59 * Preparse instantiation data for a dns_resolver key. 50 * Preparse instantiation data for a dns_resolver key.
60 * 51 *
@@ -352,7 +343,8 @@ static int __init init_dns_resolver(void)
352 343
353 keyring = keyring_alloc(".dns_resolver", 344 keyring = keyring_alloc(".dns_resolver",
354 GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, cred, 345 GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, cred,
355 &dns_keyring_acl, 346 (KEY_POS_ALL & ~KEY_POS_SETATTR) |
347 KEY_USR_VIEW | KEY_USR_READ,
356 KEY_ALLOC_NOT_IN_QUOTA, NULL, NULL); 348 KEY_ALLOC_NOT_IN_QUOTA, NULL, NULL);
357 if (IS_ERR(keyring)) { 349 if (IS_ERR(keyring)) {
358 ret = PTR_ERR(keyring); 350 ret = PTR_ERR(keyring);
diff --git a/net/dns_resolver/dns_query.c b/net/dns_resolver/dns_query.c
index 236baf2bfa4c..cab4e0df924f 100644
--- a/net/dns_resolver/dns_query.c
+++ b/net/dns_resolver/dns_query.c
@@ -47,16 +47,6 @@
47 47
48#include "internal.h" 48#include "internal.h"
49 49
50static struct key_acl dns_key_acl = {
51 .usage = REFCOUNT_INIT(1),
52 .nr_ace = 2,
53 .possessor_viewable = true,
54 .aces = {
55 KEY_POSSESSOR_ACE(KEY_ACE_VIEW | KEY_ACE_SEARCH | KEY_ACE_READ),
56 KEY_OWNER_ACE(KEY_ACE_VIEW | KEY_ACE_INVAL),
57 }
58};
59
60/** 50/**
61 * dns_query - Query the DNS 51 * dns_query - Query the DNS
62 * @net: The network namespace to operate in. 52 * @net: The network namespace to operate in.
@@ -135,8 +125,7 @@ int dns_query(struct net *net,
135 * add_key() to preinstall malicious redirections 125 * add_key() to preinstall malicious redirections
136 */ 126 */
137 saved_cred = override_creds(dns_resolver_cache); 127 saved_cred = override_creds(dns_resolver_cache);
138 rkey = request_key_net(&key_type_dns_resolver, desc, net, options, 128 rkey = request_key_net(&key_type_dns_resolver, desc, net, options);
139 &dns_key_acl);
140 revert_creds(saved_cred); 129 revert_creds(saved_cred);
141 kfree(desc); 130 kfree(desc);
142 if (IS_ERR(rkey)) { 131 if (IS_ERR(rkey)) {
@@ -146,6 +135,8 @@ int dns_query(struct net *net,
146 135
147 down_read(&rkey->sem); 136 down_read(&rkey->sem);
148 set_bit(KEY_FLAG_ROOT_CAN_INVAL, &rkey->flags); 137 set_bit(KEY_FLAG_ROOT_CAN_INVAL, &rkey->flags);
138 rkey->perm |= KEY_USR_VIEW;
139
149 ret = key_validate(rkey); 140 ret = key_validate(rkey);
150 if (ret < 0) 141 if (ret < 0)
151 goto put; 142 goto put;