Skip to content

Commit

Permalink
ipc: add semget syscall wrapper
Browse files Browse the repository at this point in the history
Provide ksys_semget() wrapper to avoid in-kernel calls to this syscall.
The ksys_ prefix denotes that this function is meant as a drop-in
replacement for the syscall. In particular, it uses the same calling
convention as sys_semget().

This patch is part of a series which removes in-kernel calls to syscalls.
On this basis, the syscall entry path can be streamlined. For details, see
http://lkml.kernel.org/r/[email protected]

Cc: Al Viro <[email protected]>
Cc: Andrew Morton <[email protected]>
Signed-off-by: Dominik Brodowski <[email protected]>
  • Loading branch information
Dominik Brodowski committed Apr 2, 2018
1 parent 41f4f0e commit 6989471
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 3 deletions.
7 changes: 6 additions & 1 deletion ipc/sem.c
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,7 @@ static inline int sem_more_checks(struct kern_ipc_perm *ipcp,
return 0;
}

SYSCALL_DEFINE3(semget, key_t, key, int, nsems, int, semflg)
long ksys_semget(key_t key, int nsems, int semflg)
{
struct ipc_namespace *ns;
static const struct ipc_ops sem_ops = {
Expand All @@ -578,6 +578,11 @@ SYSCALL_DEFINE3(semget, key_t, key, int, nsems, int, semflg)
return ipcget(ns, &sem_ids(ns), &sem_ops, &sem_params);
}

SYSCALL_DEFINE3(semget, key_t, key, int, nsems, int, semflg)
{
return ksys_semget(key, nsems, semflg);
}

/**
* perform_atomic_semop[_slow] - Attempt to perform semaphore
* operations on a given array.
Expand Down
4 changes: 2 additions & 2 deletions ipc/syscall.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second,
(const struct timespec __user *)fifth);

case SEMGET:
return sys_semget(first, second, third);
return ksys_semget(first, second, third);
case SEMCTL: {
unsigned long arg;
if (!ptr)
Expand Down Expand Up @@ -132,7 +132,7 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
return compat_ksys_semtimedop(first, compat_ptr(ptr), second,
compat_ptr(fifth));
case SEMGET:
return sys_semget(first, second, third);
return ksys_semget(first, second, third);
case SEMCTL:
if (!ptr)
return -EINVAL;
Expand Down
1 change: 1 addition & 0 deletions ipc/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ static inline int compat_ipc_parse_version(int *cmd)
long ksys_semtimedop(int semid, struct sembuf __user *tsops,
unsigned int nsops,
const struct timespec __user *timeout);
long ksys_semget(key_t key, int nsems, int semflg);

/* for CONFIG_ARCH_WANT_OLD_COMPAT_IPC */
#ifdef CONFIG_COMPAT
Expand Down

0 comments on commit 6989471

Please sign in to comment.