Bug 1395496
| Summary: | Libvirt allow paths symbol in ivshmem-plain/ivshmem name and qemu can access file out of /dev/shm | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Luyao Huang <lhuang> |
| Component: | libvirt | Assignee: | Martin Kletzander <mkletzan> |
| Status: | CLOSED ERRATA | QA Contact: | Jingjing Shao <jishao> |
| Severity: | medium | Docs Contact: | |
| Priority: | medium | ||
| Version: | 7.3 | CC: | dyuan, jsuchane, rbalakri, xuzhang |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | libvirt-3.2.0-1.el7 | Doc Type: | If docs needed, set a value |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2017-08-01 17:19:14 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
Related upstream commit:
commit 1c06d0faba152170de664f3ff4017cf4b59b44e4
Author: Martin Kletzander <mkletzan>
AuthorDate: Wed Feb 1 17:14:00 2017 +0100
Commit: Martin Kletzander <mkletzan>
CommitDate: Tue Feb 21 12:47:24 2017 +0100
qemu: Forbid slashes in shmem name
With that users could access files outside /dev/shm. That itself
isn't a security problem, but might cause some errors we want to
avoid. So let's forbid slashes as we do with domain and volume names
and also mention that in the schema.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1395496
Signed-off-by: Martin Kletzander <mkletzan>
v3.0.0-261-g1c06d0f
Verify this bug as below.
# rpm -q libvirt
libvirt-3.2.0-5.el7.x86_64
# virsh edit r7.2
Add this xml as below to guest xml
<shmem name='../../var/lib/libvirt/test-ivshmem'>
<model type='ivshmem-plain'/>
<size unit='M'>4</size>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</shmem>
Get the error as below
error: XML document failed to validate against schema: Unable to validate doc against /usr/share/libvirt/schemas/domain.rng
Extra element devices in interleave
Element domain failed to validate content
Failed. Try again? [y,n,i,f,?]:
enter i finish the edit
Domain r7.2 XML configuration edited.
# virsh start r7.2
error: Failed to start domain r7.2
error: unsupported configuration: shmem name '../../var/lib/libvirt/test-ivshmem' must not contain '/'
Edit the guest xml as below.
<shmem name='test-ivshmem'>
<model type='ivshmem-plain'/>
<size unit='M'>4</size>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</shmem>
# virsh start r7.2
Domain r7.2 started
# ps aux|grep qemu | grep shmmem
.....
-object memory-backend-file,id=shmmem-shmem0,mem-path=/dev/shm/test-ivshmem,size=4194304,share=yes -device ivshmem-plain,id=shmem0,memdev=shmmem-shmem0,bus=pci.0,addr=0x3 -msg timestamp=on
....
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHEA-2017:1846 Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHEA-2017:1846 |
Description of problem: Libvirt allow paths symbol in ivshmem-plain/ivshmem name and qemu can access file out of /dev/shm Version-Release number of selected component (if applicable): libvirt-2.0.0-10.el7_3.2.x86_64 How reproducible: 100% Steps to Reproduce: 1. prepare a guest with ivshmem-plain device like this: <shmem name='../../var/lib/libvirt/qemu/test-ivshmem'> <model type='ivshmem-plain'/> <size unit='M'>4</size> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </shmem> 2. start guest: # virsh start r7 Domain r7 started 3. check qemu cmd line: # ps aux|grep qemu ... -object memory-backend-file,id=shmmem-shmem0,mem-path=/dev/shm/../../var/lib/libvirt/qemu/test-ivshmem,size=4194304,share=yes... 4. check qemu file: # lsof /var/lib/libvirt/qemu/test-ivshmem COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME qemu-kvm 11816 qemu mem REG 253,0 4194304 67632139 /var/lib/libvirt/qemu/test-ivshmem qemu-kvm 11816 qemu 22u REG 253,0 4194304 67632139 /var/lib/libvirt/qemu/test-ivshmem Actual results: qemu can access file out of /dev/shm Expected results: I think it will be nice if libvirt forbid use paths symbol in ivshmem/ivshmem-plain name, and since guest can direct access that file on host. Additional info: