diff options
author | julian <julian@FreeBSD.org> | 2009-08-02 16:59:02 +0000 |
---|---|---|
committer | julian <julian@FreeBSD.org> | 2009-08-02 16:59:02 +0000 |
commit | b08de52c2d9909520082a33aafe53c6ee39df7d7 (patch) | |
tree | b1dc4eb8dc6e0665c941206acb39448f2a5d3f0f /sys/kern/kern_uuid.c | |
parent | 7f42e47a67ad2835fbc404253f835223020256d4 (diff) | |
download | FreeBSD-src-b08de52c2d9909520082a33aafe53c6ee39df7d7.zip FreeBSD-src-b08de52c2d9909520082a33aafe53c6ee39df7d7.tar.gz |
Stop uuidgen(2) from crashing in vimage kerenels.
make curvnet valid when needed.
Reviewed by: bz@
Approved by: re (kib)
Diffstat (limited to 'sys/kern/kern_uuid.c')
-rw-r--r-- | sys/kern/kern_uuid.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/kern_uuid.c b/sys/kern/kern_uuid.c index e7e4123..5b61ca4 100644 --- a/sys/kern/kern_uuid.c +++ b/sys/kern/kern_uuid.c @@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$"); #include <sys/socket.h> #include <sys/sysproto.h> #include <sys/systm.h> +#include <sys/jail.h> #include <sys/uuid.h> #include <net/if.h> @@ -93,6 +94,7 @@ uuid_node(uint16_t *node) struct sockaddr_dl *sdl; int i; + CURVNET_SET(TD_TO_VNET(curthread)); IFNET_RLOCK(); TAILQ_FOREACH(ifp, &V_ifnet, if_link) { /* Walk the address list */ @@ -105,6 +107,7 @@ uuid_node(uint16_t *node) bcopy(LLADDR(sdl), node, UUID_NODE_LEN); IF_ADDR_UNLOCK(ifp); IFNET_RUNLOCK(); + CURVNET_RESTORE(); return; } } @@ -115,6 +118,7 @@ uuid_node(uint16_t *node) for (i = 0; i < (UUID_NODE_LEN>>1); i++) node[i] = (uint16_t)arc4random(); *((uint8_t*)node) |= 0x01; + CURVNET_RESTORE(); } /* |