summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_uuid.c
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>2009-08-02 16:59:02 +0000
committerjulian <julian@FreeBSD.org>2009-08-02 16:59:02 +0000
commitb08de52c2d9909520082a33aafe53c6ee39df7d7 (patch)
treeb1dc4eb8dc6e0665c941206acb39448f2a5d3f0f /sys/kern/kern_uuid.c
parent7f42e47a67ad2835fbc404253f835223020256d4 (diff)
downloadFreeBSD-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.c4
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();
}
/*
OpenPOWER on IntegriCloud