Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff9da494 authored by Chad Brubaker's avatar Chad Brubaker Committed by Android Git Automerger
Browse files

am 4b59883a: am 7c2b1625: am 78f204ae: am 8e240af5: Merge "Remove...

am 4b59883a: am 7c2b1625: am 78f204ae: am 8e240af5: Merge "Remove SO_BINDTODEVICE from VPN protect" into klp-dev

* commit '4b59883a':
  Remove SO_BINDTODEVICE from VPN protect
parents 78a06696 4b59883a
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -151,9 +151,10 @@ public class VpnService extends Service {
    }

    /**
     * Protect a socket from VPN connections. The socket will be bound to the
     * current default network interface, so its traffic will not be forwarded
     * through VPN. This method is useful if some connections need to be kept
     * Protect a socket from VPN connections. After protecting, data sent
     * through this socket will go directly to the underlying network,
     * so its traffic will not be forwarded through the VPN.
     * This method is useful if some connections need to be kept
     * outside of VPN. For example, a VPN tunnel should protect itself if its
     * destination is covered by VPN routes. Otherwise its outgoing packets
     * will be sent back to the VPN interface and cause an infinite loop. This
+1 −2
Original line number Diff line number Diff line
@@ -3665,8 +3665,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            int user = UserHandle.getUserId(Binder.getCallingUid());
            if (ConnectivityManager.isNetworkTypeValid(type) && mNetTrackers[type] != null) {
                synchronized(mVpns) {
                    mVpns.get(user).protect(socket,
                            mNetTrackers[type].getLinkProperties().getInterfaceName());
                    mVpns.get(user).protect(socket);
                }
                return true;
            }
+3 −7
Original line number Diff line number Diff line
@@ -284,13 +284,12 @@ public class Vpn extends BaseNetworkStateTracker {
    }

    /**
     * Protect a socket from routing changes by binding it to the given
     * interface. The socket is NOT closed by this method.
     * Protect a socket from VPN rules by binding it to the main routing table.
     * The socket is NOT closed by this method.
     *
     * @param socket The socket to be bound.
     * @param interfaze The name of the interface.
     */
    public void protect(ParcelFileDescriptor socket, String interfaze) throws Exception {
    public void protect(ParcelFileDescriptor socket) throws Exception {

        PackageManager pm = mContext.getPackageManager();
        int appUid = pm.getPackageUid(mPackage, mUserId);
@@ -304,8 +303,6 @@ public class Vpn extends BaseNetworkStateTracker {
        } finally {
            Binder.restoreCallingIdentity(token);
        }
        // bind the socket to the interface
        jniProtect(socket.getFd(), interfaze);

    }

@@ -684,7 +681,6 @@ public class Vpn extends BaseNetworkStateTracker {
    private native int jniSetRoutes(String interfaze, String routes);
    private native void jniReset(String interfaze);
    private native int jniCheck(String interfaze);
    private native void jniProtect(int socket, String interfaze);

    private static RouteInfo findIPv4DefaultRoute(LinkProperties prop) {
        for (RouteInfo route : prop.getAllRoutes()) {
+0 −23
Original line number Diff line number Diff line
@@ -302,15 +302,6 @@ static int check_interface(const char *name)
    return ifr4.ifr_flags;
}

static int bind_to_interface(int socket, const char *name)
{
    if (setsockopt(socket, SOL_SOCKET, SO_BINDTODEVICE, name, strlen(name))) {
        ALOGE("Cannot bind socket to %s: %s", name, strerror(errno));
        return SYSTEM_ERROR;
    }
    return 0;
}

//------------------------------------------------------------------------------

static void throwException(JNIEnv *env, int error, const char *message)
@@ -433,19 +424,6 @@ static jint check(JNIEnv *env, jobject thiz, jstring jName)
    return flags;
}

static void protect(JNIEnv *env, jobject thiz, jint socket, jstring jName)
{
    const char *name = jName ? env->GetStringUTFChars(jName, NULL) : NULL;
    if (!name) {
        jniThrowNullPointerException(env, "name");
        return;
    }
    if (bind_to_interface(socket, name) < 0) {
        throwException(env, SYSTEM_ERROR, "Cannot protect socket");
    }
    env->ReleaseStringUTFChars(jName, name);
}

//------------------------------------------------------------------------------

static JNINativeMethod gMethods[] = {
@@ -455,7 +433,6 @@ static JNINativeMethod gMethods[] = {
    {"jniSetRoutes", "(Ljava/lang/String;Ljava/lang/String;)I", (void *)setRoutes},
    {"jniReset", "(Ljava/lang/String;)V", (void *)reset},
    {"jniCheck", "(Ljava/lang/String;)I", (void *)check},
    {"jniProtect", "(ILjava/lang/String;)V", (void *)protect},
};

int register_android_server_connectivity_Vpn(JNIEnv *env)