add: m_freem(packet);
context: pppoe_input(struct mbuf *packet){	if(!packet)		return;		ifnet *sourceIfnet = packet->m_pkthdr.rcvif;	complete_pppoe_header *header = mtod(packet, complete_pppoe_header*);	PPPoEDevice *device;		LockerHelper locker(sLock);		for(int32 index = 0; index < sDevices->CountItems(); index++) {		device = sDevices->ItemAt(index);				if(device && device->EthernetIfnet() == sourceIfnet) {			if(header->ethernetHeader.ether_type == ETHERTYPE_PPPOE					&& header->pppoeHeader.sessionID == device->SessionID()) {#if DEBUG				dprintf("PPPoE: session packet\n");#endif				device->Receive(packet);				return;			} else if(header->ethernetHeader.ether_type == ETHERTYPE_PPPOEDISC					&& header->pppoeHeader.code != PADI					&& header->pppoeHeader.code != PADR					&& !device->IsDown()) {#if DEBUG				dprintf("PPPoE: discovery packet\n");#endif				DiscoveryPacket discovery(packet, ETHER_HDR_LEN);				if(discovery.InitCheck() != B_OK) {					dprintf("PPPoE: received corrupted discovery packet!\n");					return;				}								pppoe_tag *tag = discovery.TagWithType(HOST_UNIQ);				if(header->pppoeHeader.code == PADT || (tag && tag->length == 4						&& *((uint32*)tag->data) == device->HostUniq())) {					device->Receive(packet);					return;				}			}		}	}		dprintf("PPPoE: No device found for packet from: %s\n", sourceIfnet->if_name);	m_freem(packet);}