.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /***************************************************************************** |
---|
2 | 3 | * Linux PPP over L2TP (PPPoX/PPPoL2TP) Sockets |
---|
3 | 4 | * |
---|
.. | .. |
---|
11 | 12 | * Based on original work by Martijn van Oosterhout <kleptog@svana.org> |
---|
12 | 13 | * |
---|
13 | 14 | * License: |
---|
14 | | - * This program is free software; you can redistribute it and/or |
---|
15 | | - * modify it under the terms of the GNU General Public License |
---|
16 | | - * as published by the Free Software Foundation; either version |
---|
17 | | - * 2 of the License, or (at your option) any later version. |
---|
18 | | - * |
---|
19 | 15 | */ |
---|
20 | 16 | |
---|
21 | 17 | /* This driver handles only L2TP data frames; control frames are handled by a |
---|
.. | .. |
---|
121 | 117 | int owner; /* pid that opened the socket */ |
---|
122 | 118 | |
---|
123 | 119 | struct mutex sk_lock; /* Protects .sk */ |
---|
124 | | - struct sock __rcu *sk; /* Pointer to the session |
---|
125 | | - * PPPoX socket */ |
---|
| 120 | + struct sock __rcu *sk; /* Pointer to the session PPPoX socket */ |
---|
126 | 121 | struct sock *__sk; /* Copy of .sk, for cleanup */ |
---|
127 | 122 | struct rcu_head rcu; /* For asynchronous release */ |
---|
128 | 123 | }; |
---|
.. | .. |
---|
159 | 154 | { |
---|
160 | 155 | struct l2tp_session *session; |
---|
161 | 156 | |
---|
162 | | - if (sk == NULL) |
---|
| 157 | + if (!sk) |
---|
163 | 158 | return NULL; |
---|
164 | 159 | |
---|
165 | 160 | sock_hold(sk); |
---|
166 | 161 | session = (struct l2tp_session *)(sk->sk_user_data); |
---|
167 | | - if (session == NULL) { |
---|
| 162 | + if (!session) { |
---|
168 | 163 | sock_put(sk); |
---|
169 | 164 | goto out; |
---|
170 | 165 | } |
---|
171 | | - |
---|
172 | | - BUG_ON(session->magic != L2TP_SESSION_MAGIC); |
---|
| 166 | + if (WARN_ON(session->magic != L2TP_SESSION_MAGIC)) { |
---|
| 167 | + session = NULL; |
---|
| 168 | + sock_put(sk); |
---|
| 169 | + goto out; |
---|
| 170 | + } |
---|
173 | 171 | |
---|
174 | 172 | out: |
---|
175 | 173 | return session; |
---|
.. | .. |
---|
222 | 220 | */ |
---|
223 | 221 | rcu_read_lock(); |
---|
224 | 222 | sk = rcu_dereference(ps->sk); |
---|
225 | | - if (sk == NULL) |
---|
| 223 | + if (!sk) |
---|
226 | 224 | goto no_sock; |
---|
227 | 225 | |
---|
228 | 226 | /* If the first two bytes are 0xFF03, consider that it is the PPP's |
---|
.. | .. |
---|
239 | 237 | if (sk->sk_state & PPPOX_BOUND) { |
---|
240 | 238 | struct pppox_sock *po; |
---|
241 | 239 | |
---|
242 | | - l2tp_dbg(session, L2TP_MSG_DATA, |
---|
243 | | - "%s: recv %d byte data frame, passing to ppp\n", |
---|
244 | | - session->name, data_len); |
---|
245 | | - |
---|
246 | 240 | po = pppox_sk(sk); |
---|
247 | 241 | ppp_input(&po->chan, skb); |
---|
248 | 242 | } else { |
---|
249 | | - l2tp_dbg(session, L2TP_MSG_DATA, |
---|
250 | | - "%s: recv %d byte data frame, passing to L2TP socket\n", |
---|
251 | | - session->name, data_len); |
---|
252 | | - |
---|
253 | 243 | if (sock_queue_rcv_skb(sk, skb) < 0) { |
---|
254 | 244 | atomic_long_inc(&session->stats.rx_errors); |
---|
255 | 245 | kfree_skb(skb); |
---|
.. | .. |
---|
261 | 251 | |
---|
262 | 252 | no_sock: |
---|
263 | 253 | rcu_read_unlock(); |
---|
264 | | - l2tp_info(session, L2TP_MSG_DATA, "%s: no socket\n", session->name); |
---|
| 254 | + pr_warn_ratelimited("%s: no socket in recv\n", session->name); |
---|
265 | 255 | kfree_skb(skb); |
---|
266 | 256 | } |
---|
267 | 257 | |
---|
.. | .. |
---|
290 | 280 | /* Get session and tunnel contexts */ |
---|
291 | 281 | error = -EBADF; |
---|
292 | 282 | session = pppol2tp_sock_to_session(sk); |
---|
293 | | - if (session == NULL) |
---|
| 283 | + if (!session) |
---|
294 | 284 | goto error; |
---|
295 | 285 | |
---|
296 | 286 | tunnel = session->tunnel; |
---|
.. | .. |
---|
326 | 316 | } |
---|
327 | 317 | |
---|
328 | 318 | local_bh_disable(); |
---|
329 | | - l2tp_xmit_skb(session, skb, session->hdr_len); |
---|
| 319 | + l2tp_xmit_skb(session, skb); |
---|
330 | 320 | local_bh_enable(); |
---|
331 | 321 | |
---|
332 | 322 | sock_put(sk); |
---|
.. | .. |
---|
355 | 345 | */ |
---|
356 | 346 | static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb) |
---|
357 | 347 | { |
---|
358 | | - struct sock *sk = (struct sock *) chan->private; |
---|
| 348 | + struct sock *sk = (struct sock *)chan->private; |
---|
359 | 349 | struct l2tp_session *session; |
---|
360 | 350 | struct l2tp_tunnel *tunnel; |
---|
361 | 351 | int uhlen, headroom; |
---|
.. | .. |
---|
365 | 355 | |
---|
366 | 356 | /* Get session and tunnel contexts from the socket */ |
---|
367 | 357 | session = pppol2tp_sock_to_session(sk); |
---|
368 | | - if (session == NULL) |
---|
| 358 | + if (!session) |
---|
369 | 359 | goto abort; |
---|
370 | 360 | |
---|
371 | 361 | tunnel = session->tunnel; |
---|
.. | .. |
---|
385 | 375 | skb->data[1] = PPP_UI; |
---|
386 | 376 | |
---|
387 | 377 | local_bh_disable(); |
---|
388 | | - l2tp_xmit_skb(session, skb, session->hdr_len); |
---|
| 378 | + l2tp_xmit_skb(session, skb); |
---|
389 | 379 | local_bh_enable(); |
---|
390 | 380 | |
---|
391 | 381 | sock_put(sk); |
---|
.. | .. |
---|
424 | 414 | |
---|
425 | 415 | if (session) { |
---|
426 | 416 | sk->sk_user_data = NULL; |
---|
427 | | - BUG_ON(session->magic != L2TP_SESSION_MAGIC); |
---|
| 417 | + if (WARN_ON(session->magic != L2TP_SESSION_MAGIC)) |
---|
| 418 | + return; |
---|
428 | 419 | l2tp_session_dec_refcount(session); |
---|
429 | 420 | } |
---|
430 | 421 | } |
---|
.. | .. |
---|
708 | 699 | * tunnel id. |
---|
709 | 700 | */ |
---|
710 | 701 | if (!info.session_id && !info.peer_session_id) { |
---|
711 | | - if (tunnel == NULL) { |
---|
| 702 | + if (!tunnel) { |
---|
712 | 703 | struct l2tp_tunnel_cfg tcfg = { |
---|
713 | 704 | .encap = L2TP_ENCAPTYPE_UDP, |
---|
714 | | - .debug = 0, |
---|
715 | 705 | }; |
---|
716 | 706 | |
---|
717 | 707 | /* Prevent l2tp_tunnel_register() from trying to set up |
---|
.. | .. |
---|
722 | 712 | goto end; |
---|
723 | 713 | } |
---|
724 | 714 | |
---|
725 | | - error = l2tp_tunnel_create(sock_net(sk), info.fd, |
---|
| 715 | + error = l2tp_tunnel_create(info.fd, |
---|
726 | 716 | info.version, |
---|
727 | 717 | info.tunnel_id, |
---|
728 | 718 | info.peer_tunnel_id, &tcfg, |
---|
.. | .. |
---|
743 | 733 | } else { |
---|
744 | 734 | /* Error if we can't find the tunnel */ |
---|
745 | 735 | error = -ENOENT; |
---|
746 | | - if (tunnel == NULL) |
---|
| 736 | + if (!tunnel) |
---|
747 | 737 | goto end; |
---|
748 | 738 | |
---|
749 | 739 | /* Error if socket is not prepped */ |
---|
750 | | - if (tunnel->sock == NULL) |
---|
| 740 | + if (!tunnel->sock) |
---|
751 | 741 | goto end; |
---|
752 | 742 | } |
---|
753 | 743 | |
---|
.. | .. |
---|
807 | 797 | * the internal context for use by ioctl() and sockopt() |
---|
808 | 798 | * handlers. |
---|
809 | 799 | */ |
---|
810 | | - if ((session->session_id == 0) && |
---|
811 | | - (session->peer_session_id == 0)) { |
---|
| 800 | + if (session->session_id == 0 && session->peer_session_id == 0) { |
---|
812 | 801 | error = 0; |
---|
813 | 802 | goto out_no_ppp; |
---|
814 | 803 | } |
---|
.. | .. |
---|
842 | 831 | drop_refcnt = false; |
---|
843 | 832 | |
---|
844 | 833 | sk->sk_state = PPPOX_CONNECTED; |
---|
845 | | - l2tp_info(session, L2TP_MSG_CONTROL, "%s: created\n", |
---|
846 | | - session->name); |
---|
847 | 834 | |
---|
848 | 835 | end: |
---|
849 | 836 | if (error) { |
---|
.. | .. |
---|
916 | 903 | struct pppol2tp_session *pls; |
---|
917 | 904 | |
---|
918 | 905 | error = -ENOTCONN; |
---|
919 | | - if (sk == NULL) |
---|
| 906 | + if (!sk) |
---|
920 | 907 | goto end; |
---|
921 | 908 | if (!(sk->sk_state & PPPOX_CONNECTED)) |
---|
922 | 909 | goto end; |
---|
923 | 910 | |
---|
924 | 911 | error = -EBADF; |
---|
925 | 912 | session = pppol2tp_sock_to_session(sk); |
---|
926 | | - if (session == NULL) |
---|
| 913 | + if (!session) |
---|
927 | 914 | goto end; |
---|
928 | 915 | |
---|
929 | 916 | pls = l2tp_session_priv(session); |
---|
930 | 917 | tunnel = session->tunnel; |
---|
931 | 918 | |
---|
932 | 919 | inet = inet_sk(tunnel->sock); |
---|
933 | | - if ((tunnel->version == 2) && (tunnel->sock->sk_family == AF_INET)) { |
---|
| 920 | + if (tunnel->version == 2 && tunnel->sock->sk_family == AF_INET) { |
---|
934 | 921 | struct sockaddr_pppol2tp sp; |
---|
| 922 | + |
---|
935 | 923 | len = sizeof(sp); |
---|
936 | 924 | memset(&sp, 0, len); |
---|
937 | 925 | sp.sa_family = AF_PPPOX; |
---|
.. | .. |
---|
947 | 935 | sp.pppol2tp.addr.sin_addr.s_addr = inet->inet_daddr; |
---|
948 | 936 | memcpy(uaddr, &sp, len); |
---|
949 | 937 | #if IS_ENABLED(CONFIG_IPV6) |
---|
950 | | - } else if ((tunnel->version == 2) && |
---|
951 | | - (tunnel->sock->sk_family == AF_INET6)) { |
---|
| 938 | + } else if (tunnel->version == 2 && tunnel->sock->sk_family == AF_INET6) { |
---|
952 | 939 | struct sockaddr_pppol2tpin6 sp; |
---|
953 | 940 | |
---|
954 | 941 | len = sizeof(sp); |
---|
.. | .. |
---|
966 | 953 | memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr, |
---|
967 | 954 | sizeof(tunnel->sock->sk_v6_daddr)); |
---|
968 | 955 | memcpy(uaddr, &sp, len); |
---|
969 | | - } else if ((tunnel->version == 3) && |
---|
970 | | - (tunnel->sock->sk_family == AF_INET6)) { |
---|
| 956 | + } else if (tunnel->version == 3 && tunnel->sock->sk_family == AF_INET6) { |
---|
971 | 957 | struct sockaddr_pppol2tpv3in6 sp; |
---|
972 | 958 | |
---|
973 | 959 | len = sizeof(sp); |
---|
.. | .. |
---|
988 | 974 | #endif |
---|
989 | 975 | } else if (tunnel->version == 3) { |
---|
990 | 976 | struct sockaddr_pppol2tpv3 sp; |
---|
| 977 | + |
---|
991 | 978 | len = sizeof(sp); |
---|
992 | 979 | memset(&sp, 0, len); |
---|
993 | 980 | sp.sa_family = AF_PPPOX; |
---|
.. | .. |
---|
1070 | 1057 | { |
---|
1071 | 1058 | struct pppol2tp_ioc_stats stats; |
---|
1072 | 1059 | struct l2tp_session *session; |
---|
1073 | | - int val; |
---|
1074 | 1060 | |
---|
1075 | 1061 | switch (cmd) { |
---|
1076 | 1062 | case PPPIOCGMRU: |
---|
.. | .. |
---|
1078 | 1064 | session = sock->sk->sk_user_data; |
---|
1079 | 1065 | if (!session) |
---|
1080 | 1066 | return -ENOTCONN; |
---|
| 1067 | + |
---|
| 1068 | + if (WARN_ON(session->magic != L2TP_SESSION_MAGIC)) |
---|
| 1069 | + return -EBADF; |
---|
1081 | 1070 | |
---|
1082 | 1071 | /* Not defined for tunnels */ |
---|
1083 | 1072 | if (!session->session_id && !session->peer_session_id) |
---|
.. | .. |
---|
1093 | 1082 | if (!session) |
---|
1094 | 1083 | return -ENOTCONN; |
---|
1095 | 1084 | |
---|
| 1085 | + if (WARN_ON(session->magic != L2TP_SESSION_MAGIC)) |
---|
| 1086 | + return -EBADF; |
---|
| 1087 | + |
---|
1096 | 1088 | /* Not defined for tunnels */ |
---|
1097 | 1089 | if (!session->session_id && !session->peer_session_id) |
---|
1098 | 1090 | return -ENOSYS; |
---|
1099 | 1091 | |
---|
1100 | | - if (get_user(val, (int __user *)arg)) |
---|
| 1092 | + if (!access_ok((int __user *)arg, sizeof(int))) |
---|
1101 | 1093 | return -EFAULT; |
---|
1102 | 1094 | break; |
---|
1103 | 1095 | |
---|
.. | .. |
---|
1105 | 1097 | session = sock->sk->sk_user_data; |
---|
1106 | 1098 | if (!session) |
---|
1107 | 1099 | return -ENOTCONN; |
---|
| 1100 | + |
---|
| 1101 | + if (WARN_ON(session->magic != L2TP_SESSION_MAGIC)) |
---|
| 1102 | + return -EBADF; |
---|
1108 | 1103 | |
---|
1109 | 1104 | /* Session 0 represents the parent tunnel */ |
---|
1110 | 1105 | if (!session->session_id && !session->peer_session_id) { |
---|
.. | .. |
---|
1160 | 1155 | |
---|
1161 | 1156 | switch (optname) { |
---|
1162 | 1157 | case PPPOL2TP_SO_DEBUG: |
---|
1163 | | - tunnel->debug = val; |
---|
1164 | | - l2tp_info(tunnel, L2TP_MSG_CONTROL, "%s: set debug=%x\n", |
---|
1165 | | - tunnel->name, tunnel->debug); |
---|
| 1158 | + /* Tunnel debug flags option is deprecated */ |
---|
1166 | 1159 | break; |
---|
1167 | 1160 | |
---|
1168 | 1161 | default: |
---|
.. | .. |
---|
1183 | 1176 | |
---|
1184 | 1177 | switch (optname) { |
---|
1185 | 1178 | case PPPOL2TP_SO_RECVSEQ: |
---|
1186 | | - if ((val != 0) && (val != 1)) { |
---|
| 1179 | + if (val != 0 && val != 1) { |
---|
1187 | 1180 | err = -EINVAL; |
---|
1188 | 1181 | break; |
---|
1189 | 1182 | } |
---|
1190 | 1183 | session->recv_seq = !!val; |
---|
1191 | | - l2tp_info(session, L2TP_MSG_CONTROL, |
---|
1192 | | - "%s: set recv_seq=%d\n", |
---|
1193 | | - session->name, session->recv_seq); |
---|
1194 | 1184 | break; |
---|
1195 | 1185 | |
---|
1196 | 1186 | case PPPOL2TP_SO_SENDSEQ: |
---|
1197 | | - if ((val != 0) && (val != 1)) { |
---|
| 1187 | + if (val != 0 && val != 1) { |
---|
1198 | 1188 | err = -EINVAL; |
---|
1199 | 1189 | break; |
---|
1200 | 1190 | } |
---|
.. | .. |
---|
1206 | 1196 | PPPOL2TP_L2TP_HDR_SIZE_NOSEQ; |
---|
1207 | 1197 | } |
---|
1208 | 1198 | l2tp_session_set_header_len(session, session->tunnel->version); |
---|
1209 | | - l2tp_info(session, L2TP_MSG_CONTROL, |
---|
1210 | | - "%s: set send_seq=%d\n", |
---|
1211 | | - session->name, session->send_seq); |
---|
1212 | 1199 | break; |
---|
1213 | 1200 | |
---|
1214 | 1201 | case PPPOL2TP_SO_LNSMODE: |
---|
1215 | | - if ((val != 0) && (val != 1)) { |
---|
| 1202 | + if (val != 0 && val != 1) { |
---|
1216 | 1203 | err = -EINVAL; |
---|
1217 | 1204 | break; |
---|
1218 | 1205 | } |
---|
1219 | 1206 | session->lns_mode = !!val; |
---|
1220 | | - l2tp_info(session, L2TP_MSG_CONTROL, |
---|
1221 | | - "%s: set lns_mode=%d\n", |
---|
1222 | | - session->name, session->lns_mode); |
---|
1223 | 1207 | break; |
---|
1224 | 1208 | |
---|
1225 | 1209 | case PPPOL2TP_SO_DEBUG: |
---|
1226 | | - session->debug = val; |
---|
1227 | | - l2tp_info(session, L2TP_MSG_CONTROL, "%s: set debug=%x\n", |
---|
1228 | | - session->name, session->debug); |
---|
| 1210 | + /* Session debug flags option is deprecated */ |
---|
1229 | 1211 | break; |
---|
1230 | 1212 | |
---|
1231 | 1213 | case PPPOL2TP_SO_REORDERTO: |
---|
1232 | 1214 | session->reorder_timeout = msecs_to_jiffies(val); |
---|
1233 | | - l2tp_info(session, L2TP_MSG_CONTROL, |
---|
1234 | | - "%s: set reorder_timeout=%d\n", |
---|
1235 | | - session->name, session->reorder_timeout); |
---|
1236 | 1215 | break; |
---|
1237 | 1216 | |
---|
1238 | 1217 | default: |
---|
.. | .. |
---|
1249 | 1228 | * session or the special tunnel type. |
---|
1250 | 1229 | */ |
---|
1251 | 1230 | static int pppol2tp_setsockopt(struct socket *sock, int level, int optname, |
---|
1252 | | - char __user *optval, unsigned int optlen) |
---|
| 1231 | + sockptr_t optval, unsigned int optlen) |
---|
1253 | 1232 | { |
---|
1254 | 1233 | struct sock *sk = sock->sk; |
---|
1255 | 1234 | struct l2tp_session *session; |
---|
.. | .. |
---|
1263 | 1242 | if (optlen < sizeof(int)) |
---|
1264 | 1243 | return -EINVAL; |
---|
1265 | 1244 | |
---|
1266 | | - if (get_user(val, (int __user *)optval)) |
---|
| 1245 | + if (copy_from_sockptr(&val, optval, sizeof(int))) |
---|
1267 | 1246 | return -EFAULT; |
---|
1268 | 1247 | |
---|
1269 | 1248 | err = -ENOTCONN; |
---|
1270 | | - if (sk->sk_user_data == NULL) |
---|
| 1249 | + if (!sk->sk_user_data) |
---|
1271 | 1250 | goto end; |
---|
1272 | 1251 | |
---|
1273 | 1252 | /* Get session context from the socket */ |
---|
1274 | 1253 | err = -EBADF; |
---|
1275 | 1254 | session = pppol2tp_sock_to_session(sk); |
---|
1276 | | - if (session == NULL) |
---|
| 1255 | + if (!session) |
---|
1277 | 1256 | goto end; |
---|
1278 | 1257 | |
---|
1279 | 1258 | /* Special case: if session_id == 0x0000, treat as operation on tunnel |
---|
1280 | 1259 | */ |
---|
1281 | | - if ((session->session_id == 0) && |
---|
1282 | | - (session->peer_session_id == 0)) { |
---|
| 1260 | + if (session->session_id == 0 && session->peer_session_id == 0) { |
---|
1283 | 1261 | tunnel = session->tunnel; |
---|
1284 | 1262 | err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val); |
---|
1285 | 1263 | } else { |
---|
.. | .. |
---|
1301 | 1279 | |
---|
1302 | 1280 | switch (optname) { |
---|
1303 | 1281 | case PPPOL2TP_SO_DEBUG: |
---|
1304 | | - *val = tunnel->debug; |
---|
1305 | | - l2tp_info(tunnel, L2TP_MSG_CONTROL, "%s: get debug=%x\n", |
---|
1306 | | - tunnel->name, tunnel->debug); |
---|
| 1282 | + /* Tunnel debug flags option is deprecated */ |
---|
| 1283 | + *val = 0; |
---|
1307 | 1284 | break; |
---|
1308 | 1285 | |
---|
1309 | 1286 | default: |
---|
.. | .. |
---|
1325 | 1302 | switch (optname) { |
---|
1326 | 1303 | case PPPOL2TP_SO_RECVSEQ: |
---|
1327 | 1304 | *val = session->recv_seq; |
---|
1328 | | - l2tp_info(session, L2TP_MSG_CONTROL, |
---|
1329 | | - "%s: get recv_seq=%d\n", session->name, *val); |
---|
1330 | 1305 | break; |
---|
1331 | 1306 | |
---|
1332 | 1307 | case PPPOL2TP_SO_SENDSEQ: |
---|
1333 | 1308 | *val = session->send_seq; |
---|
1334 | | - l2tp_info(session, L2TP_MSG_CONTROL, |
---|
1335 | | - "%s: get send_seq=%d\n", session->name, *val); |
---|
1336 | 1309 | break; |
---|
1337 | 1310 | |
---|
1338 | 1311 | case PPPOL2TP_SO_LNSMODE: |
---|
1339 | 1312 | *val = session->lns_mode; |
---|
1340 | | - l2tp_info(session, L2TP_MSG_CONTROL, |
---|
1341 | | - "%s: get lns_mode=%d\n", session->name, *val); |
---|
1342 | 1313 | break; |
---|
1343 | 1314 | |
---|
1344 | 1315 | case PPPOL2TP_SO_DEBUG: |
---|
1345 | | - *val = session->debug; |
---|
1346 | | - l2tp_info(session, L2TP_MSG_CONTROL, "%s: get debug=%d\n", |
---|
1347 | | - session->name, *val); |
---|
| 1316 | + /* Session debug flags option is deprecated */ |
---|
| 1317 | + *val = 0; |
---|
1348 | 1318 | break; |
---|
1349 | 1319 | |
---|
1350 | 1320 | case PPPOL2TP_SO_REORDERTO: |
---|
1351 | | - *val = (int) jiffies_to_msecs(session->reorder_timeout); |
---|
1352 | | - l2tp_info(session, L2TP_MSG_CONTROL, |
---|
1353 | | - "%s: get reorder_timeout=%d\n", session->name, *val); |
---|
| 1321 | + *val = (int)jiffies_to_msecs(session->reorder_timeout); |
---|
1354 | 1322 | break; |
---|
1355 | 1323 | |
---|
1356 | 1324 | default: |
---|
.. | .. |
---|
1386 | 1354 | return -EINVAL; |
---|
1387 | 1355 | |
---|
1388 | 1356 | err = -ENOTCONN; |
---|
1389 | | - if (sk->sk_user_data == NULL) |
---|
| 1357 | + if (!sk->sk_user_data) |
---|
1390 | 1358 | goto end; |
---|
1391 | 1359 | |
---|
1392 | 1360 | /* Get the session context */ |
---|
1393 | 1361 | err = -EBADF; |
---|
1394 | 1362 | session = pppol2tp_sock_to_session(sk); |
---|
1395 | | - if (session == NULL) |
---|
| 1363 | + if (!session) |
---|
1396 | 1364 | goto end; |
---|
1397 | 1365 | |
---|
1398 | 1366 | /* Special case: if session_id == 0x0000, treat as operation on tunnel */ |
---|
1399 | | - if ((session->session_id == 0) && |
---|
1400 | | - (session->peer_session_id == 0)) { |
---|
| 1367 | + if (session->session_id == 0 && session->peer_session_id == 0) { |
---|
1401 | 1368 | tunnel = session->tunnel; |
---|
1402 | 1369 | err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val); |
---|
1403 | 1370 | if (err) |
---|
.. | .. |
---|
1412 | 1379 | if (put_user(len, optlen)) |
---|
1413 | 1380 | goto end_put_sess; |
---|
1414 | 1381 | |
---|
1415 | | - if (copy_to_user((void __user *) optval, &val, len)) |
---|
| 1382 | + if (copy_to_user((void __user *)optval, &val, len)) |
---|
1416 | 1383 | goto end_put_sess; |
---|
1417 | 1384 | |
---|
1418 | 1385 | err = 0; |
---|
.. | .. |
---|
1468 | 1435 | pd->session = l2tp_session_get_nth(pd->tunnel, pd->session_idx); |
---|
1469 | 1436 | pd->session_idx++; |
---|
1470 | 1437 | |
---|
1471 | | - if (pd->session == NULL) { |
---|
| 1438 | + if (!pd->session) { |
---|
1472 | 1439 | pd->session_idx = 0; |
---|
1473 | 1440 | pppol2tp_next_tunnel(net, pd); |
---|
1474 | 1441 | } |
---|
.. | .. |
---|
1483 | 1450 | if (!pos) |
---|
1484 | 1451 | goto out; |
---|
1485 | 1452 | |
---|
1486 | | - BUG_ON(m->private == NULL); |
---|
| 1453 | + if (WARN_ON(!m->private)) { |
---|
| 1454 | + pd = NULL; |
---|
| 1455 | + goto out; |
---|
| 1456 | + } |
---|
| 1457 | + |
---|
1487 | 1458 | pd = m->private; |
---|
1488 | 1459 | net = seq_file_net(m); |
---|
1489 | 1460 | |
---|
1490 | | - if (pd->tunnel == NULL) |
---|
| 1461 | + if (!pd->tunnel) |
---|
1491 | 1462 | pppol2tp_next_tunnel(net, pd); |
---|
1492 | 1463 | else |
---|
1493 | 1464 | pppol2tp_next_session(net, pd); |
---|
1494 | 1465 | |
---|
1495 | 1466 | /* NULL tunnel and session indicates end of list */ |
---|
1496 | | - if ((pd->tunnel == NULL) && (pd->session == NULL)) |
---|
| 1467 | + if (!pd->tunnel && !pd->session) |
---|
1497 | 1468 | pd = NULL; |
---|
1498 | 1469 | |
---|
1499 | 1470 | out: |
---|
.. | .. |
---|
1535 | 1506 | (tunnel == tunnel->sock->sk_user_data) ? 'Y' : 'N', |
---|
1536 | 1507 | refcount_read(&tunnel->ref_count) - 1); |
---|
1537 | 1508 | seq_printf(m, " %08x %ld/%ld/%ld %ld/%ld/%ld\n", |
---|
1538 | | - tunnel->debug, |
---|
| 1509 | + 0, |
---|
1539 | 1510 | atomic_long_read(&tunnel->stats.tx_packets), |
---|
1540 | 1511 | atomic_long_read(&tunnel->stats.tx_bytes), |
---|
1541 | 1512 | atomic_long_read(&tunnel->stats.tx_errors), |
---|
.. | .. |
---|
1556 | 1527 | |
---|
1557 | 1528 | if (tunnel->sock) { |
---|
1558 | 1529 | struct inet_sock *inet = inet_sk(tunnel->sock); |
---|
| 1530 | + |
---|
1559 | 1531 | ip = ntohl(inet->inet_saddr); |
---|
1560 | 1532 | port = ntohs(inet->inet_sport); |
---|
1561 | 1533 | } |
---|
.. | .. |
---|
1569 | 1541 | user_data_ok = 'N'; |
---|
1570 | 1542 | } |
---|
1571 | 1543 | |
---|
1572 | | - seq_printf(m, " SESSION '%s' %08X/%d %04X/%04X -> " |
---|
1573 | | - "%04X/%04X %d %c\n", |
---|
| 1544 | + seq_printf(m, " SESSION '%s' %08X/%d %04X/%04X -> %04X/%04X %d %c\n", |
---|
1574 | 1545 | session->name, ip, port, |
---|
1575 | 1546 | tunnel->tunnel_id, |
---|
1576 | 1547 | session->session_id, |
---|
.. | .. |
---|
1581 | 1552 | session->recv_seq ? 'R' : '-', |
---|
1582 | 1553 | session->send_seq ? 'S' : '-', |
---|
1583 | 1554 | session->lns_mode ? "LNS" : "LAC", |
---|
1584 | | - session->debug, |
---|
| 1555 | + 0, |
---|
1585 | 1556 | jiffies_to_msecs(session->reorder_timeout)); |
---|
1586 | 1557 | seq_printf(m, " %hu/%hu %ld/%ld/%ld %ld/%ld/%ld\n", |
---|
1587 | 1558 | session->nr, session->ns, |
---|
.. | .. |
---|
1609 | 1580 | seq_puts(m, "PPPoL2TP driver info, " PPPOL2TP_DRV_VERSION "\n"); |
---|
1610 | 1581 | seq_puts(m, "TUNNEL name, user-data-ok session-count\n"); |
---|
1611 | 1582 | seq_puts(m, " debug tx-pkts/bytes/errs rx-pkts/bytes/errs\n"); |
---|
1612 | | - seq_puts(m, " SESSION name, addr/port src-tid/sid " |
---|
1613 | | - "dest-tid/sid state user-data-ok\n"); |
---|
| 1583 | + seq_puts(m, " SESSION name, addr/port src-tid/sid dest-tid/sid state user-data-ok\n"); |
---|
1614 | 1584 | seq_puts(m, " mtu/mru/rcvseq/sendseq/lns debug reorderto\n"); |
---|
1615 | 1585 | seq_puts(m, " nr/ns tx-pkts/bytes/errs rx-pkts/bytes/errs\n"); |
---|
1616 | 1586 | goto out; |
---|
.. | .. |
---|
1643 | 1613 | int err = 0; |
---|
1644 | 1614 | |
---|
1645 | 1615 | pde = proc_create_net("pppol2tp", 0444, net->proc_net, |
---|
1646 | | - &pppol2tp_seq_ops, sizeof(struct pppol2tp_seq_data)); |
---|
| 1616 | + &pppol2tp_seq_ops, sizeof(struct pppol2tp_seq_data)); |
---|
1647 | 1617 | if (!pde) { |
---|
1648 | 1618 | err = -ENOMEM; |
---|
1649 | 1619 | goto out; |
---|