Skip to content

Commit 93ff5fb

Browse files
authored
Merge pull request PowerDNS#17459 from miodvallat/1001nights
auth: stricter proxy protocol size limit enforcement
2 parents 131d9fa + fc3eb95 commit 93ff5fb

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

pdns/tcpreceiver.cc

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -275,14 +275,18 @@ void TCPNameserver::doConnection(int fd, Logr::log_t slog)
275275
for (;;) {
276276
used = isProxyHeaderComplete(proxyData);
277277
if (used < 0) {
278-
ssize_t origsize = proxyData.size();
279-
proxyData.resize(origsize + -used);
278+
size_t origsize = proxyData.size();
279+
auto extra = static_cast<size_t>(-used);
280+
if (origsize + extra > g_proxyProtocolMaximumSize) {
281+
throw NetworkError("Error reading PROXYv2 header from TCP client "+remote.toString()+": PROXYv2 header too big");
282+
}
283+
proxyData.resize(origsize + extra);
280284
if (maxConnectionDurationReached(d_maxConnectionDuration, start, remainingTime)) {
281285
throw NetworkError("Error reading PROXYv2 header from TCP client "+remote.toString()+": maximum TCP connection duration exceeded");
282286
}
283287

284288
try {
285-
readnWithTimeout(fd, &proxyData[origsize], -used, d_idleTimeout, true, remainingTime);
289+
readnWithTimeout(fd, &proxyData[origsize], extra, d_idleTimeout, true, remainingTime);
286290
}
287291
catch(NetworkError& ae) {
288292
throw NetworkError("Error reading PROXYv2 header from TCP client "+remote.toString()+": "+ae.what());

0 commit comments

Comments
 (0)