[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 15/22] bsd-user/freebsd/os-syscall.c: unlock_iovec
From: |
Warner Losh |
Subject: |
[PATCH 15/22] bsd-user/freebsd/os-syscall.c: unlock_iovec |
Date: |
Tue, 1 Feb 2022 04:14:48 -0700 |
Releases the references to the iovec created by lock_iovec.
Signed-off-by: Warner Losh <imp@bsdimp.com>
---
bsd-user/freebsd/os-syscall.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c
index c21759ae7ce..d49945f0fcc 100644
--- a/bsd-user/freebsd/os-syscall.c
+++ b/bsd-user/freebsd/os-syscall.c
@@ -167,6 +167,29 @@ struct iovec *lock_iovec(int type, abi_ulong target_addr,
return NULL;
}
+void unlock_iovec(struct iovec *vec, abi_ulong target_addr,
+ int count, int copy)
+{
+ struct target_iovec *target_vec;
+ int i;
+
+ target_vec = lock_user(VERIFY_READ, target_addr,
+ count * sizeof(struct target_iovec), 1);
+ if (target_vec) {
+ for (i = 0; i < count; i++) {
+ abi_ulong base = tswapal(target_vec[i].iov_base);
+ abi_long len = tswapal(target_vec[i].iov_len);
+ if (len < 0) {
+ break;
+ }
+ unlock_user(vec[i].iov_base, base, copy ? vec[i].iov_len : 0);
+ }
+ unlock_user(target_vec, target_addr, 0);
+ }
+
+ free(vec);
+}
+
/*
* do_syscall() should always have a single exit point at the end so that
* actions, such as logging of syscall results, can be performed. All errnos
--
2.33.1
- Re: [PATCH 11/22] bsd-user/sycall.c: Now obsolete, remove, (continued)
- [PATCH 12/22] bsd-user/freebsd/os-syscall.c: Add get_errno and host_to_target_errno, Warner Losh, 2022/02/01
- [PATCH 13/22] bsd-user/bsd-file.h: Implementation details for the filesystem calls, Warner Losh, 2022/02/01
- [PATCH 15/22] bsd-user/freebsd/os-syscall.c: unlock_iovec,
Warner Losh <=
- [PATCH 17/22] bsd-user: introduce target.h, Warner Losh, 2022/02/01
- [PATCH 21/22] bsd-user/bsd-file.h: Meat of the write system calls, Warner Losh, 2022/02/01
- [PATCH 16/22] bsd-user/freebsd/os-syscall.c: Tracing and error boilerplate, Warner Losh, 2022/02/01
- [PATCH 07/22] bsd-user/x86_64/target_arch_thread.h: Assume a FreeBSD target, Warner Losh, 2022/02/01