]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-medsa.c
CVE-2016-7985,7986/fixup medsa_print()
[tcpdump] / print-medsa.c
index 005416f06f1ab7c08480ede1fb30c1585f2cb92e..4895fd94a41e488b54143cbd7dec5275bcc630d3 100644 (file)
@@ -138,15 +138,13 @@ medsa_print_full(netdissect_options *ndo,
 
 void
 medsa_print(netdissect_options *ndo,
-           const u_char *bp, u_int length, u_int caplen)
+           const u_char *bp, u_int length, u_int caplen,
+           const struct lladdr_info *src, const struct lladdr_info *dst)
 {
-       register const struct ether_header *ep;
        const struct medsa_pkthdr *medsa;
-       struct lladdr_info src, dst;
        u_short ether_type;
 
        medsa = (const struct medsa_pkthdr *)bp;
-       ep = (const struct ether_header *)(bp - sizeof(*ep));
        ND_TCHECK(*medsa);
 
        if (!ndo->ndo_eflag)
@@ -159,14 +157,10 @@ medsa_print(netdissect_options *ndo,
        length -= 8;
        caplen -= 8;
 
-       src.addr = ESRC(ep);
-       src.addr_string = etheraddr_string;
-       dst.addr = EDST(ep);
-       dst.addr_string = etheraddr_string;
        ether_type = EXTRACT_16BITS(&medsa->ether_type);
        if (ether_type <= ETHERMTU) {
                /* Try to print the LLC-layer header & higher layers */
-               if (llc_print(ndo, bp, length, caplen, &src, &dst) < 0) {
+               if (llc_print(ndo, bp, length, caplen, src, dst) < 0) {
                        /* packet type not known, print raw packet */
                        if (!ndo->ndo_suppress_default_print)
                                ND_DEFAULTPRINT(bp, caplen);
@@ -177,8 +171,7 @@ medsa_print(netdissect_options *ndo,
                                  tok2str(ethertype_values, "Unknown",
                                          ether_type),
                                  ether_type));
-
-               if (ethertype_print(ndo, ether_type, bp, length, caplen, &src, &dst) == 0) {
+               if (ethertype_print(ndo, ether_type, bp, length, caplen, src, dst) == 0) {
                        /* ether_type not known, print raw packet */
                        if (!ndo->ndo_eflag)
                                ND_PRINT((ndo, "ethertype %s (0x%04x) ",