diff options
Diffstat (limited to 'net/sunrpc')
-rw-r--r-- | net/sunrpc/auth_gss/svcauth_gss.c | 144 | ||||
-rw-r--r-- | net/sunrpc/cache.c | 12 | ||||
-rw-r--r-- | net/sunrpc/stats.c | 5 | ||||
-rw-r--r-- | net/sunrpc/svc.c | 40 | ||||
-rw-r--r-- | net/sunrpc/svcsock.c | 5 | ||||
-rw-r--r-- | net/sunrpc/xprtsock.c | 4 |
6 files changed, 117 insertions, 93 deletions
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 7da7050f06c3..73940df6c460 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c | |||
@@ -631,7 +631,8 @@ svc_safe_putnetobj(struct kvec *resv, struct xdr_netobj *o) | |||
631 | return 0; | 631 | return 0; |
632 | } | 632 | } |
633 | 633 | ||
634 | /* Verify the checksum on the header and return SVC_OK on success. | 634 | /* |
635 | * Verify the checksum on the header and return SVC_OK on success. | ||
635 | * Otherwise, return SVC_DROP (in the case of a bad sequence number) | 636 | * Otherwise, return SVC_DROP (in the case of a bad sequence number) |
636 | * or return SVC_DENIED and indicate error in authp. | 637 | * or return SVC_DENIED and indicate error in authp. |
637 | */ | 638 | */ |
@@ -961,6 +962,78 @@ gss_write_init_verf(struct svc_rqst *rqstp, struct rsi *rsip) | |||
961 | } | 962 | } |
962 | 963 | ||
963 | /* | 964 | /* |
965 | * Having read the cred already and found we're in the context | ||
966 | * initiation case, read the verifier and initiate (or check the results | ||
967 | * of) upcalls to userspace for help with context initiation. If | ||
968 | * the upcall results are available, write the verifier and result. | ||
969 | * Otherwise, drop the request pending an answer to the upcall. | ||
970 | */ | ||
971 | static int svcauth_gss_handle_init(struct svc_rqst *rqstp, | ||
972 | struct rpc_gss_wire_cred *gc, __be32 *authp) | ||
973 | { | ||
974 | struct kvec *argv = &rqstp->rq_arg.head[0]; | ||
975 | struct kvec *resv = &rqstp->rq_res.head[0]; | ||
976 | struct xdr_netobj tmpobj; | ||
977 | struct rsi *rsip, rsikey; | ||
978 | |||
979 | /* Read the verifier; should be NULL: */ | ||
980 | *authp = rpc_autherr_badverf; | ||
981 | if (argv->iov_len < 2 * 4) | ||
982 | return SVC_DENIED; | ||
983 | if (svc_getnl(argv) != RPC_AUTH_NULL) | ||
984 | return SVC_DENIED; | ||
985 | if (svc_getnl(argv) != 0) | ||
986 | return SVC_DENIED; | ||
987 | |||
988 | /* Martial context handle and token for upcall: */ | ||
989 | *authp = rpc_autherr_badcred; | ||
990 | if (gc->gc_proc == RPC_GSS_PROC_INIT && gc->gc_ctx.len != 0) | ||
991 | return SVC_DENIED; | ||
992 | memset(&rsikey, 0, sizeof(rsikey)); | ||
993 | if (dup_netobj(&rsikey.in_handle, &gc->gc_ctx)) | ||
994 | return SVC_DROP; | ||
995 | *authp = rpc_autherr_badverf; | ||
996 | if (svc_safe_getnetobj(argv, &tmpobj)) { | ||
997 | kfree(rsikey.in_handle.data); | ||
998 | return SVC_DENIED; | ||
999 | } | ||
1000 | if (dup_netobj(&rsikey.in_token, &tmpobj)) { | ||
1001 | kfree(rsikey.in_handle.data); | ||
1002 | return SVC_DROP; | ||
1003 | } | ||
1004 | |||
1005 | /* Perform upcall, or find upcall result: */ | ||
1006 | rsip = rsi_lookup(&rsikey); | ||
1007 | rsi_free(&rsikey); | ||
1008 | if (!rsip) | ||
1009 | return SVC_DROP; | ||
1010 | switch (cache_check(&rsi_cache, &rsip->h, &rqstp->rq_chandle)) { | ||
1011 | case -EAGAIN: | ||
1012 | case -ETIMEDOUT: | ||
1013 | case -ENOENT: | ||
1014 | /* No upcall result: */ | ||
1015 | return SVC_DROP; | ||
1016 | case 0: | ||
1017 | /* Got an answer to the upcall; use it: */ | ||
1018 | if (gss_write_init_verf(rqstp, rsip)) | ||
1019 | return SVC_DROP; | ||
1020 | if (resv->iov_len + 4 > PAGE_SIZE) | ||
1021 | return SVC_DROP; | ||
1022 | svc_putnl(resv, RPC_SUCCESS); | ||
1023 | if (svc_safe_putnetobj(resv, &rsip->out_handle)) | ||
1024 | return SVC_DROP; | ||
1025 | if (resv->iov_len + 3 * 4 > PAGE_SIZE) | ||
1026 | return SVC_DROP; | ||
1027 | svc_putnl(resv, rsip->major_status); | ||
1028 | svc_putnl(resv, rsip->minor_status); | ||
1029 | svc_putnl(resv, GSS_SEQ_WIN); | ||
1030 | if (svc_safe_putnetobj(resv, &rsip->out_token)) | ||
1031 | return SVC_DROP; | ||
1032 | } | ||
1033 | return SVC_COMPLETE; | ||
1034 | } | ||
1035 | |||
1036 | /* | ||
964 | * Accept an rpcsec packet. | 1037 | * Accept an rpcsec packet. |
965 | * If context establishment, punt to user space | 1038 | * If context establishment, punt to user space |
966 | * If data exchange, verify/decrypt | 1039 | * If data exchange, verify/decrypt |
@@ -974,11 +1047,9 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp) | |||
974 | struct kvec *argv = &rqstp->rq_arg.head[0]; | 1047 | struct kvec *argv = &rqstp->rq_arg.head[0]; |
975 | struct kvec *resv = &rqstp->rq_res.head[0]; | 1048 | struct kvec *resv = &rqstp->rq_res.head[0]; |
976 | u32 crlen; | 1049 | u32 crlen; |
977 | struct xdr_netobj tmpobj; | ||
978 | struct gss_svc_data *svcdata = rqstp->rq_auth_data; | 1050 | struct gss_svc_data *svcdata = rqstp->rq_auth_data; |
979 | struct rpc_gss_wire_cred *gc; | 1051 | struct rpc_gss_wire_cred *gc; |
980 | struct rsc *rsci = NULL; | 1052 | struct rsc *rsci = NULL; |
981 | struct rsi *rsip, rsikey; | ||
982 | __be32 *rpcstart; | 1053 | __be32 *rpcstart; |
983 | __be32 *reject_stat = resv->iov_base + resv->iov_len; | 1054 | __be32 *reject_stat = resv->iov_base + resv->iov_len; |
984 | int ret; | 1055 | int ret; |
@@ -1023,30 +1094,14 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp) | |||
1023 | if ((gc->gc_proc != RPC_GSS_PROC_DATA) && (rqstp->rq_proc != 0)) | 1094 | if ((gc->gc_proc != RPC_GSS_PROC_DATA) && (rqstp->rq_proc != 0)) |
1024 | goto auth_err; | 1095 | goto auth_err; |
1025 | 1096 | ||
1026 | /* | ||
1027 | * We've successfully parsed the credential. Let's check out the | ||
1028 | * verifier. An AUTH_NULL verifier is allowed (and required) for | ||
1029 | * INIT and CONTINUE_INIT requests. AUTH_RPCSEC_GSS is required for | ||
1030 | * PROC_DATA and PROC_DESTROY. | ||
1031 | * | ||
1032 | * AUTH_NULL verifier is 0 (AUTH_NULL), 0 (length). | ||
1033 | * AUTH_RPCSEC_GSS verifier is: | ||
1034 | * 6 (AUTH_RPCSEC_GSS), length, checksum. | ||
1035 | * checksum is calculated over rpcheader from xid up to here. | ||
1036 | */ | ||
1037 | *authp = rpc_autherr_badverf; | 1097 | *authp = rpc_autherr_badverf; |
1038 | switch (gc->gc_proc) { | 1098 | switch (gc->gc_proc) { |
1039 | case RPC_GSS_PROC_INIT: | 1099 | case RPC_GSS_PROC_INIT: |
1040 | case RPC_GSS_PROC_CONTINUE_INIT: | 1100 | case RPC_GSS_PROC_CONTINUE_INIT: |
1041 | if (argv->iov_len < 2 * 4) | 1101 | return svcauth_gss_handle_init(rqstp, gc, authp); |
1042 | goto auth_err; | ||
1043 | if (svc_getnl(argv) != RPC_AUTH_NULL) | ||
1044 | goto auth_err; | ||
1045 | if (svc_getnl(argv) != 0) | ||
1046 | goto auth_err; | ||
1047 | break; | ||
1048 | case RPC_GSS_PROC_DATA: | 1102 | case RPC_GSS_PROC_DATA: |
1049 | case RPC_GSS_PROC_DESTROY: | 1103 | case RPC_GSS_PROC_DESTROY: |
1104 | /* Look up the context, and check the verifier: */ | ||
1050 | *authp = rpcsec_gsserr_credproblem; | 1105 | *authp = rpcsec_gsserr_credproblem; |
1051 | rsci = gss_svc_searchbyctx(&gc->gc_ctx); | 1106 | rsci = gss_svc_searchbyctx(&gc->gc_ctx); |
1052 | if (!rsci) | 1107 | if (!rsci) |
@@ -1067,51 +1122,6 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp) | |||
1067 | 1122 | ||
1068 | /* now act upon the command: */ | 1123 | /* now act upon the command: */ |
1069 | switch (gc->gc_proc) { | 1124 | switch (gc->gc_proc) { |
1070 | case RPC_GSS_PROC_INIT: | ||
1071 | case RPC_GSS_PROC_CONTINUE_INIT: | ||
1072 | *authp = rpc_autherr_badcred; | ||
1073 | if (gc->gc_proc == RPC_GSS_PROC_INIT && gc->gc_ctx.len != 0) | ||
1074 | goto auth_err; | ||
1075 | memset(&rsikey, 0, sizeof(rsikey)); | ||
1076 | if (dup_netobj(&rsikey.in_handle, &gc->gc_ctx)) | ||
1077 | goto drop; | ||
1078 | *authp = rpc_autherr_badverf; | ||
1079 | if (svc_safe_getnetobj(argv, &tmpobj)) { | ||
1080 | kfree(rsikey.in_handle.data); | ||
1081 | goto auth_err; | ||
1082 | } | ||
1083 | if (dup_netobj(&rsikey.in_token, &tmpobj)) { | ||
1084 | kfree(rsikey.in_handle.data); | ||
1085 | goto drop; | ||
1086 | } | ||
1087 | |||
1088 | rsip = rsi_lookup(&rsikey); | ||
1089 | rsi_free(&rsikey); | ||
1090 | if (!rsip) { | ||
1091 | goto drop; | ||
1092 | } | ||
1093 | switch(cache_check(&rsi_cache, &rsip->h, &rqstp->rq_chandle)) { | ||
1094 | case -EAGAIN: | ||
1095 | case -ETIMEDOUT: | ||
1096 | case -ENOENT: | ||
1097 | goto drop; | ||
1098 | case 0: | ||
1099 | if (gss_write_init_verf(rqstp, rsip)) | ||
1100 | goto drop; | ||
1101 | if (resv->iov_len + 4 > PAGE_SIZE) | ||
1102 | goto drop; | ||
1103 | svc_putnl(resv, RPC_SUCCESS); | ||
1104 | if (svc_safe_putnetobj(resv, &rsip->out_handle)) | ||
1105 | goto drop; | ||
1106 | if (resv->iov_len + 3 * 4 > PAGE_SIZE) | ||
1107 | goto drop; | ||
1108 | svc_putnl(resv, rsip->major_status); | ||
1109 | svc_putnl(resv, rsip->minor_status); | ||
1110 | svc_putnl(resv, GSS_SEQ_WIN); | ||
1111 | if (svc_safe_putnetobj(resv, &rsip->out_token)) | ||
1112 | goto drop; | ||
1113 | } | ||
1114 | goto complete; | ||
1115 | case RPC_GSS_PROC_DESTROY: | 1125 | case RPC_GSS_PROC_DESTROY: |
1116 | if (gss_write_verf(rqstp, rsci->mechctx, gc->gc_seq)) | 1126 | if (gss_write_verf(rqstp, rsci->mechctx, gc->gc_seq)) |
1117 | goto auth_err; | 1127 | goto auth_err; |
@@ -1158,7 +1168,7 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp) | |||
1158 | goto out; | 1168 | goto out; |
1159 | } | 1169 | } |
1160 | auth_err: | 1170 | auth_err: |
1161 | /* Restore write pointer to original value: */ | 1171 | /* Restore write pointer to its original value: */ |
1162 | xdr_ressize_check(rqstp, reject_stat); | 1172 | xdr_ressize_check(rqstp, reject_stat); |
1163 | ret = SVC_DENIED; | 1173 | ret = SVC_DENIED; |
1164 | goto out; | 1174 | goto out; |
diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c index ebe344f34d1a..8e05557414ce 100644 --- a/net/sunrpc/cache.c +++ b/net/sunrpc/cache.c | |||
@@ -1218,23 +1218,15 @@ static const struct seq_operations cache_content_op = { | |||
1218 | 1218 | ||
1219 | static int content_open(struct inode *inode, struct file *file) | 1219 | static int content_open(struct inode *inode, struct file *file) |
1220 | { | 1220 | { |
1221 | int res; | ||
1222 | struct handle *han; | 1221 | struct handle *han; |
1223 | struct cache_detail *cd = PDE(inode)->data; | 1222 | struct cache_detail *cd = PDE(inode)->data; |
1224 | 1223 | ||
1225 | han = kmalloc(sizeof(*han), GFP_KERNEL); | 1224 | han = __seq_open_private(file, &cache_content_op, sizeof(*han)); |
1226 | if (han == NULL) | 1225 | if (han == NULL) |
1227 | return -ENOMEM; | 1226 | return -ENOMEM; |
1228 | 1227 | ||
1229 | han->cd = cd; | 1228 | han->cd = cd; |
1230 | 1229 | return 0; | |
1231 | res = seq_open(file, &cache_content_op); | ||
1232 | if (res) | ||
1233 | kfree(han); | ||
1234 | else | ||
1235 | ((struct seq_file *)file->private_data)->private = han; | ||
1236 | |||
1237 | return res; | ||
1238 | } | 1230 | } |
1239 | 1231 | ||
1240 | static const struct file_operations content_file_operations = { | 1232 | static const struct file_operations content_file_operations = { |
diff --git a/net/sunrpc/stats.c b/net/sunrpc/stats.c index 74ba7d443dfc..4d4f3738b688 100644 --- a/net/sunrpc/stats.c +++ b/net/sunrpc/stats.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/sunrpc/clnt.h> | 21 | #include <linux/sunrpc/clnt.h> |
22 | #include <linux/sunrpc/svcsock.h> | 22 | #include <linux/sunrpc/svcsock.h> |
23 | #include <linux/sunrpc/metrics.h> | 23 | #include <linux/sunrpc/metrics.h> |
24 | #include <net/net_namespace.h> | ||
24 | 25 | ||
25 | #define RPCDBG_FACILITY RPCDBG_MISC | 26 | #define RPCDBG_FACILITY RPCDBG_MISC |
26 | 27 | ||
@@ -265,7 +266,7 @@ rpc_proc_init(void) | |||
265 | dprintk("RPC: registering /proc/net/rpc\n"); | 266 | dprintk("RPC: registering /proc/net/rpc\n"); |
266 | if (!proc_net_rpc) { | 267 | if (!proc_net_rpc) { |
267 | struct proc_dir_entry *ent; | 268 | struct proc_dir_entry *ent; |
268 | ent = proc_mkdir("rpc", proc_net); | 269 | ent = proc_mkdir("rpc", init_net.proc_net); |
269 | if (ent) { | 270 | if (ent) { |
270 | ent->owner = THIS_MODULE; | 271 | ent->owner = THIS_MODULE; |
271 | proc_net_rpc = ent; | 272 | proc_net_rpc = ent; |
@@ -279,7 +280,7 @@ rpc_proc_exit(void) | |||
279 | dprintk("RPC: unregistering /proc/net/rpc\n"); | 280 | dprintk("RPC: unregistering /proc/net/rpc\n"); |
280 | if (proc_net_rpc) { | 281 | if (proc_net_rpc) { |
281 | proc_net_rpc = NULL; | 282 | proc_net_rpc = NULL; |
282 | remove_proc_entry("net/rpc", NULL); | 283 | remove_proc_entry("rpc", init_net.proc_net); |
283 | } | 284 | } |
284 | } | 285 | } |
285 | 286 | ||
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 55ea6df069de..a4a6bf7deaa4 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c | |||
@@ -777,6 +777,30 @@ svc_register(struct svc_serv *serv, int proto, unsigned short port) | |||
777 | } | 777 | } |
778 | 778 | ||
779 | /* | 779 | /* |
780 | * Printk the given error with the address of the client that caused it. | ||
781 | */ | ||
782 | static int | ||
783 | __attribute__ ((format (printf, 2, 3))) | ||
784 | svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) | ||
785 | { | ||
786 | va_list args; | ||
787 | int r; | ||
788 | char buf[RPC_MAX_ADDRBUFLEN]; | ||
789 | |||
790 | if (!net_ratelimit()) | ||
791 | return 0; | ||
792 | |||
793 | printk(KERN_WARNING "svc: %s: ", | ||
794 | svc_print_addr(rqstp, buf, sizeof(buf))); | ||
795 | |||
796 | va_start(args, fmt); | ||
797 | r = vprintk(fmt, args); | ||
798 | va_end(args); | ||
799 | |||
800 | return r; | ||
801 | } | ||
802 | |||
803 | /* | ||
780 | * Process the RPC request. | 804 | * Process the RPC request. |
781 | */ | 805 | */ |
782 | int | 806 | int |
@@ -963,14 +987,13 @@ svc_process(struct svc_rqst *rqstp) | |||
963 | return 0; | 987 | return 0; |
964 | 988 | ||
965 | err_short_len: | 989 | err_short_len: |
966 | if (net_ratelimit()) | 990 | svc_printk(rqstp, "short len %Zd, dropping request\n", |
967 | printk("svc: short len %Zd, dropping request\n", argv->iov_len); | 991 | argv->iov_len); |
968 | 992 | ||
969 | goto dropit; /* drop request */ | 993 | goto dropit; /* drop request */ |
970 | 994 | ||
971 | err_bad_dir: | 995 | err_bad_dir: |
972 | if (net_ratelimit()) | 996 | svc_printk(rqstp, "bad direction %d, dropping request\n", dir); |
973 | printk("svc: bad direction %d, dropping request\n", dir); | ||
974 | 997 | ||
975 | serv->sv_stats->rpcbadfmt++; | 998 | serv->sv_stats->rpcbadfmt++; |
976 | goto dropit; /* drop request */ | 999 | goto dropit; /* drop request */ |
@@ -1000,8 +1023,7 @@ err_bad_prog: | |||
1000 | goto sendit; | 1023 | goto sendit; |
1001 | 1024 | ||
1002 | err_bad_vers: | 1025 | err_bad_vers: |
1003 | if (net_ratelimit()) | 1026 | svc_printk(rqstp, "unknown version (%d for prog %d, %s)\n", |
1004 | printk("svc: unknown version (%d for prog %d, %s)\n", | ||
1005 | vers, prog, progp->pg_name); | 1027 | vers, prog, progp->pg_name); |
1006 | 1028 | ||
1007 | serv->sv_stats->rpcbadfmt++; | 1029 | serv->sv_stats->rpcbadfmt++; |
@@ -1011,16 +1033,14 @@ err_bad_vers: | |||
1011 | goto sendit; | 1033 | goto sendit; |
1012 | 1034 | ||
1013 | err_bad_proc: | 1035 | err_bad_proc: |
1014 | if (net_ratelimit()) | 1036 | svc_printk(rqstp, "unknown procedure (%d)\n", proc); |
1015 | printk("svc: unknown procedure (%d)\n", proc); | ||
1016 | 1037 | ||
1017 | serv->sv_stats->rpcbadfmt++; | 1038 | serv->sv_stats->rpcbadfmt++; |
1018 | svc_putnl(resv, RPC_PROC_UNAVAIL); | 1039 | svc_putnl(resv, RPC_PROC_UNAVAIL); |
1019 | goto sendit; | 1040 | goto sendit; |
1020 | 1041 | ||
1021 | err_garbage: | 1042 | err_garbage: |
1022 | if (net_ratelimit()) | 1043 | svc_printk(rqstp, "failed to decode args\n"); |
1023 | printk("svc: failed to decode args\n"); | ||
1024 | 1044 | ||
1025 | rpc_stat = rpc_garbage_args; | 1045 | rpc_stat = rpc_garbage_args; |
1026 | err_bad: | 1046 | err_bad: |
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 036ab520df21..c75bffeb89eb 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
@@ -19,6 +19,7 @@ | |||
19 | * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de> | 19 | * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de> |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <linux/kernel.h> | ||
22 | #include <linux/sched.h> | 23 | #include <linux/sched.h> |
23 | #include <linux/errno.h> | 24 | #include <linux/errno.h> |
24 | #include <linux/fcntl.h> | 25 | #include <linux/fcntl.h> |
@@ -103,7 +104,7 @@ static struct lock_class_key svc_slock_key[2]; | |||
103 | static inline void svc_reclassify_socket(struct socket *sock) | 104 | static inline void svc_reclassify_socket(struct socket *sock) |
104 | { | 105 | { |
105 | struct sock *sk = sock->sk; | 106 | struct sock *sk = sock->sk; |
106 | BUG_ON(sk->sk_lock.owner != NULL); | 107 | BUG_ON(sock_owned_by_user(sk)); |
107 | switch (sk->sk_family) { | 108 | switch (sk->sk_family) { |
108 | case AF_INET: | 109 | case AF_INET: |
109 | sock_lock_init_class_and_name(sk, "slock-AF_INET-NFSD", | 110 | sock_lock_init_class_and_name(sk, "slock-AF_INET-NFSD", |
@@ -877,7 +878,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp) | |||
877 | } else { | 878 | } else { |
878 | rqstp->rq_arg.page_len = len - rqstp->rq_arg.head[0].iov_len; | 879 | rqstp->rq_arg.page_len = len - rqstp->rq_arg.head[0].iov_len; |
879 | rqstp->rq_respages = rqstp->rq_pages + 1 + | 880 | rqstp->rq_respages = rqstp->rq_pages + 1 + |
880 | (rqstp->rq_arg.page_len + PAGE_SIZE - 1)/ PAGE_SIZE; | 881 | DIV_ROUND_UP(rqstp->rq_arg.page_len, PAGE_SIZE); |
881 | } | 882 | } |
882 | 883 | ||
883 | if (serv->sv_stats) | 884 | if (serv->sv_stats) |
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 6f32cc57f429..02298f529dad 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -1350,7 +1350,7 @@ static inline void xs_reclassify_socket4(struct socket *sock) | |||
1350 | { | 1350 | { |
1351 | struct sock *sk = sock->sk; | 1351 | struct sock *sk = sock->sk; |
1352 | 1352 | ||
1353 | BUG_ON(sk->sk_lock.owner != NULL); | 1353 | BUG_ON(sock_owned_by_user(sk)); |
1354 | sock_lock_init_class_and_name(sk, "slock-AF_INET-RPC", | 1354 | sock_lock_init_class_and_name(sk, "slock-AF_INET-RPC", |
1355 | &xs_slock_key[0], "sk_lock-AF_INET-RPC", &xs_key[0]); | 1355 | &xs_slock_key[0], "sk_lock-AF_INET-RPC", &xs_key[0]); |
1356 | } | 1356 | } |
@@ -1359,7 +1359,7 @@ static inline void xs_reclassify_socket6(struct socket *sock) | |||
1359 | { | 1359 | { |
1360 | struct sock *sk = sock->sk; | 1360 | struct sock *sk = sock->sk; |
1361 | 1361 | ||
1362 | BUG_ON(sk->sk_lock.owner != NULL); | 1362 | BUG_ON(sock_owned_by_user(sk)); |
1363 | sock_lock_init_class_and_name(sk, "slock-AF_INET6-RPC", | 1363 | sock_lock_init_class_and_name(sk, "slock-AF_INET6-RPC", |
1364 | &xs_slock_key[1], "sk_lock-AF_INET6-RPC", &xs_key[1]); | 1364 | &xs_slock_key[1], "sk_lock-AF_INET6-RPC", &xs_key[1]); |
1365 | } | 1365 | } |