aboutsummaryrefslogtreecommitdiffstats
path: root/src/drivers/driver_bsd.c
diff options
context:
space:
mode:
authorMasashi Honma <honma@ictec.co.jp>2010-01-16 09:47:05 (GMT)
committerJouni Malinen <j@w1.fi>2010-01-16 09:47:05 (GMT)
commit11386396cc5515b2477b29f4dba8c3a03eb24263 (patch)
tree55db0a544918bb523f0ad49fdd0681eb2d2b68f0 /src/drivers/driver_bsd.c
parent73b217570c2dabcf409a19e746c6a929f88a5781 (diff)
downloadhostap-11386396cc5515b2477b29f4dba8c3a03eb24263.zip
hostap-11386396cc5515b2477b29f4dba8c3a03eb24263.tar.gz
hostap-11386396cc5515b2477b29f4dba8c3a03eb24263.tar.bz2
driver_bsd.c: Clean up EAPOL frame transmission code
The bsd_send_eapol() prepares 3000 bytes buffer for every EAPOL frame transmission. I think malloc() is better way for efficient memory use.
Diffstat (limited to 'src/drivers/driver_bsd.c')
-rw-r--r--src/drivers/driver_bsd.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/src/drivers/driver_bsd.c b/src/drivers/driver_bsd.c
index bd3f56b..9744570 100644
--- a/src/drivers/driver_bsd.c
+++ b/src/drivers/driver_bsd.c
@@ -696,39 +696,35 @@ bsd_send_eapol(void *priv, const u8 *addr, const u8 *data, size_t data_len,
int encrypt, const u8 *own_addr)
{
struct bsd_driver_data *drv = priv;
- unsigned char buf[3000];
- unsigned char *bp = buf;
+ unsigned char *bp;
struct l2_ethhdr *eth;
size_t len;
int status;
/*
- * Prepend the Etherent header. If the caller left us
+ * Prepend the Ethernet header. If the caller left us
* space at the front we could just insert it but since
* we don't know we copy to a local buffer. Given the frequency
* and size of frames this probably doesn't matter.
*/
len = data_len + sizeof(struct l2_ethhdr);
- if (len > sizeof(buf)) {
- bp = malloc(len);
- if (bp == NULL) {
- printf("EAPOL frame discarded, cannot malloc temp "
- "buffer of size %u!\n", (unsigned int) len);
- return -1;
- }
+ bp = os_zalloc(len);
+ if (bp == NULL) {
+ wpa_printf(MSG_ERROR, "malloc() failed for bsd_send_eapol"
+ "(len=%lu)", (unsigned long) len);
+ return -1;
}
eth = (struct l2_ethhdr *) bp;
- memcpy(eth->h_dest, addr, ETH_ALEN);
- memcpy(eth->h_source, own_addr, ETH_ALEN);
+ os_memcpy(eth->h_dest, addr, ETH_ALEN);
+ os_memcpy(eth->h_source, own_addr, ETH_ALEN);
eth->h_proto = htons(ETH_P_EAPOL);
- memcpy(eth+1, data, data_len);
+ os_memcpy(eth + 1, data, data_len);
wpa_hexdump(MSG_MSGDUMP, "TX EAPOL", bp, len);
status = l2_packet_send(drv->sock_xmit, addr, ETH_P_EAPOL, bp, len);
- if (bp != buf)
- free(bp);
+ os_free(bp);
return status;
}