From owner-freebsd-hackers@FreeBSD.ORG Wed Jul 26 07:50:18 2006 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9698116A4DE for ; Wed, 26 Jul 2006 07:50:18 +0000 (UTC) (envelope-from shangjie.li@gmail.com) Received: from ug-out-1314.google.com (ug-out-1314.google.com [66.249.92.173]) by mx1.FreeBSD.org (Postfix) with ESMTP id D972643D49 for ; Wed, 26 Jul 2006 07:50:17 +0000 (GMT) (envelope-from shangjie.li@gmail.com) Received: by ug-out-1314.google.com with SMTP id m2so3205793uge for ; Wed, 26 Jul 2006 00:50:16 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=EnYPkH/YLtlsYChqYmtv1Z5byeelQ/L9sq97vD5iP6cRNIfP64OJL2s1IhbdfRBodIf7QC9lmJltUDdXHPu+cFNOytV3gkEUWAP3xBHL9wU23N51Z5vy8CLsfEjghoUASAO7Ua/1kW/HkPkE7f5lgGNkd+QJj8AaPUXgZgk8tj4= Received: by 10.78.165.16 with SMTP id n16mr2909978hue; Wed, 26 Jul 2006 00:50:16 -0700 (PDT) Received: by 10.78.127.20 with HTTP; Wed, 26 Jul 2006 00:50:16 -0700 (PDT) Message-ID: Date: Wed, 26 Jul 2006 15:50:16 +0800 From: "=?GB2312?B?wO7J0L3c?=" To: freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Subject: A bug in semctl() X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 26 Jul 2006 07:50:18 -0000 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; <<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) <<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. -- -- |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 >---------------------------------------------------<