[Openswan dev] mangled packets, ESP on mast0, after ip_select_ident() fix
Paul Wouters
paul at xelerance.com
Tue Jul 19 00:06:43 EDT 2011
I've tracked down the recent issues with protostack=mast, and found that the
following commit seems to have badly broken the mast stack:
commit 86a5945e20ffa61936e93b52c499e06b465c4403
Author: David McCullough <david_mccullough at mcafee.com>
Date: Thu Jun 2 15:26:48 2011 +1000
Routing cache corruption due to ip_select_ident
The comments in the code said that dst has to be set before calling
ip_select_ident, but dst wasn't set correctly.
It was corrupting a private value (rt->rt6i_nfheader_len) that would then
result in ip6_output calculating invalid mtu/packet sizing and rejecting the
transmission of a packet with EMSGSIZE.
Rework the dst settings and ip_select_ident code so that is all gets done
in the correct sequence. This helps clean up the flowi code a little and
it is easier now to clean it up properly at some point w.r.t. IPv6.
Though I don't understand yet why this broke mast, but not klips. It also means
we unfortunately relesed 2.6.34 with a broken mast stack. I'd like to correct
this for 2.6.35.
To reproduce the failure, just setup a simple host-host tunnel with one
end protostack=klips and the other end protostack=mast. Then send a ping
while tcpdumping the mast0 interface. You will see the ping fail and
ESP packets on the mast0 interface.
The attached patch reverts 86a5945 basedon current head (required a little manual
patching) and fixes the above test to work properly again.
Paul
-------------- next part --------------
diff -r -c -N openswan-2.6.16dr1/programs/pluto/kernel_netlink.c openswan-2.6.16dr2/programs/pluto/kernel_netlink.c
*** openswan-2.6.16dr1/programs/pluto/kernel_netlink.c 2008-07-05 01:09:01.000000000 -0400
--- openswan-2.6.16dr2/programs/pluto/kernel_netlink.c 2008-07-06 12:31:30.000000000 -0400
***************
*** 58,64 ****
#include <security/pam_appl.h>
#endif
! const struct pfkey_proto_info null_proto_info[2];
static const struct pfkey_proto_info broad_proto_info[2] = {
{
--- 58,64 ----
#include <security/pam_appl.h>
#endif
! extern const struct pfkey_proto_info null_proto_info[2];
static const struct pfkey_proto_info broad_proto_info[2] = {
{
diff -r -c -N openswan-2.6.16dr1/programs/pluto/kernel_pfkey.c openswan-2.6.16dr2/programs/pluto/kernel_pfkey.c
*** openswan-2.6.16dr1/programs/pluto/kernel_pfkey.c 2008-07-05 01:09:01.000000000 -0400
--- openswan-2.6.16dr2/programs/pluto/kernel_pfkey.c 2008-07-06 12:31:30.000000000 -0400
***************
*** 74,80 ****
*/
struct eroute_info *orphaned_holds = NULL;
! const struct pfkey_proto_info null_proto_info[2];
static pid_t pid;
--- 74,80 ----
*/
struct eroute_info *orphaned_holds = NULL;
! extern const struct pfkey_proto_info null_proto_info[2];
static pid_t pid;
More information about the Dev
mailing list