shithub: front

Download patch

ref: 21d7790b3b0dde7f2a641d8815f66dec5cef6d2c
parent: 8f3b47e092eb07e20238089a047f2993242d3302
author: Ori Bernstein <ori@eigenstate.org>
date: Mon Aug 4 10:43:01 EDT 2025

vmx: whine when we have an invalid mac address

it's annoying if we accept the address for the interface and then guests refuse
to handle it, so let's reject it early.

--- a/sys/src/cmd/vmx/virtio.c
+++ b/sys/src/cmd/vmx/virtio.c
@@ -688,9 +688,22 @@
 	mkvioqueue(d, 1024, viowakeup);
 	mkvioqueue(d, 1024, viowakeup);
 	mkvioqueue(d, 32, vionetcmd);
-	if(ea == nil || parseether(d->net.mac, ea)){
+	if(ea == nil){
 		genrandom(d->net.mac, 6);
 		d->net.mac[0] = d->net.mac[0] & ~1 | 2;
+	}else{
+		if(parseether(d->net.mac, ea) != 0){
+			fprint(2, "unparsable mac addr: %s\n", ea);
+			return -1;
+		}
+		if((d->net.mac[0] & 1) != 0){
+			werrstr("invalid mac addr: must be unicast", d->net.mac[0]);
+			return -1;
+		}
+		if((d->net.mac[0] & 2) == 0){
+			fprint(2, "invalid mac addr: must not be local", d->net.mac[0]);
+			return -1;
+		}
 	}
 	d->net.flags = flags;
 	d->devfeat = 1<<5|1<<16|1<<17|1<<18|1<<20;
--