From 5fbb7fdb08b48a21c7314c1eeee677e4d6187c0a Mon Sep 17 00:00:00 2001 From: Mark Puha Date: Fri, 22 Sep 2023 06:19:38 +0200 Subject: [PATCH] handle postconfig error & fix uniquness --- device/device.go | 56 ++++++++++++++++++++++++++++-------------------- device/uapi.go | 10 +++++++-- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/device/device.go b/device/device.go index ef394cb..1861e30 100644 --- a/device/device.go +++ b/device/device.go @@ -565,28 +565,7 @@ func (device *Device) isAdvancedSecurityOn() bool { return device.isASecOn.IsSet() } -func (device *Device) handlePostConfig(tempASecCfg *aSecCfgType) (err error) { - isSameMap := map[uint32]bool{} - isSameMap[tempASecCfg.initPacketMagicHeader] = true - isSameMap[tempASecCfg.responsePacketMagicHeader] = true - isSameMap[tempASecCfg.underloadPacketMagicHeader] = true - isSameMap[tempASecCfg.transportPacketMagicHeader] = true - - // size will be different if same values - if len(isSameMap) != 4 { - err = ipcErrorf( - ipc.IpcErrorInvalid, - `magic headers should differ; got: init:%d; recv:%d; unde:%d; - tran:%d`, - tempASecCfg.initPacketMagicHeader, - tempASecCfg.responsePacketMagicHeader, - tempASecCfg.underloadPacketMagicHeader, - tempASecCfg.transportPacketMagicHeader, - ) - device.isASecOn.UnSet() - return - } - +func (device *Device) handlePostConfig(tempASecCfg *aSecCfgType) (err error) { isASecOn := false device.aSecMux.Lock() if tempASecCfg.junkPacketCount < 0 { @@ -737,10 +716,41 @@ func (device *Device) handlePostConfig(tempASecCfg *aSecCfgType) (err error) { MessageTransportType = device.aSecCfg.transportPacketMagicHeader } else { device.log.Verbosef("UAPI: Using default transport type") - MessageTransportType = 4 } + isSameMap := map[uint32]bool{} + isSameMap[MessageInitiationType] = true + isSameMap[MessageResponseType] = true + isSameMap[MessageCookieReplyType] = true + isSameMap[MessageTransportType] = true + + // size will be different if same values + if len(isSameMap) != 4 { + if err != nil { + err = ipcErrorf( + ipc.IpcErrorInvalid, + `magic headers should differ; got: init:%d; recv:%d; unde:%d; + tran:%d; %w`, + MessageInitiationType, + MessageResponseType, + MessageCookieReplyType, + MessageTransportType, + err, + ) + } else { + err = ipcErrorf( + ipc.IpcErrorInvalid, + `magic headers should differ; got: init:%d; recv:%d; unde:%d; + tran:%d`, + MessageInitiationType, + MessageResponseType, + MessageCookieReplyType, + MessageTransportType, + ) + } + } + newInitSize := MessageInitiationSize + device.aSecCfg.initPacketJunkSize newResponseSize := MessageResponseSize + device.aSecCfg.responsePacketJunkSize diff --git a/device/uapi.go b/device/uapi.go index 12f6a17..bacf45c 100644 --- a/device/uapi.go +++ b/device/uapi.go @@ -191,7 +191,10 @@ func (device *Device) IpcSetOperation(r io.Reader) (err error) { line := scanner.Text() if line == "" { // Blank line means terminate operation. - device.handlePostConfig(&tempASecCfg) + err := device.handlePostConfig(&tempASecCfg) + if err != nil { + return err + } peer.handlePostConfig() return nil } @@ -227,7 +230,10 @@ func (device *Device) IpcSetOperation(r io.Reader) (err error) { return err } } - device.handlePostConfig(&tempASecCfg) + err = device.handlePostConfig(&tempASecCfg) + if err != nil { + return err + } peer.handlePostConfig() if err := scanner.Err(); err != nil {