X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fipc%2Fsemget.c;h=2cdf626b500239d8a7427b23f284698aeea6cbea;hb=6d8a515796270eb6cec8a278cb353a078a10f09a;hp=530c75ffa26492509e3516542651ecbe8f69fe1c;hpb=aa398f56fa398f2202b04e82c67f822f3233786f;p=musl diff --git a/src/ipc/semget.c b/src/ipc/semget.c index 530c75ff..2cdf626b 100644 --- a/src/ipc/semget.c +++ b/src/ipc/semget.c @@ -1,10 +1,17 @@ #include +#include +#include #include "syscall.h" #include "ipc.h" int semget(key_t key, int n, int fl) { -#ifdef __NR_semget + /* The kernel uses the wrong type for the sem_nsems member + * of struct semid_ds, and thus might not check that the + * n fits in the correct (per POSIX) userspace type, so + * we have to check here. */ + if (n > USHRT_MAX) return __syscall_ret(-EINVAL); +#ifndef SYS_ipc return syscall(SYS_semget, key, n, fl); #else return syscall(SYS_ipc, IPCOP_semget, key, n, fl);