summaryrefslogtreecommitdiffstats
path: root/sys/net/if_tap.c
diff options
context:
space:
mode:
authoremax <emax@FreeBSD.org>2008-04-15 16:54:39 +0000
committeremax <emax@FreeBSD.org>2008-04-15 16:54:39 +0000
commit0a1ecdd2e84b6fef841d34c4bf72c2db962b0c24 (patch)
tree56543c3d20bf5f362a43275c50512ab4f4df9d1f /sys/net/if_tap.c
parenta19eeb1bb90be407b05f596feb555c76224c1e2b (diff)
downloadFreeBSD-src-0a1ecdd2e84b6fef841d34c4bf72c2db962b0c24.zip
FreeBSD-src-0a1ecdd2e84b6fef841d34c4bf72c2db962b0c24.tar.gz
Fix possible buffer overrun on 64-bit arch when generating MAC
address for tap interface. Reported by: Marc Lorner < marc dot loerner at hob dot de > Reviewed by: bms MFC after: 3 days
Diffstat (limited to 'sys/net/if_tap.c')
-rw-r--r--sys/net/if_tap.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/net/if_tap.c b/sys/net/if_tap.c
index e08b3b6..b8136d1 100644
--- a/sys/net/if_tap.c
+++ b/sys/net/if_tap.c
@@ -404,6 +404,7 @@ tapcreate(struct cdev *dev)
struct ifnet *ifp = NULL;
struct tap_softc *tp = NULL;
unsigned short macaddr_hi;
+ uint32_t macaddr_mid;
int unit, s;
char *name = NULL;
u_char eaddr[6];
@@ -432,8 +433,9 @@ tapcreate(struct cdev *dev)
/* generate fake MAC address: 00 bd xx xx xx unit_no */
macaddr_hi = htons(0x00bd);
+ macaddr_mid = (uint32_t) ticks;
bcopy(&macaddr_hi, eaddr, sizeof(short));
- bcopy(&ticks, &eaddr[2], sizeof(long));
+ bcopy(&macaddr_mid, &eaddr[2], sizeof(uint32_t));
eaddr[5] = (u_char)unit;
/* fill the rest and attach interface */
OpenPOWER on IntegriCloud