diff options
| -rw-r--r-- | fs/afs/addr_list.c | 2 | ||||
| -rw-r--r-- | fs/afs/dynroot.c | 2 | ||||
| -rw-r--r-- | fs/cifs/dns_resolve.c | 2 | ||||
| -rw-r--r-- | fs/nfs/dns_resolve.c | 2 | ||||
| -rw-r--r-- | include/linux/dns_resolver.h | 3 | ||||
| -rw-r--r-- | net/ceph/messenger.c | 2 | ||||
| -rw-r--r-- | net/dns_resolver/dns_query.c | 6 |
7 files changed, 12 insertions, 7 deletions
diff --git a/fs/afs/addr_list.c b/fs/afs/addr_list.c index 967db336d11a..9eaff55df7b4 100644 --- a/fs/afs/addr_list.c +++ b/fs/afs/addr_list.c | |||
| @@ -251,7 +251,7 @@ struct afs_vlserver_list *afs_dns_query(struct afs_cell *cell, time64_t *_expiry | |||
| 251 | _enter("%s", cell->name); | 251 | _enter("%s", cell->name); |
| 252 | 252 | ||
| 253 | ret = dns_query("afsdb", cell->name, cell->name_len, "srv=1", | 253 | ret = dns_query("afsdb", cell->name, cell->name_len, "srv=1", |
| 254 | &result, _expiry); | 254 | &result, _expiry, true); |
| 255 | if (ret < 0) { | 255 | if (ret < 0) { |
| 256 | _leave(" = %d [dns]", ret); | 256 | _leave(" = %d [dns]", ret); |
| 257 | return ERR_PTR(ret); | 257 | return ERR_PTR(ret); |
diff --git a/fs/afs/dynroot.c b/fs/afs/dynroot.c index a9ba81ddf154..07484b5a3bbb 100644 --- a/fs/afs/dynroot.c +++ b/fs/afs/dynroot.c | |||
| @@ -46,7 +46,7 @@ static int afs_probe_cell_name(struct dentry *dentry) | |||
| 46 | return 0; | 46 | return 0; |
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | ret = dns_query("afsdb", name, len, "srv=1", NULL, NULL); | 49 | ret = dns_query("afsdb", name, len, "srv=1", NULL, NULL, false); |
| 50 | if (ret == -ENODATA) | 50 | if (ret == -ENODATA) |
| 51 | ret = -EDESTADDRREQ; | 51 | ret = -EDESTADDRREQ; |
| 52 | return ret; | 52 | return ret; |
diff --git a/fs/cifs/dns_resolve.c b/fs/cifs/dns_resolve.c index 7ede7306599f..1e21b2528cfb 100644 --- a/fs/cifs/dns_resolve.c +++ b/fs/cifs/dns_resolve.c | |||
| @@ -77,7 +77,7 @@ dns_resolve_server_name_to_ip(const char *unc, char **ip_addr) | |||
| 77 | goto name_is_IP_address; | 77 | goto name_is_IP_address; |
| 78 | 78 | ||
| 79 | /* Perform the upcall */ | 79 | /* Perform the upcall */ |
| 80 | rc = dns_query(NULL, hostname, len, NULL, ip_addr, NULL); | 80 | rc = dns_query(NULL, hostname, len, NULL, ip_addr, NULL, false); |
| 81 | if (rc < 0) | 81 | if (rc < 0) |
| 82 | cifs_dbg(FYI, "%s: unable to resolve: %*.*s\n", | 82 | cifs_dbg(FYI, "%s: unable to resolve: %*.*s\n", |
| 83 | __func__, len, len, hostname); | 83 | __func__, len, len, hostname); |
diff --git a/fs/nfs/dns_resolve.c b/fs/nfs/dns_resolve.c index a7d3df85736d..e6a700f01452 100644 --- a/fs/nfs/dns_resolve.c +++ b/fs/nfs/dns_resolve.c | |||
| @@ -22,7 +22,7 @@ ssize_t nfs_dns_resolve_name(struct net *net, char *name, size_t namelen, | |||
| 22 | char *ip_addr = NULL; | 22 | char *ip_addr = NULL; |
| 23 | int ip_len; | 23 | int ip_len; |
| 24 | 24 | ||
| 25 | ip_len = dns_query(NULL, name, namelen, NULL, &ip_addr, NULL); | 25 | ip_len = dns_query(NULL, name, namelen, NULL, &ip_addr, NULL, false); |
| 26 | if (ip_len > 0) | 26 | if (ip_len > 0) |
| 27 | ret = rpc_pton(net, ip_addr, ip_len, sa, salen); | 27 | ret = rpc_pton(net, ip_addr, ip_len, sa, salen); |
| 28 | else | 28 | else |
diff --git a/include/linux/dns_resolver.h b/include/linux/dns_resolver.h index 34a744a1bafc..f2b3ae22e6b7 100644 --- a/include/linux/dns_resolver.h +++ b/include/linux/dns_resolver.h | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <uapi/linux/dns_resolver.h> | 27 | #include <uapi/linux/dns_resolver.h> |
| 28 | 28 | ||
| 29 | extern int dns_query(const char *type, const char *name, size_t namelen, | 29 | extern int dns_query(const char *type, const char *name, size_t namelen, |
| 30 | const char *options, char **_result, time64_t *_expiry); | 30 | const char *options, char **_result, time64_t *_expiry, |
| 31 | bool invalidate); | ||
| 31 | 32 | ||
| 32 | #endif /* _LINUX_DNS_RESOLVER_H */ | 33 | #endif /* _LINUX_DNS_RESOLVER_H */ |
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index 3083988ce729..579d6a1ac7fe 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c | |||
| @@ -1889,7 +1889,7 @@ static int ceph_dns_resolve_name(const char *name, size_t namelen, | |||
| 1889 | return -EINVAL; | 1889 | return -EINVAL; |
| 1890 | 1890 | ||
| 1891 | /* do dns_resolve upcall */ | 1891 | /* do dns_resolve upcall */ |
| 1892 | ip_len = dns_query(NULL, name, end - name, NULL, &ip_addr, NULL); | 1892 | ip_len = dns_query(NULL, name, end - name, NULL, &ip_addr, NULL, false); |
| 1893 | if (ip_len > 0) | 1893 | if (ip_len > 0) |
| 1894 | ret = ceph_pton(ip_addr, ip_len, ss, -1, NULL); | 1894 | ret = ceph_pton(ip_addr, ip_len, ss, -1, NULL); |
| 1895 | else | 1895 | else |
diff --git a/net/dns_resolver/dns_query.c b/net/dns_resolver/dns_query.c index 19aa32fc1802..2d260432b3be 100644 --- a/net/dns_resolver/dns_query.c +++ b/net/dns_resolver/dns_query.c | |||
| @@ -54,6 +54,7 @@ | |||
| 54 | * @options: Request options (or NULL if no options) | 54 | * @options: Request options (or NULL if no options) |
| 55 | * @_result: Where to place the returned data (or NULL) | 55 | * @_result: Where to place the returned data (or NULL) |
| 56 | * @_expiry: Where to store the result expiry time (or NULL) | 56 | * @_expiry: Where to store the result expiry time (or NULL) |
| 57 | * @invalidate: Always invalidate the key after use | ||
| 57 | * | 58 | * |
| 58 | * The data will be returned in the pointer at *result, if provided, and the | 59 | * The data will be returned in the pointer at *result, if provided, and the |
| 59 | * caller is responsible for freeing it. | 60 | * caller is responsible for freeing it. |
| @@ -69,7 +70,8 @@ | |||
| 69 | * Returns the size of the result on success, -ve error code otherwise. | 70 | * Returns the size of the result on success, -ve error code otherwise. |
| 70 | */ | 71 | */ |
| 71 | int dns_query(const char *type, const char *name, size_t namelen, | 72 | int dns_query(const char *type, const char *name, size_t namelen, |
| 72 | const char *options, char **_result, time64_t *_expiry) | 73 | const char *options, char **_result, time64_t *_expiry, |
| 74 | bool invalidate) | ||
| 73 | { | 75 | { |
| 74 | struct key *rkey; | 76 | struct key *rkey; |
| 75 | struct user_key_payload *upayload; | 77 | struct user_key_payload *upayload; |
| @@ -157,6 +159,8 @@ int dns_query(const char *type, const char *name, size_t namelen, | |||
| 157 | ret = len; | 159 | ret = len; |
| 158 | put: | 160 | put: |
| 159 | up_read(&rkey->sem); | 161 | up_read(&rkey->sem); |
| 162 | if (invalidate) | ||
| 163 | key_invalidate(rkey); | ||
| 160 | key_put(rkey); | 164 | key_put(rkey); |
| 161 | out: | 165 | out: |
| 162 | kleave(" = %d", ret); | 166 | kleave(" = %d", ret); |
