error init&resp size same; improve logic

This commit is contained in:
Mark Puha 2023-09-15 18:24:20 +02:00
parent 36431519bd
commit 336282f299
2 changed files with 48 additions and 16 deletions

View file

@ -630,7 +630,7 @@ func (device *Device) handlePostConfig(tempASecCfg *aSecCfgType) (err error) {
} }
} }
if tempASecCfg.initPacketJunkSize != 0 { if tempASecCfg.initPacketJunkSize != 0 {
if 148+tempASecCfg.initPacketJunkSize >= MaxSegmentSize { if MessageInitiationSize+tempASecCfg.initPacketJunkSize >= MaxSegmentSize {
if err != nil { if err != nil {
err = ipcErrorf( err = ipcErrorf(
ipc.IpcErrorInvalid, ipc.IpcErrorInvalid,
@ -656,7 +656,7 @@ func (device *Device) handlePostConfig(tempASecCfg *aSecCfgType) (err error) {
} }
} }
if tempASecCfg.responsePacketJunkSize != 0 { if tempASecCfg.responsePacketJunkSize != 0 {
if 92+tempASecCfg.responsePacketJunkSize >= MaxSegmentSize { if MessageResponseSize+tempASecCfg.responsePacketJunkSize >= MaxSegmentSize {
if err != nil { if err != nil {
err = ipcErrorf( err = ipcErrorf(
ipc.IpcErrorInvalid, ipc.IpcErrorInvalid,
@ -720,9 +720,30 @@ func (device *Device) handlePostConfig(tempASecCfg *aSecCfgType) (err error) {
MessageTransportType = 4 MessageTransportType = 4
} }
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{ packetSizeToMsgType = map[int]uint32{
MessageInitiationSize + device.aSecCfg.initPacketJunkSize: MessageInitiationType, newInitSize: MessageInitiationType,
MessageResponseSize + device.aSecCfg.responsePacketJunkSize: MessageResponseType, newResponseSize: MessageResponseType,
MessageCookieReplySize: MessageCookieReplyType, MessageCookieReplySize: MessageCookieReplyType,
MessageTransportSize: MessageTransportType, MessageTransportSize: MessageTransportType,
} }
@ -733,6 +754,8 @@ func (device *Device) handlePostConfig(tempASecCfg *aSecCfgType) (err error) {
MessageCookieReplyType: 0, MessageCookieReplyType: 0,
MessageTransportType: 0, MessageTransportType: 0,
} }
}
device.isASecOn.SetTo(isASecOn) device.isASecOn.SetTo(isASecOn)
device.aSecMux.Unlock() device.aSecMux.Unlock()

View file

@ -135,15 +135,24 @@ func (device *Device) RoutineReceiveIncoming(
// check size of packet // check size of packet
packet := bufsArrs[i][:size] packet := bufsArrs[i][:size]
var msgType uint32
if device.isAdvancedSecurityOn() { if device.isAdvancedSecurityOn() {
var junkSize int var junkSize int
if msgType, ok := packetSizeToMsgType[size]; ok { if mapMsgType, ok := packetSizeToMsgType[size]; ok {
junkSize = msgTypeToJunkSize[msgType] 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 // shift junk
packet = packet[junkSize:] packet = packet[junkSize:]
} else {
msgType = binary.LittleEndian.Uint32(packet[:4])
} }
msgType := binary.LittleEndian.Uint32(packet[:4])
switch msgType { switch msgType {
// check if transport // check if transport