diff options
author | Guillaume Nault <gnault@redhat.com> | 2023-07-03 19:14:46 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-07-04 20:39:30 +0200 |
commit | 84bef5b6037c15180ef88ac4216dc621d16df1a6 (patch) | |
tree | d4b87c50c50934e609a305d5424b65365dfe3813 /scripts/check-git | |
parent | mlxsw: spectrum_router: Fix an IS_ERR() vs NULL check (diff) | |
download | linux-84bef5b6037c15180ef88ac4216dc621d16df1a6.tar.xz linux-84bef5b6037c15180ef88ac4216dc621d16df1a6.zip |
pptp: Fix fib lookup calls.
PPTP uses pppox sockets (struct pppox_sock). These sockets don't embed
an inet_sock structure, so it's invalid to call inet_sk() on them.
Therefore, the ip_route_output_ports() call in pptp_connect() has two
problems:
* The tos variable is set with RT_CONN_FLAGS(sk), which calls
inet_sk() on the pppox socket.
* ip_route_output_ports() tries to retrieve routing flags using
inet_sk_flowi_flags(), which is also going to call inet_sk() on the
pppox socket.
While PPTP doesn't use inet sockets, it's actually really layered on
top of IP and therefore needs a proper way to do fib lookups. So let's
define pptp_route_output() to get a struct rtable from a pptp socket.
Let's also replace the ip_route_output_ports() call of pptp_xmit() for
consistency.
In practice, this means that:
* pptp_connect() sets ->flowi4_tos and ->flowi4_flags to zero instead
of using bits of unrelated struct pppox_sock fields.
* pptp_xmit() now respects ->sk_mark and ->sk_uid.
* pptp_xmit() now calls the security_sk_classify_flow() security
hook, thus allowing to set ->flowic_secid.
* pptp_xmit() now passes the pppox socket to xfrm_lookup_route().
Found by code inspection.
Fixes: 00959ade36ac ("PPTP: PPP over IPv4 (Point-to-Point Tunneling Protocol)")
Signed-off-by: Guillaume Nault <gnault@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'scripts/check-git')
0 files changed, 0 insertions, 0 deletions