Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Jul 2006 16:04:06 +0800
From:      "=?GB2312?B?wO7J0L3c?=" <shangjie.li@gmail.com>
To:        freebsd-bugs@freebsd.org
Subject:   semctl bug
Message-ID:  <de71d27b0607260104g1ba570aci2c5980a55d1bb3bf@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
In file kern/sysv_sem.c:
554 __semctl(td, uap)
555         struct thread *td;
556         struct __semctl_args *uap;
557 {
558         int semid = uap->semid; <<<here  1
559         int semnum = uap->semnum;
560         int cmd = uap->cmd;
561         u_short *array;
562         union semun *arg = uap->arg;
563         union semun real_arg;
564         struct ucred *cred = td->td_ucred;
565         int i, rval, error;
566         struct semid_ds sbuf;
567         struct semid_kernel *semakptr;
568         struct mtx *sema_mtxp;
569         u_short usval, count;
570
571         DPRINTF(("call to semctl(%d, %d, %d, 0x%x)\n",
572             semid, semnum, cmd, arg));
573         if (!jail_sysvipc_allowed && jailed(td->td_ucred))
574                 return (ENOSYS);
575
576         array = NULL;
577
578         switch(cmd) {
579         case SEM_STAT:
580                 if (semid < 0 || semid >= seminfo.semmni) <<<here 2
581                         return (EINVAL);
582                 if ((error = copyin(arg, &real_arg, sizeof(real_arg))) != 0)
583                         return (error);
584                 semakptr = &sema[semid];<<<here 3

>From line 558 to line 578, there must be a mechism to convert the
sem_id to the internal sema array index. In fact, it was missing,
which make the semctl syscall not work well. The  return valure of
semget, the semaphore ID, is larger than 65535.  when test on line 580
return  EINVAL in any case. Following code also using the semid which
is from user directly as index of sema[] array.
-- 
--
|Best regards.
|Shangjie, Li (Ph.D candidate)
|Institute of Software, Chinese Academy of Sciences,
|P.O. Box 8718, Beijing 100080, CHINA
|Phone: (8610)62561197/62635158-1008(O), 82680528(H)
|Email: shangjie02@ios.cn
>---------------------------------------------------<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?de71d27b0607260104g1ba570aci2c5980a55d1bb3bf>