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

Commit 00674124 authored by Yabin Cui's avatar Yabin Cui
Browse files

adb: fix a data race in local_socket_event_func.

If s->peer->enqueue() failed, s may be freed. So we should use
saved_xxx instead of s->xxx before verifying the return value.

Change-Id: I6c072406dceb98e2d02798d0dcdc428fa99e66fb
parent 53f11b62
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -360,9 +360,12 @@ static void local_socket_event_func(int fd, unsigned ev, void* _s)
        } else {
            p->len = max_payload - avail;

            // s->peer->enqueue() may call s->close() and free s,
            // so save variables for debug printing below.
            unsigned saved_id = s->id;
            int saved_fd = s->fd;
            r = s->peer->enqueue(s->peer, p);
            D("LS(%d): fd=%d post peer->enqueue(). r=%d\n", s->id, s->fd,
              r);
            D("LS(%u): fd=%d post peer->enqueue(). r=%d\n", saved_id, saved_fd, r);

            if (r < 0) {
                    /* error return means they closed us as a side-effect