Some XML name elements will be used as part of a path. These types of names should never include '/', nor be '.' or '..'. Possibly other names should be avoided as well. One example of such a name element is <shmem name='NAME'> which will use NAME in the patch /dev/shm/NAME, but there are likely others to check as well.
Actually for the example in the description (shmem). A single '/' could be allowed, as long as it's the first character of the name. Knowing how shmem-name is used (by shm_open), we see that "/NAME" is POSIX compliant, and is even required on some systems to allow opening a pre-existing object of the same name. The behavior of opening a pre-existing object without the slash is implementation defined per POSIX. But, this complicates libvirt, and allows some QEMU internals knowledge to leak into it (we have to know that QEMU uses shm_open on this particular name element), so I'm not sure if it should be considered. Linux doesn't care if the slash is there or not, pre-existing objects are opened as if it was.
I think that's probably obscure enough that we can just unconditionally block use of '/' in names and not cause problems for apps/users.
This should probably be fine to validate in qemuDomainPostParse, since presumably there isn't any previous configs we need to worry about. Tagging as LibvirtFirstBug
Patch proposed upstream: https://www.redhat.com/archives/libvir-list/2018-July/msg00586.html
commit 9ff956b26aba64e1519a338197891ac53f033e7f Author: Simon Kobyda <skobyda> Date: Wed Aug 1 17:50:03 2018 +0200 conf: virDomainDefValidateInternal prohibit some characters in shmem name