On Sat, Aug 19, 2023 at 3:48 AM Karim Taha <kariem.taha...@gmail.com> wrote:
> From: Stacey Son <s...@freebsd.org> > > Signed-off-by: Stacey Son <s...@freebsd.org> > Signed-off-by: Karim Taha <kariem.taha...@gmail.com> > --- > bsd-user/bsd-mem.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 46 insertions(+) > Reviewed-by: Warner Losh <i...@bsdimp.com> diff --git a/bsd-user/bsd-mem.c b/bsd-user/bsd-mem.c > index e69250cc0d..4446c94725 100644 > --- a/bsd-user/bsd-mem.c > +++ b/bsd-user/bsd-mem.c > @@ -77,3 +77,49 @@ abi_long host_to_target_ipc_perm(abi_ulong target_addr, > return 0; > } > > +abi_long target_to_host_shmid_ds(struct shmid_ds *host_sd, > + abi_ulong target_addr) > +{ > + struct target_shmid_ds *target_sd; > + > + if (!lock_user_struct(VERIFY_READ, target_sd, target_addr, 1)) { > + return -TARGET_EFAULT; > + } > + if (target_to_host_ipc_perm(&(host_sd->shm_perm), target_addr)) { > + return -TARGET_EFAULT; > + } > + __get_user(host_sd->shm_segsz, &target_sd->shm_segsz); > + __get_user(host_sd->shm_lpid, &target_sd->shm_lpid); > + __get_user(host_sd->shm_cpid, &target_sd->shm_cpid); > + __get_user(host_sd->shm_nattch, &target_sd->shm_nattch); > + __get_user(host_sd->shm_atime, &target_sd->shm_atime); > + __get_user(host_sd->shm_dtime, &target_sd->shm_dtime); > + __get_user(host_sd->shm_ctime, &target_sd->shm_ctime); > + unlock_user_struct(target_sd, target_addr, 0); > + > + return 0; > +} > + > +abi_long host_to_target_shmid_ds(abi_ulong target_addr, > + struct shmid_ds *host_sd) > +{ > + struct target_shmid_ds *target_sd; > + > + if (!lock_user_struct(VERIFY_WRITE, target_sd, target_addr, 0)) { > + return -TARGET_EFAULT; > + } > + if (host_to_target_ipc_perm(target_addr, &(host_sd->shm_perm))) { > + return -TARGET_EFAULT; > + } > + __put_user(host_sd->shm_segsz, &target_sd->shm_segsz); > + __put_user(host_sd->shm_lpid, &target_sd->shm_lpid); > + __put_user(host_sd->shm_cpid, &target_sd->shm_cpid); > + __put_user(host_sd->shm_nattch, &target_sd->shm_nattch); > + __put_user(host_sd->shm_atime, &target_sd->shm_atime); > + __put_user(host_sd->shm_dtime, &target_sd->shm_dtime); > + __put_user(host_sd->shm_ctime, &target_sd->shm_ctime); > + unlock_user_struct(target_sd, target_addr, 1); > + > + return 0; > +} > + > -- > 2.40.0 > >