diff options
| author | 2018-04-04 17:14:46 +0000 | |
|---|---|---|
| committer | 2018-04-04 17:14:46 +0000 | |
| commit | 119cf2bc614fe75f5558a01b5012a1104323b774 (patch) | |
| tree | 98d81a42785efdf9dff64c8f271b126f1d4d353f | |
| parent | 63437f247ba6038f210911b18df79a2667b98822 (diff) | |
| parent | d175a3d3a01cfdb5ab6d4e61d15950583f8006d6 (diff) | |
Merge "Force creation of Socket upon Transform application"
| -rw-r--r-- | core/java/android/net/IpSecManager.java | 6 | ||||
| -rw-r--r-- | tests/net/java/android/net/IpSecManagerTest.java | 28 |
2 files changed, 34 insertions, 0 deletions
diff --git a/core/java/android/net/IpSecManager.java b/core/java/android/net/IpSecManager.java index 719b81c7dfea..cc227713cb8c 100644 --- a/core/java/android/net/IpSecManager.java +++ b/core/java/android/net/IpSecManager.java @@ -336,6 +336,9 @@ public final class IpSecManager { */ public void applyTransportModeTransform(@NonNull Socket socket, @PolicyDirection int direction, @NonNull IpSecTransform transform) throws IOException { + // Ensure creation of FD. See b/77548890 for more details. + socket.getSoLinger(); + applyTransportModeTransform(socket.getFileDescriptor$(), direction, transform); } @@ -440,6 +443,9 @@ public final class IpSecManager { * @throws IOException indicating that the transform could not be removed from the socket */ public void removeTransportModeTransforms(@NonNull Socket socket) throws IOException { + // Ensure creation of FD. See b/77548890 for more details. + socket.getSoLinger(); + removeTransportModeTransforms(socket.getFileDescriptor$()); } diff --git a/tests/net/java/android/net/IpSecManagerTest.java b/tests/net/java/android/net/IpSecManagerTest.java index 970596d6b0f3..9191bd369cc1 100644 --- a/tests/net/java/android/net/IpSecManagerTest.java +++ b/tests/net/java/android/net/IpSecManagerTest.java @@ -37,6 +37,7 @@ import android.system.Os; import com.android.server.IpSecService; import java.net.InetAddress; +import java.net.Socket; import java.net.UnknownHostException; import org.junit.Before; @@ -188,6 +189,33 @@ public class IpSecManagerTest { } @Test + public void testApplyTransportModeTransformEnsuresSocketCreation() throws Exception { + Socket socket = new Socket(); + IpSecConfig dummyConfig = new IpSecConfig(); + IpSecTransform dummyTransform = new IpSecTransform(null, dummyConfig); + + // Even if underlying SocketImpl is not initalized, this should force the init, and + // thereby succeed. + mIpSecManager.applyTransportModeTransform( + socket, IpSecManager.DIRECTION_IN, dummyTransform); + + // Check to make sure the FileDescriptor is non-null + assertNotNull(socket.getFileDescriptor$()); + } + + @Test + public void testRemoveTransportModeTransformsForcesSocketCreation() throws Exception { + Socket socket = new Socket(); + + // Even if underlying SocketImpl is not initalized, this should force the init, and + // thereby succeed. + mIpSecManager.removeTransportModeTransforms(socket); + + // Check to make sure the FileDescriptor is non-null + assertNotNull(socket.getFileDescriptor$()); + } + + @Test public void testOpenEncapsulationSocketOnRandomPort() throws Exception { IpSecUdpEncapResponse udpEncapResp = new IpSecUdpEncapResponse( |