if (PRISM_STATUS_OK == pv.status)
{
ri->ri_noise = pv.data;
- got_noise = 1;
+ /* got_noise = 1; */
}
break;
case PRISM_DID_RATE:
if (PRISM_STATUS_OK == pv.status)
{
ri->ri_power = pv.data;
- got_signal = 1;
+ /* got_signal = 1; */
}
break;
}
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)) ||
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, ðeader, sizeof (etheader));
memcpy (&write_pout.buf[sizeof (etheader)], &header[1], sendsize - sizeof (struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame));