Skip to content

Commit

Permalink
linux-user: Make ipc syscall's third argument an abi_long
Browse files Browse the repository at this point in the history
For those target ABIs that use the ipc system call (e.g. POWER),
the third argument is used in the shmat path as a pointer.  It
therefore must be declared as an abi_long (versus int) so that
the address bits are not lost in truncation.  In fact, all arguments
to do_ipc should be declared as abit_long.

In fact, it makes more sense for all of the arguments to be declaried
as abi_long (except call).

Signed-off-by: Tom Musta <[email protected]>
Signed-off-by: Riku Voipio <[email protected]>
  • Loading branch information
Tom Musta authored and Riku Voipio committed Aug 22, 2014
1 parent 5464bae commit 37ed095
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions linux-user/syscall.c
Original file line number Diff line number Diff line change
Expand Up @@ -3130,8 +3130,8 @@ static inline abi_long do_shmdt(abi_ulong shmaddr)
#ifdef TARGET_NR_ipc
/* ??? This only works with linear mappings. */
/* do_ipc() must return target values and target errnos. */
static abi_long do_ipc(unsigned int call, int first,
int second, int third,
static abi_long do_ipc(unsigned int call, abi_long first,
abi_long second, abi_long third,
abi_long ptr, abi_long fifth)
{
int version;
Expand All @@ -3153,9 +3153,9 @@ static abi_long do_ipc(unsigned int call, int first,
/* The semun argument to semctl is passed by value, so dereference the
* ptr argument. */
abi_ulong atptr;
get_user_ual(atptr, (abi_ulong)ptr);
get_user_ual(atptr, ptr);
ret = do_semctl(first, second, third,
(union target_semun)(abi_ulong) atptr);
(union target_semun) atptr);
break;
}

Expand Down

0 comments on commit 37ed095

Please sign in to comment.