From da5bc3b8202e959cd6e953bbde4e2ce914af3f52 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Mon, 14 Jun 2004 17:45:43 +0000 Subject: [PATCH] disconnect servers that send missaligned protocol --- src/ca/tcpiiu.cpp | 3 +-- src/cas/generic/casDGClient.cc | 7 +++++++ src/cas/generic/casStrmClient.cc | 6 +++--- src/rsrv/camessage.c | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ca/tcpiiu.cpp b/src/ca/tcpiiu.cpp index 33eb966fa..d93f5ad53 100644 --- a/src/ca/tcpiiu.cpp +++ b/src/ca/tcpiiu.cpp @@ -1091,8 +1091,7 @@ bool tcpiiu::processIncoming ( } // check for 8 byte aligned protocol - if ( ( ( this->curMsg.m_postsize >> 3 ) << 3 ) - != this->curMsg.m_postsize ) { + if ( this->curMsg.m_postsize & 0x7 ) { this->printf ( mgr.cbGuard, "CAC: server sent missaligned payload 0x%x\n", this->curMsg.m_postsize ); diff --git a/src/cas/generic/casDGClient.cc b/src/cas/generic/casDGClient.cc index 39737b472..a7a432022 100644 --- a/src/cas/generic/casDGClient.cc +++ b/src/cas/generic/casDGClient.cc @@ -781,6 +781,13 @@ caStatus casDGClient::processMsg () msgTmp.m_cid = epicsNTOH32 ( smallHdr.m_cid ); msgTmp.m_available = epicsNTOH32 ( smallHdr.m_available ); + if ( payloadSize & 0x7 ) { + status = this->sendErr ( + & msgTmp, invalidResID, ECA_INTERNAL, + "CAS: Datagram request wasn't 8 byte aligned" ); + this->in.removeMsg ( bytesLeft ); + break; + } msgSize = hdrSize + payloadSize; if ( bytesLeft < msgSize ) { diff --git a/src/cas/generic/casStrmClient.cc b/src/cas/generic/casStrmClient.cc index 9823265d3..97850527c 100644 --- a/src/cas/generic/casStrmClient.cc +++ b/src/cas/generic/casStrmClient.cc @@ -181,11 +181,11 @@ caStatus casStrmClient::processMsg () msgTmp.m_available = epicsNTOH32 ( smallHdr.m_available ); // disconnect clients that dont send 8 byte aligned payloads - if ( ( ( payloadSize >> 3 ) << 3 ) != payloadSize ) { + if ( payloadSize & 0x7 ) { caServerI::dumpMsg ( this->pHostName, this->pUserName, & msgTmp, 0, - "CAS: Missaligned protocol rejected\n" ); + "CAS: Stream request wasn't 8 byte aligned\n" ); status = this->sendErr ( guard, & msgTmp, invalidResID, ECA_INTERNAL, - "Missaligned protocol rejected" ); + "Stream request wasn't 8 byte aligned" ); status = S_cas_internal; break; } diff --git a/src/rsrv/camessage.c b/src/rsrv/camessage.c index b7410416a..ddf8fb481 100644 --- a/src/rsrv/camessage.c +++ b/src/rsrv/camessage.c @@ -2318,7 +2318,7 @@ int camessage ( struct client *client ) * disconnect clients that dont send 8 byte * aligned payloads */ - if ( ( ( msgsize >> 3 ) << 3 ) != msgsize ) { + if ( msgsize & 0x7 ) { send_err ( &msg, ECA_INTERNAL, client, "CAS: Missaligned protocol rejected" ); log_header ( "CAS: Missaligned protocol rejected",