From: Victor Julien Date: Fri, 25 Jan 2019 11:00:13 +0000 (+0100) Subject: dcerpc/udp: fix int mishandling in opnum parsing X-Git-Tag: suricata-5.0.0-beta1~220 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F3652%2Fhead;p=thirdparty%2Fsuricata.git dcerpc/udp: fix int mishandling in opnum parsing For Big Endian support in the protocol, the opnum would not be set correctly. Found using undefined sanitizer. --- diff --git a/src/app-layer-dcerpc-udp.c b/src/app-layer-dcerpc-udp.c index 6e845a8c79..9eb9695614 100644 --- a/src/app-layer-dcerpc-udp.c +++ b/src/app-layer-dcerpc-udp.c @@ -242,8 +242,8 @@ static int DCERPCUDPParseHeader(Flow *f, void *dcerpcudp_state, sstate->dcerpc.dcerpchdrudp.seqnum |= (uint32_t) *(p + 65) << 16; sstate->dcerpc.dcerpchdrudp.seqnum |= (uint32_t) *(p + 66) << 8; sstate->dcerpc.dcerpchdrudp.seqnum |= (uint32_t) *(p + 67); - sstate->dcerpc.dcerpchdrudp.opnum = *(p + 68) << 24; - sstate->dcerpc.dcerpchdrudp.opnum |= *(p + 69) << 16; + sstate->dcerpc.dcerpchdrudp.opnum = *(p + 68) << 8; + sstate->dcerpc.dcerpchdrudp.opnum |= *(p + 69); sstate->dcerpc.dcerpchdrudp.ihint = *(p + 70) << 8; sstate->dcerpc.dcerpchdrudp.ihint |= *(p + 71); sstate->dcerpc.dcerpchdrudp.ahint = *(p + 72) << 8;