DKIM-Filter: OpenDKIM Filter v2.11.0 delorie.com 49HDL9vF481741 Authentication-Results: delorie.com; dkim=pass (1024-bit key, unprotected) header.d=cygwin.com header.i=@cygwin.com header.a=rsa-sha256 header.s=default header.b=CtqgmtyV X-Recipient: archive-cygwin AT delorie DOT com DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5B3C93858CD9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; s=default; t=1729171267; bh=lAan0Ob2sDfukkLluH2cyxW9P5RoNqzVxQQ8FSoz4PE=; h=Date:To:Cc:Subject:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=CtqgmtyVJCSc3T73DZTXbcrG1ZvGZa/kKY3tzYmiB7loYna7RvVU6bgKVN9Q93dN3 c7Uam2vYgcbkmG1Zo/D1UAfMtSXyfVM6bqgzlqzRZ1y6Nk8aaXig1+605VUfgreb8t yrYdS7hmpZfdJhIYw7yNSyfrfX7oA3TlvrE5srOk= X-Original-To: cygwin AT cygwin DOT com Delivered-To: cygwin AT cygwin DOT com DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D863A3858D37 ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D863A3858D37 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1729171211; cv=none; b=ZJSw7vEp+RaqExia2DcjbFgVM322/yKtqB2xjibslVowOU0NkZRJrWgHrJzYeJ0ENBDlCCqnwxhZzZwv3C+LuRfqph7uEKmWm0l5cRu/JabshE/eO5rO1rhA0Omx9umZTX1xdZXmr44JfZItnjsVd/b1t8r2LXB5/nlYcWv8m0M= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1729171211; c=relaxed/simple; bh=jud8cVrzmAXzOThgJBMbeTZi++2xjERINC5F5rnQlq8=; h=Date:From:To:Subject:Message-Id:Mime-Version:DKIM-Signature; b=qFyvkKbU99OwA9zFVJZo7TG5XuSdjL9sO0A/dQXvNxlgbcACIenJfUne3/SJUiDxA6JZTAuajaUXuGJujz4LjWOcT7iEfQFiOJHY3dYqksmVgAXcd30oMgFblYi9i1KRN4A4SRV4ekJ6BdQVwEvQYY7prK0o3ZCRBEVjjEnR7r8= ARC-Authentication-Results: i=1; server2.sourceware.org Date: Thu, 17 Oct 2024 22:19:57 +0900 To: cygwin AT cygwin DOT com Cc: Christian Franke Subject: Re: cygwin 3.5.4-1: lockf() aborts on overlap and does not fail on overflow Message-Id: <20241017221957.11825d50d0c73b6a8560f17e@nifty.ne.jp> In-Reply-To: References: X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Thu__17_Oct_2024_22_19_57_+0900_8Jaxzzl7gaSoc/2s" X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: cygwin AT cygwin DOT com X-Mailman-Version: 2.1.30 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Takashi Yano via Cygwin Reply-To: Takashi Yano Errors-To: cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com Sender: "Cygwin" This is a multi-part message in MIME format. --Multipart=_Thu__17_Oct_2024_22_19_57_+0900_8Jaxzzl7gaSoc/2s Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On Mon, 14 Oct 2024 15:36:02 +0200 Christian Franke wrote: > Two possibly independent bugs found by 'stress-ng --lockf ...': > > 1) lockf() may abort the process with api_fatal() if the new range > partly overlaps with two ranges previously locked by the same process. > > 2) lockf() prints a warning on too many locks and returns success. It > should not print a warning and fail with ENOLCK instead. > > Testcase for both: > > $ uname -r > 3.5.4-1.x86_64 > > $ cat locktest.c > #include > #include > #include > > static int lock_at(int fd, int off, int size) > { >   if (lseek(fd, off, SEEK_SET) < 0) { >     perror("lseek"); return -1; >   } >   printf("\rlock %d-%d\n", off, off + size - 1); fflush(stdout); >   if (lockf(fd, F_LOCK, size) < 0) { >     perror("lock"); return -1; >   } >   return 0; > } > > int main(int argc, char **argv) > { >   int fd = open("locktest.tmp", O_RDWR|O_CREAT, 0666); >   if (fd < 0) { >     perror("open"); return 1; >   } > >   if (argc == 1) { >     lock_at(fd, 0, 2); >     lock_at(fd, 2, 2); >     lock_at(fd, 1, 2); >   } >   else { >     for (int i = 0; i < 914; i++) >       if (lock_at(fd, i, 1)) >         return 1; >   } >   printf("\rdone\n"); >   return 0; > } > > $ gcc -o locktest locktest.c > > $ ./locktest > lock 0-1 > lock 2-3 > lock 1-2 >      1 [main] locktest 44864 C:\cygwin64\tmp\locktest.exe: \ >        *** fatal error - NtCreateEvent(lock): 0xC0000035\ >        Hangup > > $ ./locktest loop > lock 0-0 > lock 1-1 > lock 2-2 > lock 3-3 > ... > lock 909-909 > lock 910-910 > lock 911-911 >       0 [main] locktest 44865 inode_t::get_all_locks_list: \ >         Warning, can't handle more than 910 locks per file. > lock 912-912 >     727 [main] locktest 44865 inode_t::get_all_locks_list: \ >         Warning, can't handle more than 910 locks per file. > lock 913-913 >    1329 [main] locktest 44865 inode_t::get_all_locks_list: \ >         Warning, can't handle more than 910 locks per file. > done > > There is possibly also an off-by-one error as the 912'th lockf() prints > the first warning. Thanks for the report. I looked into the problems, and considered how to fix them. Could you please try the experimental patch attached? -- Takashi Yano --Multipart=_Thu__17_Oct_2024_22_19_57_+0900_8Jaxzzl7gaSoc/2s Content-Type: text/plain; name="flock.patch" Content-Disposition: attachment; filename="flock.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmxvY2suY2MgYi93aW5zdXAvY3lnd2luL2Zsb2Nr LmNjDQppbmRleCAwZjFlZmEwMWQuLmY5OWI3ZjUzOCAxMDA2NDQNCi0tLSBhL3dpbnN1cC9jeWd3 aW4vZmxvY2suY2MNCisrKyBiL3dpbnN1cC9jeWd3aW4vZmxvY2suY2MNCkBAIC0yOTcsNiArMjk3 LDcgQEAgY2xhc3MgaW5vZGVfdA0KICAgICBIQU5ETEUJCSBpX2RpcjsNCiAgICAgSEFORExFCQkg aV9tdHg7DQogICAgIHVpbnQzMl90CQkgaV9jbnQ7ICAgIC8qICMgb2YgdGhyZWFkcyByZWZlcmVu Y2luZyB0aGlzIGluc3RhbmNlLiAqLw0KKyAgICB1aW50MzJfdAkJIGxvY2tfY250Ow0KIA0KICAg cHVibGljOg0KICAgICBpbm9kZV90IChkZXZfdCBkZXYsIGlub190IGlubyk7DQpAQCAtMzIxLDYg KzMyMiw3IEBAIGNsYXNzIGlub2RlX3QNCiAgICAgdm9pZCB1bmxvY2tfYW5kX3JlbW92ZV9pZl91 bnVzZWQgKCk7DQogDQogICAgIGxvY2tmX3QgKmdldF9hbGxfbG9ja3NfbGlzdCAoKTsNCisgICAg dWludDMyX3QgZ2V0X2xvY2tfY291bnQgKCkgeyByZXR1cm4gbG9ja19jbnQ7IH07DQogDQogICAg IGJvb2wgZGVsX215X2xvY2tzIChsb25nIGxvbmcgaWQsIEhBTkRMRSBmaGRsKTsNCiB9Ow0KQEAg LTUwMyw3ICs1MDUsOCBAQCBpbm9kZV90OjpnZXQgKGRldl90IGRldiwgaW5vX3QgaW5vLCBib29s IGNyZWF0ZV9pZl9taXNzaW5nLCBib29sIGxvY2spDQogfQ0KIA0KIGlub2RlX3Q6Omlub2RlX3Qg KGRldl90IGRldiwgaW5vX3QgaW5vKQ0KLTogaV9sb2NrZiAoTlVMTCksIGlfYWxsX2xmIChOVUxM KSwgaV9kZXYgKGRldiksIGlfaW5vIChpbm8pLCBpX2NudCAoMEwpDQorOiBpX2xvY2tmIChOVUxM KSwgaV9hbGxfbGYgKE5VTEwpLCBpX2RldiAoZGV2KSwgaV9pbm8gKGlubyksIGlfY250ICgwTCks DQorICBsb2NrX2NudCAoMCkNCiB7DQogICBIQU5ETEUgcGFyZW50X2RpcjsNCiAgIFdDSEFSIG5h bWVbNDhdOw0KQEAgLTU4Niw2ICs1ODksNyBAQCBpbm9kZV90OjpnZXRfYWxsX2xvY2tzX2xpc3Qg KCkNCiAgIEJPT0xFQU4gcmVzdGFydCA9IFRSVUU7DQogICBib29sIGxhc3RfcnVuID0gZmFsc2U7 DQogICBsb2NrZl90IG5ld2xvY2ssICpsb2NrID0gaV9hbGxfbGY7DQorICBpbnQgY250ID0gMDsN CiANCiAgIFBESVJFQ1RPUllfQkFTSUNfSU5GT1JNQVRJT04gZGJpX2J1ZiA9IChQRElSRUNUT1JZ X0JBU0lDX0lORk9STUFUSU9OKQ0KIAkJCQkJIHRwLndfZ2V0ICgpOw0KQEAgLTYxMCwxNyArNjE0 LDE2IEBAIGlub2RlX3Q6OmdldF9hbGxfbG9ja3NfbGlzdCAoKQ0KIAkgIGRiaS0+T2JqZWN0TmFt ZS5CdWZmZXJbTE9DS19PQkpfTkFNRV9MRU5dID0gTCdcMCc7DQogCSAgaWYgKCFuZXdsb2NrLmZy b21fb2JqX25hbWUgKHRoaXMsICZpX2FsbF9sZiwgZGJpLT5PYmplY3ROYW1lLkJ1ZmZlcikpDQog CSAgICBjb250aW51ZTsNCi0JICBpZiAobG9jayAtIGlfYWxsX2xmID49IE1BWF9MT0NLRl9DTlQp DQotCSAgICB7DQotCSAgICAgIHN5c3RlbV9wcmludGYgKCJXYXJuaW5nLCBjYW4ndCBoYW5kbGUg bW9yZSB0aGFuICVkIGxvY2tzIHBlciBmaWxlLiIsDQotCQkJICAgICBNQVhfTE9DS0ZfQ05UKTsN Ci0JICAgICAgYnJlYWs7DQotCSAgICB9DQorCSAgaWYgKGxvY2sgLSBpX2FsbF9sZiA+IE1BWF9M T0NLRl9DTlQpDQorCSAgICBhcGlfZmF0YWwgKCJDYW4ndCBoYW5kbGUgbW9yZSB0aGFuICVkIGxv Y2tzIHBlciBmaWxlLiIsDQorCQkgICAgICAgTUFYX0xPQ0tGX0NOVCk7DQogCSAgaWYgKGxvY2sg PiBpX2FsbF9sZikNCiAJICAgIGxvY2tbLTFdLmxmX25leHQgPSBsb2NrOw0KIAkgIG5ldyAobG9j aysrKSBsb2NrZl90IChuZXdsb2NrKTsNCisJICBjbnQrKzsNCiAJfQ0KICAgICB9DQorICBsb2Nr X2NudCA9IGNudDsNCiAgIC8qIElmIG5vIGxvY2sgaGFzIGJlZW4gZm91bmQsIHJldHVybiBOVUxM LiAqLw0KICAgaWYgKGxvY2sgPT0gaV9hbGxfbGYpDQogICAgIHJldHVybiBOVUxMOw0KQEAgLTEz NDksNiArMTM1MiwxMCBAQCBsZl9zZXRsb2NrIChsb2NrZl90ICpsb2NrLCBpbm9kZV90ICpub2Rl LCBsb2NrZl90ICoqY2xlYW4sIEhBTkRMRSBmaGRsKQ0KICAgcHJldiA9IGhlYWQ7DQogICBibG9j ayA9ICpoZWFkOw0KICAgbmVlZHRvbGluayA9IDE7DQorDQorICBpZiAobm9kZS0+Z2V0X2xvY2tf Y291bnQgKCkgKyAyID4gTUFYX0xPQ0tGX0NOVCkNCisgICAgcmV0dXJuIEVOT0xDSzsNCisNCiAg IGZvciAoOzspDQogICAgIHsNCiAgICAgICBvdmNhc2UgPSBsZl9maW5kb3ZlcmxhcCAoYmxvY2ss IGxvY2ssIFNFTEYsICZwcmV2LCAmb3ZlcmxhcCk7DQpAQCAtMTQ0NiwyMyArMTQ1MywyMiBAQCBs Zl9zZXRsb2NrIChsb2NrZl90ICpsb2NrLCBpbm9kZV90ICpub2RlLCBsb2NrZl90ICoqY2xlYW4s IEhBTkRMRSBmaGRsKQ0KIAkgIHByZXYgPSAmbG9jay0+bGZfbmV4dDsNCiAJICBsZl93YWtlbG9j ayAob3ZlcmxhcCwgZmhkbCk7DQogCSAgb3ZlcmxhcC0+Y3JlYXRlX2xvY2tfb2JqICgpOw0KLQkg IGxvY2stPmNyZWF0ZV9sb2NrX29iaiAoKTsNCi0JICBuZWVkdG9saW5rID0gMDsNCiAJICBjb250 aW51ZTsNCiANCiAJY2FzZSA1OiAvKiBvdmVybGFwIGVuZHMgYWZ0ZXIgbG9jayAqLw0KIAkgIC8q DQogCSAgICogQWRkIHRoZSBuZXcgbG9jayBiZWZvcmUgb3ZlcmxhcC4NCiAJICAgKi8NCi0JICBp ZiAobmVlZHRvbGluaykgew0KKwkgIGlmIChuZWVkdG9saW5rKQ0KKwkgICAgew0KIAkgICAgICAq cHJldiA9IGxvY2s7DQogCSAgICAgIGxvY2stPmxmX25leHQgPSBvdmVybGFwOw0KLQkgIH0NCisJ ICAgICAgbmVlZHRvbGluayA9IDA7DQorCSAgICB9DQogCSAgb3ZlcmxhcC0+bGZfc3RhcnQgPSBs b2NrLT5sZl9lbmQgKyAxOw0KIAkgIGxmX3dha2Vsb2NrIChvdmVybGFwLCBmaGRsKTsNCi0JICBs b2NrLT5jcmVhdGVfbG9ja19vYmogKCk7DQogCSAgb3ZlcmxhcC0+Y3JlYXRlX2xvY2tfb2JqICgp Ow0KLQkgIGJyZWFrOw0KKwkgIGNvbnRpbnVlOw0KIAl9DQogICAgICAgYnJlYWs7DQogICAgIH0N Cg== --Multipart=_Thu__17_Oct_2024_22_19_57_+0900_8Jaxzzl7gaSoc/2s Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple --Multipart=_Thu__17_Oct_2024_22_19_57_+0900_8Jaxzzl7gaSoc/2s--