summaryrefslogtreecommitdiffstats
path: root/net/l2tp/l2tp_core.h
diff options
context:
space:
mode:
authorGuillaume Nault2017-03-31 13:02:25 +0200
committerDavid S. Miller2017-04-02 05:16:41 +0200
commit61b9a047729bb230978178bca6729689d0c50ca2 (patch)
treef8dfc3ba7bfc78123ad285d0b846c8b7c865129c /net/l2tp/l2tp_core.h
parentsctp: use right in and out stream cnt (diff)
downloadkernel-qcow2-linux-61b9a047729bb230978178bca6729689d0c50ca2.tar.gz
kernel-qcow2-linux-61b9a047729bb230978178bca6729689d0c50ca2.tar.xz
kernel-qcow2-linux-61b9a047729bb230978178bca6729689d0c50ca2.zip
l2tp: fix race in l2tp_recv_common()
Taking a reference on sessions in l2tp_recv_common() is racy; this has to be done by the callers. To this end, a new function is required (l2tp_session_get()) to atomically lookup a session and take a reference on it. Callers then have to manually drop this reference. Fixes: fd558d186df2 ("l2tp: Split pppol2tp patch into separate l2tp and ppp parts") Signed-off-by: Guillaume Nault <g.nault@alphalink.fr> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/l2tp/l2tp_core.h')
-rw-r--r--net/l2tp/l2tp_core.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/l2tp/l2tp_core.h b/net/l2tp/l2tp_core.h
index aebf281d09ee..4544e81a3d27 100644
--- a/net/l2tp/l2tp_core.h
+++ b/net/l2tp/l2tp_core.h
@@ -230,6 +230,9 @@ out:
return tunnel;
}
+struct l2tp_session *l2tp_session_get(struct net *net,
+ struct l2tp_tunnel *tunnel,
+ u32 session_id, bool do_ref);
struct l2tp_session *l2tp_session_find(struct net *net,
struct l2tp_tunnel *tunnel,
u32 session_id);