[PATCH 1/2] Cygwin: lockf: Fix access violation in lf_clearlock().
Takashi Yano
takashi.yano@nifty.ne.jp
Fri Nov 15 13:14:10 GMT 2024
The commit ae181b0ff122 has a bug that the pointer is referred bofore
NULL check in the function lf_clearlock(). This patch fixes that.
Addresses: https://cygwin.com/pipermail/cygwin/2024-November/256750.html
Fixes: ae181b0ff122 ("Cygwin: lockf: Make lockf() return ENOLCK when too many locks")
Reported-by: Sebastian Feld <sebastian.n.feld@gmail.com>
Reviewed-by:
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
---
winsup/cygwin/flock.cc | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/winsup/cygwin/flock.cc b/winsup/cygwin/flock.cc
index 3821bddd6..794e66bd7 100644
--- a/winsup/cygwin/flock.cc
+++ b/winsup/cygwin/flock.cc
@@ -1524,6 +1524,10 @@ lf_clearlock (lockf_t *unlock, lockf_t **clean, HANDLE fhdl)
lockf_t *lf = *head;
lockf_t *overlap, **prev;
int ovcase;
+
+ if (lf == NOLOCKF)
+ return 0;
+
inode_t *node = lf->lf_inode;
tmp_pathbuf tp;
node->i_all_lf = (lockf_t *) tp.w_get ();
@@ -1531,8 +1535,6 @@ lf_clearlock (lockf_t *unlock, lockf_t **clean, HANDLE fhdl)
uint32_t lock_cnt = node->get_lock_count ();
bool first_loop = true;
- if (lf == NOLOCKF)
- return 0;
prev = head;
while ((ovcase = lf_findoverlap (lf, unlock, SELF, &prev, &overlap)))
{
--
2.45.1
More information about the Cygwin-patches
mailing list