DO NOT MERGE - Merge pi-dev@5234907 into stage-aosp-master
Bug: 120848293
Change-Id: Icc60878209e3b89a944cc4a7b228025d49e31ada
diff --git a/net/test/run_net_test.sh b/net/test/run_net_test.sh
index 17b44d9..a81ad33 100755
--- a/net/test/run_net_test.sh
+++ b/net/test/run_net_test.sh
@@ -306,9 +306,32 @@
blockdevice=ubdar
fi
+ exitcode=0
$KERNEL_BINARY >&2 umid=net_test mem=512M \
- $blockdevice=$SCRIPT_DIR/$ROOTFS $netconfig $consolemode $cmdline
- exitcode=$?
+ $blockdevice=$SCRIPT_DIR/$ROOTFS $netconfig $consolemode $cmdline \
+ || exitcode=$?
+
+ # UML is kind of crazy in how guest syscalls work. It requires host kernel
+ # to not be in vsyscall=none mode.
+ if [[ "${exitcode}" != '0' ]]; then
+ {
+ # Hopefully one of these exists
+ cat /proc/config || :
+ zcat /proc/config.gz || :
+ cat "/boot/config-$(uname -r)" || :
+ zcat "/boot/config-$(uname -r).gz" || :
+ } 2>/dev/null \
+ | egrep -q '^CONFIG_LEGACY_VSYSCALL_NONE=y' \
+ && ! egrep -q '(^| )vsyscall=(native|emulate)( |$)' /proc/cmdline \
+ && {
+ echo '-----=====-----'
+ echo 'If above you saw a "net_test.sh[1]: segfault at ..." followed by'
+ echo '"Kernel panic - not syncing: Attempted to kill init!" then please'
+ echo 'set "vsyscall=emulate" on *host* kernel command line.'
+ echo '(for example via GRUB_CMDLINE_LINUX in /etc/default/grub)'
+ echo '-----=====-----'
+ }
+ fi
else
# We boot into the filesystem image directly in all cases
cmdline="$cmdline root=/dev/vda"
diff --git a/net/test/xfrm_tunnel_test.py b/net/test/xfrm_tunnel_test.py
index bf32ffc..eb1a46e 100755
--- a/net/test/xfrm_tunnel_test.py
+++ b/net/test/xfrm_tunnel_test.py
@@ -172,7 +172,8 @@
self.assertEquals(net_test.UDP_PAYLOAD, data)
self.assertEquals((remote_inner, _TEST_REMOTE_PORT), src[:2])
- def _TestTunnel(self, inner_version, outer_version, func, direction):
+ def _TestTunnel(self, inner_version, outer_version, func, direction,
+ test_output_mark_unset):
"""Test a unidirectional XFRM Tunnel with explicit selectors"""
# Select the underlying netid, which represents the external
# interface from/to which to route ESP packets.
@@ -186,33 +187,46 @@
local_outer = self.MyAddress(outer_version, u_netid)
remote_outer = _GetRemoteOuterAddress(outer_version)
- # Create input/ouput SPs, SAs and sockets to simulate a more realistic
- # environment.
- self.xfrm.CreateTunnel(
- xfrm.XFRM_POLICY_IN, xfrm.SrcDstSelector(remote_inner, local_inner),
- remote_outer, local_outer, _TEST_IN_SPI, xfrm_base._ALGO_CRYPT_NULL,
- xfrm_base._ALGO_AUTH_NULL, None, None, None, xfrm.MATCH_METHOD_ALL)
+ output_mark = u_netid
+ if test_output_mark_unset:
+ output_mark = None
+ self.SetDefaultNetwork(u_netid)
- self.xfrm.CreateTunnel(
- xfrm.XFRM_POLICY_OUT, xfrm.SrcDstSelector(local_inner, remote_inner),
- local_outer, remote_outer, _TEST_OUT_SPI, xfrm_base._ALGO_CBC_AES_256,
- xfrm_base._ALGO_HMAC_SHA1, None, u_netid, None, xfrm.MATCH_METHOD_ALL)
+ try:
+ # Create input/ouput SPs, SAs and sockets to simulate a more realistic
+ # environment.
+ self.xfrm.CreateTunnel(
+ xfrm.XFRM_POLICY_IN, xfrm.SrcDstSelector(remote_inner, local_inner),
+ remote_outer, local_outer, _TEST_IN_SPI, xfrm_base._ALGO_CRYPT_NULL,
+ xfrm_base._ALGO_AUTH_NULL, None, None, None, xfrm.MATCH_METHOD_ALL)
- write_sock = socket(net_test.GetAddressFamily(inner_version), SOCK_DGRAM, 0)
- self.SelectInterface(write_sock, netid, "mark")
- read_sock, _ = _CreateReceiveSock(inner_version)
+ self.xfrm.CreateTunnel(
+ xfrm.XFRM_POLICY_OUT, xfrm.SrcDstSelector(local_inner, remote_inner),
+ local_outer, remote_outer, _TEST_OUT_SPI, xfrm_base._ALGO_CBC_AES_256,
+ xfrm_base._ALGO_HMAC_SHA1, None, output_mark, None, xfrm.MATCH_METHOD_ALL)
- sock = write_sock if direction == xfrm.XFRM_POLICY_OUT else read_sock
- func(inner_version, outer_version, u_netid, netid, local_inner,
- remote_inner, local_outer, remote_outer, sock)
+ write_sock = socket(net_test.GetAddressFamily(inner_version), SOCK_DGRAM, 0)
+ self.SelectInterface(write_sock, netid, "mark")
+ read_sock, _ = _CreateReceiveSock(inner_version)
+
+ sock = write_sock if direction == xfrm.XFRM_POLICY_OUT else read_sock
+ func(inner_version, outer_version, u_netid, netid, local_inner,
+ remote_inner, local_outer, remote_outer, sock)
+ finally:
+ if test_output_mark_unset:
+ self.ClearDefaultNetwork()
def ParamTestTunnelInput(self, inner_version, outer_version):
self._TestTunnel(inner_version, outer_version, self._CheckTunnelInput,
- xfrm.XFRM_POLICY_IN)
+ xfrm.XFRM_POLICY_IN, False)
def ParamTestTunnelOutput(self, inner_version, outer_version):
self._TestTunnel(inner_version, outer_version, self._CheckTunnelOutput,
- xfrm.XFRM_POLICY_OUT)
+ xfrm.XFRM_POLICY_OUT, False)
+
+ def ParamTestTunnelOutputNoSetMark(self, inner_version, outer_version):
+ self._TestTunnel(inner_version, outer_version, self._CheckTunnelOutput,
+ xfrm.XFRM_POLICY_OUT, True)
@unittest.skipUnless(net_test.LINUX_VERSION >= (3, 18, 0), "VTI Unsupported")