diff options
| author | Steve Sistare <steven.sistare@oracle.com> | 2025-10-01 08:33:55 -0700 |
|---|---|---|
| committer | Peter Xu <peterx@redhat.com> | 2025-10-03 09:48:02 -0400 |
| commit | fe72a8073ed63cf0fc138d1f4450da2e6e5b5271 (patch) | |
| tree | e13852a76ae62f745067f8b00501bd31a1fb6f59 | |
| parent | a9f9eee58bc5cfacc1aa5cb7a138b5a8c12a493c (diff) | |
| download | focaccia-qemu-fe72a8073ed63cf0fc138d1f4450da2e6e5b5271.tar.gz focaccia-qemu-fe72a8073ed63cf0fc138d1f4450da2e6e5b5271.zip | |
oslib: qemu_clear_cloexec
Define qemu_clear_cloexec, analogous to qemu_set_cloexec. Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Fabiano Rosas <farosas@suse.de> Link: https://lore.kernel.org/r/1759332851-370353-4-git-send-email-steven.sistare@oracle.com Signed-off-by: Peter Xu <peterx@redhat.com>
| -rw-r--r-- | include/qemu/osdep.h | 9 | ||||
| -rw-r--r-- | util/oslib-posix.c | 9 | ||||
| -rw-r--r-- | util/oslib-win32.c | 4 |
3 files changed, 22 insertions, 0 deletions
diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index 1b38cb7e45..ed3e511a8e 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -689,6 +689,15 @@ ssize_t qemu_write_full(int fd, const void *buf, size_t count) void qemu_set_cloexec(int fd); bool qemu_set_blocking(int fd, bool block, Error **errp); +/* + * Clear FD_CLOEXEC for a descriptor. + * + * The caller must guarantee that no other fork+exec's occur before the + * exec that is intended to inherit this descriptor, eg by suspending CPUs + * and blocking monitor commands. + */ +void qemu_clear_cloexec(int fd); + /* Return a dynamically allocated directory path that is appropriate for storing * local state. * diff --git a/util/oslib-posix.c b/util/oslib-posix.c index 14cf94ac03..3c14b72665 100644 --- a/util/oslib-posix.c +++ b/util/oslib-posix.c @@ -305,6 +305,15 @@ int qemu_socketpair(int domain, int type, int protocol, int sv[2]) return ret; } +void qemu_clear_cloexec(int fd) +{ + int f; + f = fcntl(fd, F_GETFD); + assert(f != -1); + f = fcntl(fd, F_SETFD, f & ~FD_CLOEXEC); + assert(f != -1); +} + char * qemu_get_local_state_dir(void) { diff --git a/util/oslib-win32.c b/util/oslib-win32.c index 84bc65a765..839b8a4170 100644 --- a/util/oslib-win32.c +++ b/util/oslib-win32.c @@ -219,6 +219,10 @@ void qemu_set_cloexec(int fd) { } +void qemu_clear_cloexec(int fd) +{ +} + int qemu_get_thread_id(void) { return GetCurrentThreadId(); |