diff options
author | Guillaume Nault <g.nault@alphalink.fr> | 2017-03-31 13:02:25 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-04-01 20:16:41 -0700 |
commit | 61b9a047729bb230978178bca6729689d0c50ca2 (patch) | |
tree | f8dfc3ba7bfc78123ad285d0b846c8b7c865129c /net/l2tp/l2tp_core.h | |
parent | afe89962ee0799955b606cc7637ac86a296923a6 (diff) | |
download | linux-61b9a047729bb230978178bca6729689d0c50ca2.tar.gz linux-61b9a047729bb230978178bca6729689d0c50ca2.tar.bz2 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.h | 3 |
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); |