Skip to content

Commit

Permalink
bsd-user: Implement shmid_ds conversion between host and target.
Browse files Browse the repository at this point in the history
Signed-off-by: Stacey Son <sson@FreeBSD.org>
Signed-off-by: Karim Taha <kariem.taha2.7@gmail.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20230925182709.4834-11-kariem.taha2.7@gmail.com>
  • Loading branch information
staceyson authored and bsdimp committed Oct 3, 2023
1 parent 86fbb44 commit bd2b731
Showing 1 changed file with 47 additions and 0 deletions.
47 changes: 47 additions & 0 deletions bsd-user/bsd-mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,30 @@ void target_to_host_ipc_perm__locked(struct ipc_perm *host_ip,
__get_user(host_ip->key, &target_ip->key);
}

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;
}

target_to_host_ipc_perm__locked(&(host_sd->shm_perm),
&(target_sd->shm_perm));

__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;
}

void host_to_target_ipc_perm__locked(struct target_ipc_perm *target_ip,
struct ipc_perm *host_ip)
{
Expand All @@ -55,3 +79,26 @@ void host_to_target_ipc_perm__locked(struct target_ipc_perm *target_ip,
__put_user(host_ip->key, &target_ip->key);
}

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;
}

host_to_target_ipc_perm__locked(&(target_sd->shm_perm),
&(host_sd->shm_perm));

__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;
}

0 comments on commit bd2b731

Please sign in to comment.