microsoft / microsoft/vscode

High CPU usage (infinite loop) When Incorrect Proxy URL is Set

Open
#326,765 1 comment 0 reactions 2 assignees Claimed by @deepak1556 View on GitHub
bug network upstream upstream-issue-fixed
Dominant language
TypeScript
Stars
193k
Forks
42.4k
PR merge metrics
PR metrics pending

Description

Does this issue occur when all extensions are disabled?: Yes

- VS Code Version: 1.129.1 (8a7abeba)
- OS Version: Ubuntu 22.04 (6.8.0-79-generic)

Steps to Reproduce:

1. start a `SOCKS` proxy, e.g. `ssh -D 15891 127.0.0.1`.
2. write `http://127.0.0.1:15891` (using incorrect protocol) in `settings.json`: `http.proxy`.
3. maybe restart vscode
4. you will notice code's `node.mojom.NodeService` using 100% CPU (through `htop`).
5. a quick `strace` shows vscode failed to communicate with the proxy server and retires without delay and without retry limit.

```
close(63) = 0
getsockopt(71, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
setsockopt(71, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(71, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(71, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(71, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(71, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(71, {sa_family=AF_INET, sin_port=htons(33634), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
setsockopt(71, SOL_IP, IP_TOS, [0], 4) = 0
write(71, "CONNECT api.github.com:443 HTTP/"..., 110) = 110
getsockopt(72, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
setsockopt(72, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(72, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(72, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(72, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(72, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(72, {sa_family=AF_INET, sin_port=htons(33646), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
setsockopt(72, SOL_IP, IP_TOS, [0], 4) = 0
write(72, "CONNECT api.github.com:443 HTTP/"..., 110) = 110
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 62
setsockopt(62, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(62, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(62, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(62, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(62, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
connect(62, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 63
setsockopt(63, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(63, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(63, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(63, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(63, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
connect(63, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
futex(0xd4c00053f88, FUTEX_WAKE_PRIVATE, 1) = 1
io_uring_enter(19, 4, 4, IORING_ENTER_GETEVENTS, NULL, 0) = 4
io_uring_enter(19, 2, 2, IORING_ENTER_GETEVENTS, NULL, 0) = 2
epoll_pwait(18, [{events=EPOLLIN, data={u32=24, u64=24}}, {events=EPOLLIN, data={u32=71, u64=71}}, {events=EPOLLIN, data={u32=72, u64=72}}, {events=EPOLLOUT, data={u32=62, u64=62}}, {events=EPOLLOUT, data={u32=63, u64=63}}], 1024, 0, NULL, 8) = 5
read(24, "\r\0\0\0\0\0\0\0", 1024) = 8
read(71, "", 65536) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(71, {sa_family=AF_INET, sin_port=htons(33634), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
getpeername(71, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
epoll_ctl(18, EPOLL_CTL_DEL, 71, 0x7ffedf9647b0) = 0
close(71) = 0
read(72, "", 65536) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(72, {sa_family=AF_INET, sin_port=htons(33646), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
getpeername(72, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
epoll_ctl(18, EPOLL_CTL_DEL, 72, 0x7ffedf9647b0) = 0
close(72) = 0
getsockopt(62, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
setsockopt(62, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(62, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(62, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(62, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(62, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(62, {sa_family=AF_INET, sin_port=htons(33650), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
setsockopt(62, SOL_IP, IP_TOS, [0], 4) = 0
write(62, "CONNECT configs.gitkraken.dev:44"..., 124) = 124
getsockopt(63, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
setsockopt(63, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(63, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(63, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(63, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(63, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(63, {sa_family=AF_INET, sin_port=htons(33666), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
setsockopt(63, SOL_IP, IP_TOS, [0], 4) = 0
write(63, "CONNECT api.gitkraken.dev:443 HT"..., 116) = 116
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 71
setsockopt(71, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(71, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(71, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(71, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(71, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
connect(71, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 72
setsockopt(72, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(72, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(72, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(72, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(72, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
connect(72, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
futex(0xd4c00053f88, FUTEX_WAKE_PRIVATE, 1) = 1
io_uring_enter(19, 4, 4, IORING_ENTER_GETEVENTS, NULL, 0) = 4
io_uring_enter(19, 2, 2, IORING_ENTER_GETEVENTS, NULL, 0) = 2
epoll_pwait(18, [{events=EPOLLIN, data={u32=24, u64=24}}, {events=EPOLLIN, data={u32=62, u64=62}}, {events=EPOLLIN, data={u32=63, u64=63}}, {events=EPOLLOUT, data={u32=71, u64=71}}, {events=EPOLLOUT, data={u32=72, u64=72}}], 1024, 0, NULL, 8) = 5
read(24, "\r\0\0\0\0\0\0\0", 1024) = 8
read(62, "", 65536) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(62, {sa_family=AF_INET, sin_port=htons(33650), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
getpeername(62, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
epoll_ctl(18, EPOLL_CTL_DEL, 62, 0x7ffedf9647b0) = 0
close(62) = 0
read(63, "", 65536) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(63, {sa_family=AF_INET, sin_port=htons(33666), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
getpeername(63, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
epoll_ctl(18, EPOLL_CTL_DEL, 63, 0x7ffedf9647b0) = 0
close(63) = 0
getsockopt(71, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
setsockopt(71, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(71, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(71, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(71, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(71, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(71, {sa_family=AF_INET, sin_port=htons(33674), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
setsockopt(71, SOL_IP, IP_TOS, [0], 4) = 0
write(71, "CONNECT api.github.com:443 HTTP/"..., 110) = 110
getsockopt(72, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
setsockopt(72, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(72, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(72, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(72, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(72, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(72, {sa_family=AF_INET, sin_port=htons(33690), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
setsockopt(72, SOL_IP, IP_TOS, [0], 4) = 0
write(72, "CONNECT api.github.com:443 HTTP/"..., 110) = 110
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 62
setsockopt(62, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(62, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(62, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(62, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(62, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
connect(62, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 63
setsockopt(63, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(63, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(63, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(63, SOL_TCP, TCP_KEEPINTVL, [1], 4) = 0
setsockopt(63, SOL_TCP, TCP_KEEPCNT, [10], 4) = 0
connect(63, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
futex(0xd4c00053f88, FUTEX_WAKE_PRIVATE, 1) = 1
io_uring_enter(19, 4, 4, IORING_ENTER_GETEVENTS, NULL, 0) = 4
io_uring_enter(19, 2, 2, IORING_ENTER_GETEVENTS, NULL, 0) = 2
epoll_pwait(18, [{events=EPOLLIN, data={u32=24, u64=24}}, {events=EPOLLIN, data={u32=71, u64=71}}, {events=EPOLLIN, data={u32=72, u64=72}}, {events=EPOLLOUT, data={u32=62, u64=62}}, {events=EPOLLOUT, data={u32=63, u64=63}}], 1024, 0, NULL, 8) = 5
read(24, "\r\0\0\0\0\0\0\0", 1024) = 8
read(71, "", 65536) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
getsockname(71, {sa_family=AF_INET, sin_port=htons(33674), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
getpeername(71, {sa_family=AF_INET, sin_port=htons(15891), sin_addr=inet_addr("127.0.0.1")}, [128 => 16]) = 0
write(24, "\1\0\0\0\0\0\0\0", 8) = 8
epoll_ctl(18, EPOLL_CTL_DEL, 71, 0x7ffedf9647b0) = 0
close(71) = 0
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.