SSU2: Drop short session request messages in packet handler

both before and after retry, before passing to IES2
log tweaks
This commit is contained in:
zzz
2022-12-14 14:06:18 -05:00
parent 28a79def5a
commit 9f9a88cf32

View File

@@ -883,6 +883,13 @@ class PacketHandler {
// can't have session confirmed with null state, avoid NPE below
return false;
}
if (type == SSU2Util.SESSION_REQUEST_FLAG_BYTE &&
packet.getPacket().getLength() == SSU2Util.MIN_HANDSHAKE_DATA_LEN - 1) {
// i2pd short 87 byte session request thru 0.9.56, drop packet
if (_log.shouldWarn())
_log.warn("Short Session Request len 87 on " + state);
return true;
}
} else {
type = SSU2Util.SESSION_REQUEST_FLAG_BYTE;
}
@@ -900,11 +907,18 @@ class PacketHandler {
header.getNetID() != _networkID) {
// possibly token-request-after-retry? let's see...
header = SSU2Header.trialDecryptLongHeader(packet, k1, k2);
if (header != null && header.getType() == SSU2Util.SESSION_REQUEST_FLAG_BYTE &&
header.getVersion() == 2 && header.getNetID() == _networkID &&
packet.getPacket().getLength() == 87) {
// i2pd short 87 byte session request thru 0.9.56, drop packet
if (_log.shouldWarn())
_log.warn("Short Session Request after Retry len 87 on " + state);
return true;
}
if (header == null ||
header.getType() != SSU2Util.TOKEN_REQUEST_FLAG_BYTE ||
header.getVersion() != 2 ||
header.getNetID() != _networkID) {
// i2pd short 87 byte session request thru 0.9.56
if (_log.shouldWarn())
_log.warn("Failed decrypt Session/Token Request after Retry: " + header +
" len " + packet.getPacket().getLength() + " on " + state);
@@ -914,15 +928,18 @@ class PacketHandler {
}
if (header.getSrcConnID() != state.getSendConnID()) {
if (_log.shouldWarn())
_log.warn("Bad Source Conn id " + header + " on " + state);
_log.warn("Bad Source Conn id " + header +
" len " + packet.getPacket().getLength() + " on " + state);
// TODO could be a retransmitted Session Request,
// tell establisher?
return false;
}
if (header.getDestConnID() != state.getRcvConnID()) {
// i2pd bug changing after retry, thru 0.9.56, drop packet
if (_log.shouldWarn())
_log.warn("Bad Dest Conn id " + header + " on " + state);
return false;
_log.warn("Bad Dest Conn id " + header +
" len " + packet.getPacket().getLength() + " on " + state);
return true;
}
type = header.getType();
} else {
@@ -944,7 +961,7 @@ class PacketHandler {
if (header.getPacketNumber() != 0 ||
header.getType() != SSU2Util.SESSION_CONFIRMED_FLAG_BYTE) {
if (_log.shouldWarn())
_log.warn("Queue possible data packet with header " + header + " on: " + state);
_log.warn("Queue possible data packet " + header + " on: " + state);
// TODO either attempt to decrypt as a retransmitted
// Session Request or Token Request,
// or just tell establisher so it can retransmit Session Created or Retry