Apply by doing:
       cd /usr/src
       patch -p0 < 002_semget.patch

And then rebuild your kenel and reboot, e.g.
       cd sys/arch/`machine`/conf
       config GENERIC
       cd ../compile/GENERIC
       make depend bsd
       mv /bsd /bsd.old
       cp bsd /
       reboot

Index: sys/kern/sysv_sem.c
diff -u sys/kern/sysv_sem.c:1.16 sys/kern/sysv_sem.c:1.16.2.1
--- sys/kern/sysv_sem.c:1.16    Mon Jan  6 17:34:41 2003
+++ sys/kern/sysv_sem.c Wed Aug 20 14:16:41 2003
@@ -431,10 +431,20 @@

       /*
        * Preallocate space for the new semaphore.  If we are going
-        * to sleep, we want to sleep now to elliminate any race
+        * to sleep, we want to sleep now to eliminate any race
        * condition in allocating a semaphore with a specific key.
        */
       if (key == IPC_PRIVATE || (semflg & IPC_CREAT)) {
+               if (nsems <= 0 || nsems > seminfo.semmsl) {
+                       DPRINTF(("nsems out of range (0<%d<=%d)\n", nsems,
+                           seminfo.semmsl));
+                       return (EINVAL);
+               }
+               if (nsems > seminfo.semmns - semtot) {
+                       DPRINTF(("not enough semaphores left (need %d, got %d)\n",
+                           nsems, seminfo.semmns - semtot));
+                       return (ENOSPC);
+               }
               semaptr_new = pool_get(&sema_pool, PR_WAITOK);
               semaptr_new->sem_base = malloc(nsems * sizeof(struct sem),
                   M_SEM, M_WAITOK);
@@ -468,18 +478,6 @@

       DPRINTF(("need to allocate the semid_ds\n"));
       if (key == IPC_PRIVATE || (semflg & IPC_CREAT)) {
-               if (nsems <= 0 || nsems > seminfo.semmsl) {
-                       DPRINTF(("nsems out of range (0<%d<=%d)\n", nsems,
-                           seminfo.semmsl));
-                       error = EINVAL;
-                       goto error;
-               }
-               if (nsems > seminfo.semmns - semtot) {
-                       DPRINTF(("not enough semaphores left (need %d, got %d)\n",
-                           nsems, seminfo.semmns - semtot));
-                       error = ENOSPC;
-                       goto error;
-               }
               for (semid = 0; semid < seminfo.semmni; semid++) {
                       if ((semaptr = sema[semid]) == NULL)
                               break;