hc
2024-01-04 1543e317f1da31b75942316931e8f491a8920811
kernel/fs/lockd/svc.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * linux/fs/lockd/svc.c
34 *
....@@ -188,28 +189,31 @@
188189
189190 static int create_lockd_listener(struct svc_serv *serv, const char *name,
190191 struct net *net, const int family,
191
- const unsigned short port)
192
+ const unsigned short port,
193
+ const struct cred *cred)
192194 {
193195 struct svc_xprt *xprt;
194196
195197 xprt = svc_find_xprt(serv, name, net, family, 0);
196198 if (xprt == NULL)
197199 return svc_create_xprt(serv, name, net, family, port,
198
- SVC_SOCK_DEFAULTS);
200
+ SVC_SOCK_DEFAULTS, cred);
199201 svc_xprt_put(xprt);
200202 return 0;
201203 }
202204
203205 static int create_lockd_family(struct svc_serv *serv, struct net *net,
204
- const int family)
206
+ const int family, const struct cred *cred)
205207 {
206208 int err;
207209
208
- err = create_lockd_listener(serv, "udp", net, family, nlm_udpport);
210
+ err = create_lockd_listener(serv, "udp", net, family, nlm_udpport,
211
+ cred);
209212 if (err < 0)
210213 return err;
211214
212
- return create_lockd_listener(serv, "tcp", net, family, nlm_tcpport);
215
+ return create_lockd_listener(serv, "tcp", net, family, nlm_tcpport,
216
+ cred);
213217 }
214218
215219 /*
....@@ -222,16 +226,17 @@
222226 * Returns zero if all listeners are available; otherwise a
223227 * negative errno value is returned.
224228 */
225
-static int make_socks(struct svc_serv *serv, struct net *net)
229
+static int make_socks(struct svc_serv *serv, struct net *net,
230
+ const struct cred *cred)
226231 {
227232 static int warned;
228233 int err;
229234
230
- err = create_lockd_family(serv, net, PF_INET);
235
+ err = create_lockd_family(serv, net, PF_INET, cred);
231236 if (err < 0)
232237 goto out_err;
233238
234
- err = create_lockd_family(serv, net, PF_INET6);
239
+ err = create_lockd_family(serv, net, PF_INET6, cred);
235240 if (err < 0 && err != -EAFNOSUPPORT)
236241 goto out_err;
237242
....@@ -246,7 +251,8 @@
246251 return err;
247252 }
248253
249
-static int lockd_up_net(struct svc_serv *serv, struct net *net)
254
+static int lockd_up_net(struct svc_serv *serv, struct net *net,
255
+ const struct cred *cred)
250256 {
251257 struct lockd_net *ln = net_generic(net, lockd_net_id);
252258 int error;
....@@ -258,7 +264,7 @@
258264 if (error)
259265 goto err_bind;
260266
261
- error = make_socks(serv, net);
267
+ error = make_socks(serv, net, cred);
262268 if (error < 0)
263269 goto err_bind;
264270 set_grace_period(net);
....@@ -461,7 +467,7 @@
461467 /*
462468 * Bring up the lockd process if it's not already up.
463469 */
464
-int lockd_up(struct net *net)
470
+int lockd_up(struct net *net, const struct cred *cred)
465471 {
466472 struct svc_serv *serv;
467473 int error;
....@@ -474,7 +480,7 @@
474480 goto err_create;
475481 }
476482
477
- error = lockd_up_net(serv, net);
483
+ error = lockd_up_net(serv, net, cred);
478484 if (error < 0) {
479485 lockd_unregister_notifiers();
480486 goto err_put;
....@@ -807,5 +813,7 @@
807813 .pg_name = "lockd", /* service name */
808814 .pg_class = "nfsd", /* share authentication with nfsd */
809815 .pg_stats = &nlmsvc_stats, /* stats table */
810
- .pg_authenticate = &lockd_authenticate /* export authentication */
816
+ .pg_authenticate = &lockd_authenticate, /* export authentication */
817
+ .pg_init_request = svc_generic_init_request,
818
+ .pg_rpcbind_set = svc_generic_rpcbind_set,
811819 };