I took this over from @zyga-snapd.
I can confirm this issue by attaching a virtio mouse in a VM by using:
# hotplug a device
$ virsh qemu-monitor-command snappy-16-amd64 '{"execute":"device_add","arguments":{"driver":"virtio-mouse-pci","id":"input1","bus":"pci.0","addr":"0xa"}}'
# hotunplug a device
$ virsh qemu-monitor-command snappy-16-amd64 '{"execute":"device_del","arguments":{"id":"input1"}}'
Adding the device shows it comes up in udevadm monitor:
$ udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[3067.716884] add /devices/pci0000:00/0000:00:0a.0 (pci)
UDEV [3067.717008] add /devices/pci0000:00/0000:00:0a.0 (pci)
KERNEL[3067.736452] add /devices/pci0000:00/0000:00:0a.0/virtio4 (virtio)
UDEV [3067.737617] add /devices/pci0000:00/0000:00:0a.0/virtio4 (virtio)
KERNEL[3067.739057] add /devices/pci0000:00/0000:00:0a.0/virtio4/input/input20 (input)
UDEV [3067.741710] add /devices/pci0000:00/0000:00:0a.0/virtio4/input/input20 (input)
KERNEL[3067.742489] add /devices/pci0000:00/0000:00:0a.0/virtio4/input/input20/mouse2 (input)
UDEV [3067.743512] add /devices/pci0000:00/0000:00:0a.0/virtio4/input/input20/mouse2 (input)
KERNEL[3067.743596] add /devices/pci0000:00/0000:00:0a.0/virtio4/input/input20/event4 (input)
UDEV [3067.745421] add /devices/pci0000:00/0000:00:0a.0/virtio4/input/input20/event4 (input)
...
The two devices are correctly udev tagged:
$ udevadm info /sys/devices/pci0000:00/0000:00:0a.0/virtio4/input/input20/mouse2
P: /devices/pci0000:00/0000:00:0a.0/virtio4/input/input20/mouse2
N: input/mouse2
S: input/by-path/virtio-pci-0000:00:0a.0-mouse
E: DEVLINKS=/dev/input/by-path/virtio-pci-0000:00:0a.0-mouse
E: DEVNAME=/dev/input/mouse2
E: DEVPATH=/devices/pci0000:00/0000:00:0a.0/virtio4/input/input20/mouse2
E: ID_INPUT=1
E: ID_INPUT_MOUSE=1
E: ID_PATH=virtio-pci-0000:00:0a.0
E: ID_PATH_TAG=virtio-pci-0000_00_0a_0
E: ID_SERIAL=noserial
E: MAJOR=13
E: MINOR=34
E: SUBSYSTEM=input
E: TAGS=:snap_mir-kiosk_mir-kiosk:
E: USEC_INITIALIZED=3067743443
E: net.ifnames=0
$ udevadm info /sys/devices/pci0000:00/0000:00:0a.0/virtio4/input/input20/event4
P: /devices/pci0000:00/0000:00:0a.0/virtio4/input/input20/event4
N: input/event4
S: input/by-path/virtio-pci-0000:00:0a.0-event-mouse
E: DEVLINKS=/dev/input/by-path/virtio-pci-0000:00:0a.0-event-mouse
E: DEVNAME=/dev/input/event4
E: DEVPATH=/devices/pci0000:00/0000:00:0a.0/virtio4/input/input20/event4
E: ID_INPUT=1
E: ID_INPUT_MOUSE=1
E: ID_PATH=virtio-pci-0000:00:0a.0
E: ID_PATH_TAG=virtio-pci-0000_00_0a_0
E: ID_SERIAL=noserial
E: MAJOR=13
E: MINOR=68
E: SUBSYSTEM=input
E: TAGS=:snap_mir-kiosk_mir-kiosk:
E: USEC_INITIALIZED=3067745347
E: net.ifnames=0
but the devices are not added to the device cgroup:
$ grep 'c 13:34 rwm' /sys/fs/cgroup/devices/snap.mir-kiosk.mir-kiosk/devices.list
$ grep 'c 13:68 rwm' /sys/fs/cgroup/devices/snap.mir-kiosk.mir-kiosk/devices.list
$
restarting the snap makes them show up:
$ grep 'c 13:34 rwm' /sys/fs/cgroup/devices/snap.mir-kiosk.mir-kiosk/devices.list
c 13:34 rwm
$ grep 'c 13:68 rwm' /sys/fs/cgroup/devices/snap.mir-kiosk.mir-kiosk/devices.list
c 13:68 rwm
The problem seems to be with /lib/udev/snappy-app-dev and/or /lib/udev/rules.d/80-snappy-assign.rules. I’m continuing to look into this.