| www.delorie.com/archives/browse.cgi | search |
| 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 <Christian DOT Franke AT t-online DOT de> |
| 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: | <dd4111c1-d6fb-b1f5-b928-ad8d899af2c9@t-online.de> |
| References: | <dd4111c1-d6fb-b1f5-b928-ad8d899af2c9 AT t-online DOT de> |
| X-Mailer: | Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) |
| Mime-Version: | 1.0 |
| 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 |
| List-Id: | General Cygwin discussions and problem reports <cygwin.cygwin.com> |
| List-Unsubscribe: | <https://cygwin.com/mailman/options/cygwin>, |
| <mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe> | |
| List-Archive: | <https://cygwin.com/pipermail/cygwin/> |
| List-Post: | <mailto:cygwin AT cygwin DOT com> |
| List-Help: | <mailto:cygwin-request AT cygwin DOT com?subject=help> |
| List-Subscribe: | <https://cygwin.com/mailman/listinfo/cygwin>, |
| <mailto:cygwin-request AT cygwin DOT com?subject=subscribe> | |
| From: | Takashi Yano via Cygwin <cygwin AT cygwin DOT com> |
| Reply-To: | Takashi Yano <takashi DOT yano AT nifty DOT ne DOT jp> |
| Errors-To: | cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com |
| Sender: | "Cygwin" <cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com> |
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 <fcntl.h>
> #include <stdio.h>
> #include <unistd.h>
>
> 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 <takashi DOT yano AT nifty DOT ne DOT jp>
--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--
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |