]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
dcerpc/udp: fix int mishandling in opnum parsing 3663/head
authorVictor Julien <victor@inliniac.net>
Fri, 25 Jan 2019 11:00:13 +0000 (12:00 +0100)
committerVictor Julien <victor@inliniac.net>
Sat, 16 Feb 2019 13:58:18 +0000 (14:58 +0100)
For Big Endian support in the protocol, the opnum would not be set
correctly.

Found using undefined sanitizer.

src/app-layer-dcerpc-udp.c

index e891c3eeebd4963a9fcde190c7ca3b1f4bbfa32d..8a2c8bad9e5b0f0793fcf863b2ddc773510340f5 100644 (file)
@@ -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;