5397e97d75
When the helper module is removed for a master connection that has a fulfilled expectation, but has already timed out and got removed from the hash tables, nf_conntrack_helper_unregister can't find the master connection to unset the helper, causing a use-after-free when the expected connection is destroyed and releases the last reference to the master. The helper destroy callback was introduced for the PPtP helper to clean up expectations and expected connections when the master connection times out, but doing this from destroy_conntrack only works for unfulfilled expectations since expected connections hold a reference to the master, preventing its destruction. Move the destroy callback to the timeout function, which fixes both problems. Reported/tested by Gabor Burjan <buga@buvoshetes.hu>. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net> |
||
---|---|---|
.. | ||
core.c | ||
Kconfig | ||
Makefile | ||
nf_conntrack_amanda.c | ||
nf_conntrack_core.c | ||
nf_conntrack_ecache.c | ||
nf_conntrack_expect.c | ||
nf_conntrack_ftp.c | ||
nf_conntrack_h323_asn1.c | ||
nf_conntrack_h323_main.c | ||
nf_conntrack_h323_types.c | ||
nf_conntrack_helper.c | ||
nf_conntrack_irc.c | ||
nf_conntrack_l3proto_generic.c | ||
nf_conntrack_netbios_ns.c | ||
nf_conntrack_netlink.c | ||
nf_conntrack_pptp.c | ||
nf_conntrack_proto.c | ||
nf_conntrack_proto_generic.c | ||
nf_conntrack_proto_gre.c | ||
nf_conntrack_proto_sctp.c | ||
nf_conntrack_proto_tcp.c | ||
nf_conntrack_proto_udp.c | ||
nf_conntrack_sane.c | ||
nf_conntrack_sip.c | ||
nf_conntrack_standalone.c | ||
nf_conntrack_tftp.c | ||
nf_internals.h | ||
nf_log.c | ||
nf_queue.c | ||
nf_sockopt.c | ||
nf_sysctl.c | ||
nfnetlink.c | ||
nfnetlink_log.c | ||
nfnetlink_queue.c | ||
x_tables.c | ||
xt_CLASSIFY.c | ||
xt_comment.c | ||
xt_connbytes.c | ||
xt_CONNMARK.c | ||
xt_connmark.c | ||
xt_CONNSECMARK.c | ||
xt_conntrack.c | ||
xt_dccp.c | ||
xt_DSCP.c | ||
xt_dscp.c | ||
xt_esp.c | ||
xt_hashlimit.c | ||
xt_helper.c | ||
xt_length.c | ||
xt_limit.c | ||
xt_mac.c | ||
xt_MARK.c | ||
xt_mark.c | ||
xt_multiport.c | ||
xt_NFLOG.c | ||
xt_NFQUEUE.c | ||
xt_NOTRACK.c | ||
xt_physdev.c | ||
xt_pkttype.c | ||
xt_policy.c | ||
xt_quota.c | ||
xt_realm.c | ||
xt_sctp.c | ||
xt_SECMARK.c | ||
xt_state.c | ||
xt_statistic.c | ||
xt_string.c | ||
xt_TCPMSS.c | ||
xt_tcpmss.c | ||
xt_tcpudp.c |