| .. | .. |
|---|
| 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; |
|---|