android: DNS proxy sockets are no longer re-protected on every network change: they were added to the list of sockets protected again on a roam, from which nothing is ever removed, although they are closed after 30 s - one hour of use left 43 closed descriptors, each a failed VpnService.protect() when Wi-Fi appeared, and a reused descriptor number could have been pulled out of the tunnel; the diag log says «disconnect requested» instead of «user» for any deliberate disconnect (the trusted-network park was logged as the user's)
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This commit is contained in:
1 parent
0549bb0358
commit
fa68ea20fa
2 files changed
+10
-2
No files matched your search
+3
-1
@@ -17,7 +17,9 @@ package org.strongswan.android.logic
|
|||||||
/** Why an established IKE SA went down; for the diagnostic log only (plan 8.1). */
|
/** Why an established IKE SA went down; for the diagnostic log only (plan 8.1). */
|
||||||
enum class SaClose(val label: String, val drop: Boolean)
|
enum class SaClose(val label: String, val drop: Boolean)
|
||||||
{
|
{
|
||||||
USER("user", false),
|
/* any deliberate disconnect: the user, a scenario, a pause or the trusted-network
|
||||||
|
* park (the line logged just before says which) */
|
||||||
|
USER("disconnect requested", false),
|
||||||
REAUTH("reauth", false),
|
REAUTH("reauth", false),
|
||||||
RETRANSMIT_AFTER_NETWORK_CHANGE("retransmit-timeout after network change", true),
|
RETRANSMIT_AFTER_NETWORK_CHANGE("retransmit-timeout after network change", true),
|
||||||
RETRANSMIT_TIMEOUT("retransmit-timeout", true),
|
RETRANSMIT_TIMEOUT("retransmit-timeout", true),
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "android_dns_proxy.h"
|
#include "android_dns_proxy.h"
|
||||||
|
#include "../charonservice.h"
|
||||||
|
|
||||||
#include <daemon.h>
|
#include <daemon.h>
|
||||||
#include <threading/rwlock.h>
|
#include <threading/rwlock.h>
|
||||||
@@ -137,7 +138,12 @@ static int open_socket(int family)
|
|||||||
DBG1(DBG_NET, "could not open proxy socket: %s", strerror(errno));
|
DBG1(DBG_NET, "could not open proxy socket: %s", strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!charon->kernel->bypass_socket(charon->kernel, skt, family))
|
/* not through the kernel interface: that also adds the socket to the list
|
||||||
|
* that is protected again on every network change, from which nothing is
|
||||||
|
* ever removed. These sockets live for SOCKET_TIMEOUT seconds, so the
|
||||||
|
* list only collected closed descriptors (43 failed protect() calls on
|
||||||
|
* one roam after an hour, more with every query) */
|
||||||
|
if (!charonservice->bypass_socket(charonservice, skt, FALSE))
|
||||||
{
|
{
|
||||||
DBG1(DBG_NET, "installing bypass policy for proxy socket failed");
|
DBG1(DBG_NET, "installing bypass policy for proxy socket failed");
|
||||||
close(skt);
|
close(skt);
|
||||||
|
|||||||
Reference in new issue
Block a user