-
Bug
-
Resolution: Unresolved
-
Normal
-
None
-
CNV v4.19.0
-
Quality / Stability / Reliability
-
0.42
-
False
-
-
False
-
None
-
-
None
Description of problem:
"Permission denied" when accessing the virtiofs mount directory in previous VM if multiple VMs share the same pvc.
Version-Release number of selected component (if applicable):
How reproducible:
100%
Steps to Reproduce:
1. Prepare a pvc with ReadWriteMany access mode.
$ oc get pvc mypvc -o yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: openshift-storage.cephfs.csi.ceph.com
volume.kubernetes.io/storage-provisioner: openshift-storage.cephfs.csi.ceph.com
creationTimestamp: "2025-03-10T11:04:04Z"
finalizers:
- kubernetes.io/pvc-protection
name: mypvc
namespace: mytest
resourceVersion: "17072572"
uid: ab2427f6-e75d-4200-8d1f-079466ae145f
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: ocs-storagecluster-cephfs
volumeMode: Filesystem
volumeName: pvc-ab2427f6-e75d-4200-8d1f-079466ae145f
status:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
phase: Bound
2. Prepare two VMs, add the pvc to the VM as filesystems.
$ oc get vm example3 -o yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
annotations:
description: VM example
kubemacpool.io/transaction-timestamp: "2025-03-10T11:05:10.932986851Z"
kubevirt.io/latest-observed-api-version: v1
kubevirt.io/storage-observed-api-version: v1
creationTimestamp: "2025-03-10T10:41:32Z"
finalizers:
- kubevirt.io/virtualMachineControllerFinalize
generation: 6
labels:
app: example
os.template.kubevirt.io/fedora: "true"
name: example3
namespace: mytest
resourceVersion: "17074360"
uid: ce1dcf25-277b-4141-9c06-5ee17d5fb862
spec:
runStrategy: Always
template:
metadata:
annotations:
vm.kubevirt.io/flavor: small
vm.kubevirt.io/os: fedora
vm.kubevirt.io/workload: server
creationTimestamp: null
labels:
kubevirt.io/domain: example
kubevirt.io/size: small
spec:
architecture: amd64
domain:
cpu:
cores: 1
sockets: 1
threads: 1
devices:
disks:
- disk:
bus: virtio
name: rootdisk
- disk:
bus: virtio
name: cloudinitdisk
filesystems:
- name: mypvcdisk
virtiofs: {}
interfaces:
- macAddress: 02:06:d7:00:00:10
masquerade: {}
model: virtio
name: default
networkInterfaceMultiqueue: true
rng: {}
machine:
type: pc-q35-rhel9.4.0
memory:
guest: 2Gi
resources: {}
hostname: example
networks:
- name: default
pod: {}
terminationGracePeriodSeconds: 180
volumes:
- containerDisk:
image: quay.io/containerdisks/fedora
name: rootdisk
- cloudInitNoCloud:
userData: |-
#cloud-config
user: fedora
password: fedora
chpasswd: { expire: False }
name: cloudinitdisk
- name: mypvcdisk
persistentVolumeClaim:
claimName: mypvc
$ oc get vm example2 -o yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
annotations:
description: VM example
kubemacpool.io/transaction-timestamp: "2025-03-10T11:04:17.54103627Z"
kubevirt.io/latest-observed-api-version: v1
kubevirt.io/storage-observed-api-version: v1
creationTimestamp: "2025-03-10T08:14:50Z"
finalizers:
- kubevirt.io/virtualMachineControllerFinalize
generation: 22
labels:
app: example
os.template.kubevirt.io/fedora: "true"
name: example2
namespace: mytest
resourceVersion: "17076141"
uid: cab69ce5-cd62-40a1-9f60-918361ea5c70
spec:
runStrategy: Always
template:
metadata:
annotations:
vm.kubevirt.io/flavor: small
vm.kubevirt.io/os: fedora
vm.kubevirt.io/workload: server
creationTimestamp: null
labels:
kubevirt.io/domain: example
kubevirt.io/size: small
spec:
architecture: amd64
domain:
cpu:
cores: 1
sockets: 1
threads: 1
devices:
disks:
- disk:
bus: virtio
name: rootdisk
- disk:
bus: virtio
name: cloudinitdisk
filesystems:
- name: mydv-fs
virtiofs: {}
- name: mypvcdisk
virtiofs: {}
interfaces:
- macAddress: 02:06:d7:00:00:0f
masquerade: {}
model: virtio
name: default
networkInterfaceMultiqueue: true
rng: {}
machine:
type: pc-q35-rhel9.4.0
memory:
guest: 2Gi
resources: {}
hostname: example
networks:
- name: default
pod: {}
terminationGracePeriodSeconds: 180
volumes:
- containerDisk:
image: quay.io/containerdisks/fedora
name: rootdisk
- cloudInitNoCloud:
userData: |-
#cloud-config
user: fedora
password: fedora
chpasswd: { expire: False }
name: cloudinitdisk
- dataVolume:
name: dv-virtiofs
name: mydv-fs
- name: mypvcdisk
persistentVolumeClaim:
claimName: mypvc
3. Start both VMs.
4. Mount the virtiofs filesystem in one vm.
$ sudo mount -t virtiofs mypvcdisk /mnt
5. Mount the virtiofs filesystem in another vm.
$ sudo mount -t virtiofs mypvcdisk /mnt
6. List the files in the mount directory (/mnt) of the first VM.
Actual results:
ls: cannot open directory '/mnt': Permission denied
Expected results:
Both VM should list the directory successfully.
Additional info: