|
@@ -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)
|
|
|
{
|
|
@@ -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;
|
|
|
+}
|