summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorBenedict Wong <benedictwong@google.com>2018-04-02 18:12:34 -0700
committerBenedict Wong <benedictwong@google.com>2018-04-03 17:04:55 -0700
commitd175a3d3a01cfdb5ab6d4e61d15950583f8006d6 (patch)
tree9d83a11990bdd0b2749d5c3b849004f33054f6db /core/java/android
parente34c426fd346d041176c83393bb78abfd49f6e9f (diff)
Force creation of Socket upon Transform application
This change forces Socket and DatagramSocket to populate the SocketImpl, ensuring that the socket file descriptor can be retrieved when applying Transport mode Transforms This is done by calling getSoLinger(), triggering a getImpl(), which triggers setImpl() if needed. Bug: 77491294 Test: Added tests in IpSecManagerTest, ran on walleye Change-Id: I40da08b031357710eb794e0f866aec5660c79594
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/net/IpSecManager.java6
1 files changed, 6 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$());
}