diff options
author | Yann Droneaud <ydroneaud@opteya.com> | 2013-08-24 16:14:08 -0400 |
---|---|---|
committer | Gleb Natapov <gleb@redhat.com> | 2013-08-26 06:19:56 -0400 |
commit | 2f84d5ea6fe85f77957941f1bb595a49e01eb9be (patch) | |
tree | e058676c452f9f6bf6cb0880934cd71b7294cbbd /arch | |
parent | 24009b0549de563006705b9af8694fc8fc9a5aa1 (diff) |
ppc: kvm: use anon_inode_getfd() with O_CLOEXEC flag
KVM uses anon_inode_get() to allocate file descriptors as part
of some of its ioctls. But those ioctls are lacking a flag argument
allowing userspace to choose options for the newly opened file descriptor.
In such case it's advised to use O_CLOEXEC by default so that
userspace is allowed to choose, without race, if the file descriptor
is going to be inherited across exec().
This patch set O_CLOEXEC flag on all file descriptors created
with anon_inode_getfd() to not leak file descriptors across exec().
Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Link: http://lkml.kernel.org/r/cover.1377372576.git.ydroneaud@opteya.com
Reviewed-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/kvm/book3s_64_mmu_hv.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_64_vio.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_hv.c | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c index 710d31317d81..f7c9e8ae06ee 100644 --- a/arch/powerpc/kvm/book3s_64_mmu_hv.c +++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c | |||
@@ -1579,7 +1579,7 @@ int kvm_vm_ioctl_get_htab_fd(struct kvm *kvm, struct kvm_get_htab_fd *ghf) | |||
1579 | ctx->first_pass = 1; | 1579 | ctx->first_pass = 1; |
1580 | 1580 | ||
1581 | rwflag = (ghf->flags & KVM_GET_HTAB_WRITE) ? O_WRONLY : O_RDONLY; | 1581 | rwflag = (ghf->flags & KVM_GET_HTAB_WRITE) ? O_WRONLY : O_RDONLY; |
1582 | ret = anon_inode_getfd("kvm-htab", &kvm_htab_fops, ctx, rwflag); | 1582 | ret = anon_inode_getfd("kvm-htab", &kvm_htab_fops, ctx, rwflag | O_CLOEXEC); |
1583 | if (ret < 0) { | 1583 | if (ret < 0) { |
1584 | kvm_put_kvm(kvm); | 1584 | kvm_put_kvm(kvm); |
1585 | return ret; | 1585 | return ret; |
diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c index b2d3f3b2de72..54cf9bc94dad 100644 --- a/arch/powerpc/kvm/book3s_64_vio.c +++ b/arch/powerpc/kvm/book3s_64_vio.c | |||
@@ -136,7 +136,7 @@ long kvm_vm_ioctl_create_spapr_tce(struct kvm *kvm, | |||
136 | mutex_unlock(&kvm->lock); | 136 | mutex_unlock(&kvm->lock); |
137 | 137 | ||
138 | return anon_inode_getfd("kvm-spapr-tce", &kvm_spapr_tce_fops, | 138 | return anon_inode_getfd("kvm-spapr-tce", &kvm_spapr_tce_fops, |
139 | stt, O_RDWR); | 139 | stt, O_RDWR | O_CLOEXEC); |
140 | 140 | ||
141 | fail: | 141 | fail: |
142 | if (stt) { | 142 | if (stt) { |
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index 2efa9dde741a..89eb4c7c527e 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c | |||
@@ -1556,7 +1556,7 @@ long kvm_vm_ioctl_allocate_rma(struct kvm *kvm, struct kvm_allocate_rma *ret) | |||
1556 | if (!ri) | 1556 | if (!ri) |
1557 | return -ENOMEM; | 1557 | return -ENOMEM; |
1558 | 1558 | ||
1559 | fd = anon_inode_getfd("kvm-rma", &kvm_rma_fops, ri, O_RDWR); | 1559 | fd = anon_inode_getfd("kvm-rma", &kvm_rma_fops, ri, O_RDWR | O_CLOEXEC); |
1560 | if (fd < 0) | 1560 | if (fd < 0) |
1561 | kvm_release_rma(ri); | 1561 | kvm_release_rma(ri); |
1562 | 1562 | ||