s3: smbd: Locking, fix off-by one calculation in brl_pending_overlap().
authorJeremy Allison <jra@samba.org>
Tue, 1 Jul 2014 20:30:50 +0000 (13:30 -0700)
committerKarolin Seeger <kseeger@samba.org>
Fri, 11 Jul 2014 07:27:04 +0000 (09:27 +0200)
Consider:

lock = start=110,size=10
pend_lock = 100, size=10

Should not overlap. However,

(lock->start <= pend_lock->start + pend_lock->size)
     110             100                10

is true, so it returns true (overlap).

lock->start <= pend_lock->start + pend_lock->size

should be:

lock->start < pend_lock->start + pend_lock->size

https://bugzilla.samba.org/show_bug.cgi?id=10685

Signed-off-by: Jeremy Allison <jra@samba.org>
source3/locking/brlock.c

index 1a912c747cc2654647064ed655b6fd917fa69eec..c73b7c245be9aa12959a95b1069fa03309a15e95 100644 (file)
@@ -229,7 +229,7 @@ static bool brl_pending_overlap(const struct lock_struct *lock, const struct loc
 {
        if ((lock->start <= pend_lock->start) && (lock->start + lock->size > pend_lock->start))
                return True;
-       if ((lock->start >= pend_lock->start) && (lock->start <= pend_lock->start + pend_lock->size))
+       if ((lock->start >= pend_lock->start) && (lock->start < pend_lock->start + pend_lock->size))
                return True;
        return False;
 }