Broken tap networking on macOS host

Building QEMU with GLib newer than 2.58.3 corrupts tap networking on macOS hosts. Tap device was provided by Tun/Tap kernel extension installed from brew:

brew install tuntap

Checked revisions:

Host:

  • MacBook Pro (Retina, 15-inch, Mid 2015)
  • macOS Catalina 10.15.6 (19G2021)

Guest:

  • Linux Ubuntu 4.4.0-206-generic x86_64
  • macOS Catalina 10.15.7 as a guest, the behaviour is the same.

QEMU command line:

qemu-system-x86_64 \
  -drive file=hdd.qcow2,if=virtio,format=qcow2 \
  -m 3G \
  -nic tap,script=tap-up.sh

tap-up.sh:

 #!/bin/sh

 TAPDEV="$1"
 BRIDGEDEV="bridge0"

 ifconfig "$BRIDGEDEV" addm "$TAPDEV"

Enabling/disabling Hypervisor.Framework acceleration (-accel hvf) has no effect.

How to reproduce:

  1. Build & install GLib > 2.58.3 (tested 2.60.7)
  2. Build qemu-system-x86_64 with GLib > 2.58.3
  3. Boot any guest with tap networking enabled
  4. See that the external network is inaccessible

Hotfix:

  1. Build & install GLib 2.58.3
  2. Build qemu-system-x86_64 with GLib 2.58.3
  3. Boot any guest with tap networking enabled
  4. See that the external network is accessible, everything is working as expected

Moved from https://bugs.launchpad.net/qemu/+bug/1922102