Module: xenomai-head
Branch: master
Commit: 9300cdb3a06befc7085bf95407a22c391259701c
URL:    
http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=9300cdb3a06befc7085bf95407a22c391259701c

Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org>
Date:   Tue Jun 28 21:08:06 2011 +0200

posix: fix leak in user-space named semaphores

---

 ksrc/skins/posix/syscall.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/ksrc/skins/posix/syscall.c b/ksrc/skins/posix/syscall.c
index 3c7f7ee..c9e84a6 100644
--- a/ksrc/skins/posix/syscall.c
+++ b/ksrc/skins/posix/syscall.c
@@ -718,17 +718,20 @@ static int __sem_close(struct pt_regs *regs)
 
        usm = assoc2usem(assoc);
 
-       if ((closed = (--usm->refcnt == 0)))
+       err = sem_close(&sm.native_sem);
+
+       if (!err && (closed = (--usm->refcnt == 0)))
                pse51_assoc_remove(&pse51_queues()->usems,
                                   (u_long)sm.shadow_sem.sem);
 
-       err = sem_close(&sm.native_sem);
-
        xnlock_put_irqrestore(&pse51_assoc_lock, s);
 
        if (err)
                return -thread_get_errno();
 
+       if (usm->refcnt == 0)
+               xnfree(usm);
+
        return __xn_safe_copy_to_user((void __user *)__xn_reg_arg2(regs),
                                      &closed, sizeof(int));
 }


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to