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

Commit 95ef8286 authored by Benoit Goby's avatar Benoit Goby
Browse files

Fix adb leaking file descriptors to forked processes

accept() creates a new file descriptor that should be closed on exec so
that forked processes don't keep a fd opened on the socket.

This also fixes b/3297070 where adb hangs after running adb on the
target.

Change-Id: I8df511289e5549ae49b4824c9dfb71a3bf85eae8
parent 305b4b0f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -682,9 +682,11 @@ void start_device_log(void)
    dup2(fd, 1);
    dup2(fd, 2);
    fprintf(stderr,"--- adb starting (pid %d) ---\n", getpid());
    adb_close(fd);

    fd = unix_open("/dev/null", O_RDONLY);
    dup2(fd, 0);
    adb_close(fd);
}
#endif

+1 −0
Original line number Diff line number Diff line
@@ -499,6 +499,7 @@ jdwp_control_init( JdwpControl* control,

    /* only wait for incoming connections */
    fdevent_add(control->fde, FDE_READ);
    close_on_exec(s);

    D("jdwp control socket started (%d)\n", control->listen_socket);
    return 0;
+1 −0
Original line number Diff line number Diff line
@@ -309,6 +309,7 @@ static int create_subprocess(const char *cmd, const char *arg0, const char *arg1
        dup2(pts, 1);
        dup2(pts, 2);

        adb_close(pts);
        adb_close(ptm);

        execl(cmd, cmd, arg0, arg1, NULL);
+7 −1
Original line number Diff line number Diff line
@@ -387,7 +387,13 @@ static __inline__ int adb_creat(const char* path, int mode)

static __inline__ int  adb_socket_accept(int  serverfd, struct sockaddr*  addr, socklen_t  *addrlen)
{
    return  accept( serverfd, addr, addrlen );
    int fd;

    fd = accept(serverfd, addr, addrlen);
    if (fd >= 0)
        close_on_exec(fd);

    return fd;
}

#undef   accept