docu
[oweals/gnunet.git] / src / transport / gnunet-helper-transport-wlan.c
index 1b599d1ce332255284cf61f79bc23545775c2978..3ad4d64c424dbbf6433b4015d971e47328037e0e 100644 (file)
@@ -1798,6 +1798,12 @@ static int
 mac_test (const struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame *taIeeeHeader,
           const struct HardwareInfos *dev)
 {
+  static struct GNUNET_TRANSPORT_WLAN_MacAddress all_zeros;
+
+  if ( (0 == memcmp (&taIeeeHeader->addr3, &all_zeros, MAC_ADDR_SIZE)) ||
+       (0 == memcmp (&taIeeeHeader->addr1, &all_zeros, MAC_ADDR_SIZE)) )
+    return 0; /* some drivers set no Macs, then assume it is all for us! */
+
   if (0 != memcmp (&taIeeeHeader->addr3, &mac_bssid_gnunet, MAC_ADDR_SIZE))
     return 1; /* not a GNUnet ad-hoc package */
   if ( (0 == memcmp (&taIeeeHeader->addr1, &dev->pl_mac, MAC_ADDR_SIZE)) ||
@@ -1879,7 +1885,8 @@ stdin_send_hw (void *cls, const struct GNUNET_MessageHeader *hdr)
     break;
   case ARPHRD_ETHER:
     etheader.dst = header->frame.addr1;
-    etheader.src = header->frame.addr2;
+    /* etheader.src = header->frame.addr2; --- untrusted input */
+    etheader.src = dev->pl_mac;
     etheader.type = htons (ETH_P_IP);
     memcpy (write_pout.buf, &etheader, sizeof (etheader));
     memcpy (&write_pout.buf[sizeof (etheader)], &header[1], sendsize - sizeof (struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame));