diff --git a/device/device.go b/device/device.go index 18376ee..d9497a1 100644 --- a/device/device.go +++ b/device/device.go @@ -630,7 +630,7 @@ func (device *Device) handlePostConfig(tempASecCfg *aSecCfgType) (err error) { } } if tempASecCfg.initPacketJunkSize != 0 { - if 148+tempASecCfg.initPacketJunkSize >= MaxSegmentSize { + if MessageInitiationSize+tempASecCfg.initPacketJunkSize >= MaxSegmentSize { if err != nil { err = ipcErrorf( ipc.IpcErrorInvalid, @@ -656,7 +656,7 @@ func (device *Device) handlePostConfig(tempASecCfg *aSecCfgType) (err error) { } } if tempASecCfg.responsePacketJunkSize != 0 { - if 92+tempASecCfg.responsePacketJunkSize >= MaxSegmentSize { + if MessageResponseSize+tempASecCfg.responsePacketJunkSize >= MaxSegmentSize { if err != nil { err = ipcErrorf( ipc.IpcErrorInvalid, @@ -720,19 +720,42 @@ func (device *Device) handlePostConfig(tempASecCfg *aSecCfgType) (err error) { MessageTransportType = 4 } - packetSizeToMsgType = map[int]uint32{ - MessageInitiationSize + device.aSecCfg.initPacketJunkSize: MessageInitiationType, - MessageResponseSize + device.aSecCfg.responsePacketJunkSize: MessageResponseType, - MessageCookieReplySize: MessageCookieReplyType, - MessageTransportSize: MessageTransportType, + newInitSize := MessageInitiationSize + device.aSecCfg.initPacketJunkSize + newResponseSize := MessageResponseSize + device.aSecCfg.responsePacketJunkSize + + if newInitSize == newResponseSize { + if err != nil { + err = ipcErrorf( + ipc.IpcErrorInvalid, + `new init size:%d; and new response size:%d; should differ; %w`, + newInitSize, + newResponseSize, + err, + ) + } else { + err = ipcErrorf( + ipc.IpcErrorInvalid, + `new init size:%d; and new response size:%d; should differ`, + newInitSize, + newResponseSize, + ) + } + } else { + packetSizeToMsgType = map[int]uint32{ + newInitSize: MessageInitiationType, + newResponseSize: MessageResponseType, + MessageCookieReplySize: MessageCookieReplyType, + MessageTransportSize: MessageTransportType, + } + + msgTypeToJunkSize = map[uint32]int{ + MessageInitiationType: device.aSecCfg.initPacketJunkSize, + MessageResponseType: device.aSecCfg.responsePacketJunkSize, + MessageCookieReplyType: 0, + MessageTransportType: 0, + } } - msgTypeToJunkSize = map[uint32]int{ - MessageInitiationType: device.aSecCfg.initPacketJunkSize, - MessageResponseType: device.aSecCfg.responsePacketJunkSize, - MessageCookieReplyType: 0, - MessageTransportType: 0, - } device.isASecOn.SetTo(isASecOn) device.aSecMux.Unlock() diff --git a/device/receive.go b/device/receive.go index df9671e..cc031b2 100644 --- a/device/receive.go +++ b/device/receive.go @@ -135,15 +135,24 @@ func (device *Device) RoutineReceiveIncoming( // check size of packet packet := bufsArrs[i][:size] + var msgType uint32 if device.isAdvancedSecurityOn() { var junkSize int - if msgType, ok := packetSizeToMsgType[size]; ok { - junkSize = msgTypeToJunkSize[msgType] + if mapMsgType, ok := packetSizeToMsgType[size]; ok { + junkSize = msgTypeToJunkSize[mapMsgType] + msgType = mapMsgType + } else { + msgType = binary.LittleEndian.Uint32(packet[:4]) + if msgType != MessageTransportType { + device.log.Verbosef("ASec: Received message with unknown type") + continue + } } // shift junk packet = packet[junkSize:] + } else { + msgType = binary.LittleEndian.Uint32(packet[:4]) } - msgType := binary.LittleEndian.Uint32(packet[:4]) switch msgType { // check if transport