From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Ian Jackson Newsgroups: gmane.emacs.bugs Subject: bug#53432: [PATCH] Avoid losing keyboard input when inotify is too busy Date: Fri, 21 Jan 2022 23:36:01 +0000 Message-ID: <25067.17249.604070.872185@chiark.greenend.org.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="DdFB866C/Z" Content-Transfer-Encoding: 7bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="39532"; mail-complaints-to="usenet@ciao.gmane.io" To: 53432@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Jan 22 00:37:27 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nB3TC-000A4w-Pm for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 22 Jan 2022 00:37:26 +0100 Original-Received: from localhost ([::1]:43438 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nB3TB-00082q-LX for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 21 Jan 2022 18:37:25 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:34532) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nB3So-00082e-61 for bug-gnu-emacs@gnu.org; Fri, 21 Jan 2022 18:37:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:42428) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nB3Sn-0004jb-RT for bug-gnu-emacs@gnu.org; Fri, 21 Jan 2022 18:37:01 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1nB3Sn-0002Oh-Ow for bug-gnu-emacs@gnu.org; Fri, 21 Jan 2022 18:37:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Ian Jackson Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 21 Jan 2022 23:37:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 53432 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.16428081779150 (code B ref -1); Fri, 21 Jan 2022 23:37:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 21 Jan 2022 23:36:17 +0000 Original-Received: from localhost ([127.0.0.1]:35331 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nB3S5-0002NW-Gp for submit@debbugs.gnu.org; Fri, 21 Jan 2022 18:36:17 -0500 Original-Received: from lists.gnu.org ([209.51.188.17]:45542) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nB3S4-0002NP-EW for submit@debbugs.gnu.org; Fri, 21 Jan 2022 18:36:16 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:34376) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nB3S4-00080r-71 for bug-gnu-emacs@gnu.org; Fri, 21 Jan 2022 18:36:16 -0500 Original-Received: from permutation-city.chiark.greenend.org.uk ([212.13.197.230]:37436 helo=chiark.greenend.org.uk) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nB3S2-0002SW-3Q for bug-gnu-emacs@gnu.org; Fri, 21 Jan 2022 18:36:15 -0500 Original-Received: by chiark.greenend.org.uk (Debian Exim 4.89 #1) with local (return-path ijackson@chiark.greenend.org.uk) id 1nB3Rp-0003yS-OQ for bug-gnu-emacs@gnu.org; Fri, 21 Jan 2022 23:36:01 +0000 Received-SPF: none client-ip=212.13.197.230; envelope-from=ijackson@chiark.greenend.org.uk; helo=chiark.greenend.org.uk X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, KHOP_HELO_FCRDNS=0.319, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:224796 Archived-At: --DdFB866C/Z Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit I experienced a bug where my Emacs (Debian's emacs-lucid) would lose keystrokes under pathological conditions. I tracked this down to the keyboard input buffer filling up with inotify events. The attached patches have been rebased onto emacs-28 (fbc9b121e062) and I have tested before-and-after versions in parallel to verify that the bug appears in the upstream branch and has been fixed with my patches. The bug was really quite severe in my (rather abusive) situation, with Debian's emacs-lucid 26.1. With the upstream emacs-28 branch it requires more effort, and loses fewer keys. I suspect that some more sophisticated approach to inotify requests means it's harder to get the buffer to fill up with the newer version. Unfortunately I am not able to share my whole repro, but a key part is to visit the output file from this while yes | dd of=t bs=1 count=1000000; do : ; with global-auto-revert-mode enabled. With my patches it is still possible to get emacs to perform very poorly by abusing it this way, but at least all the keys arrive eventually. I added some FIXMEs for further work that would be good, but is not critical to fixing the bug. I hope the commit messages are in the expected format. I think I probably have GNU copyright paperwork on file already, perhaps under a different email address. Regards, Ian. --DdFB866C/Z Content-Type: application/octet-stream; name="0001-inotify.c-Document-hazard-of-unlimited-buffering.patch" Content-Disposition: attachment; filename="0001-inotify.c-Document-hazard-of-unlimited-buffering.patch" Content-Transfer-Encoding: base64 RnJvbSBhOTBiOWMzYzU0ZWFiZTRlOTQyOTkxMTQxN2E4ZjMxOTZiOTAzNmMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJYW4gSmFja3NvbiA8aWphY2tzb25AY2hpYXJrLmdyZWVuZW5k Lm9yZy51az4KRGF0ZTogRnJpLCAyMSBKYW4gMjAyMiAyMDoyODowNSArMDAwMApTdWJqZWN0OiBb UEFUQ0ggMS80XSAqIGlub3RpZnkuYzogRG9jdW1lbnQgaGF6YXJkIG9mIHVubGltaXRlZCBidWZm ZXJpbmcKCi0tLQogc3JjL2lub3RpZnkuYyB8IDMgKysrCiAxIGZpbGUgY2hhbmdlZCwgMyBpbnNl cnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2lub3RpZnkuYyBiL3NyYy9pbm90aWZ5LmMKaW5k ZXggZTkyYWQ0MGFiYy4uYjY3NmVhMjE2YSAxMDA2NDQKLS0tIGEvc3JjL2lub3RpZnkuYworKysg Yi9zcmMvaW5vdGlmeS5jCkBAIC0zMTYsNiArMzE2LDkgQEAgaW5vdGlmeV9jYWxsYmFjayAoaW50 IGZkLCB2b2lkICpfKQogICBpZiAoaW9jdGwgKGZkLCBGSU9OUkVBRCwgJnRvX3JlYWQpIDwgMCkK ICAgICByZXBvcnRfZmlsZV9ub3RpZnlfZXJyb3IgKCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIGZp bGUgc3lzdGVtIGV2ZW50cyIsCiAJCQkgICAgICBRbmlsKTsKKyAgLy8gRklYTUU6IGZlZWRpbmcg dGhlIHZhbHVlIGZyb20gRklPTlJFQUQgdG8gYSBtZW1vcnkgYWxsb2NhdG9yIGlzIHVud2lzZQor ICAvLyBTYWRseSB0aGUgaW5vdGlmeSBldmVudCBidWZmZXIgcGFyc2luZyBhbGdvcml0aG0gaXMg bm90IGNhcGFibGUgb2YKKyAgLy8gaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgd2UgcmVhZCBvbmx5 IHBhcnQgb2YgYSBrZXJuZWwgZXZlbnQuCiAgIFVTRV9TQUZFX0FMTE9DQTsKICAgY2hhciAqYnVm ZmVyID0gU0FGRV9BTExPQ0EgKHRvX3JlYWQpOwogICBzc2l6ZV90IG4gPSByZWFkIChmZCwgYnVm ZmVyLCB0b19yZWFkKTsKLS0gCjIuMjAuMQoK --DdFB866C/Z Content-Type: application/octet-stream; name="0002-inotify.c-Use-a-buffer-from-the-heap.patch" Content-Disposition: attachment; filename="0002-inotify.c-Use-a-buffer-from-the-heap.patch" Content-Transfer-Encoding: base64 RnJvbSA2YTVkZDU3NjZhNTgwNjI1OGQ2NjVjYWIzNDNhMTAzYjU3MDViZjMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJYW4gSmFja3NvbiA8aWphY2tzb25AY2hpYXJrLmdyZWVuZW5k Lm9yZy51az4KRGF0ZTogRnJpLCAyMSBKYW4gMjAyMiAxOTo0Mjo0MyArMDAwMApTdWJqZWN0OiBb UEFUQ0ggMi80XSAqIGlub3RpZnkuYzogVXNlIGEgYnVmZmVyIGZyb20gdGhlIGhlYXAKCldlIGFy ZSBnb2luZyB0byBuZWVkIHRoaXMgYnVmZmVyIHRvIGJlIHBlcnNpc3RlbnQsIGJlY2F1c2Ugd2Ug bWF5IG5lZWQKdG8gc3RvcCBwcm9jZXNzaW5nIGl0IGhhbGZ3YXkgdGhyb3VnaCAoaWYgdGhlIG1h aW4gaW5wdXQgZXZlbnQgYnVmZmVyCmZpbGxzIHVwKS4KCkFsc28sIGdldHRpbmcgYSB2YWx1ZSBm cm9tIEZJT05SRUFEIGFuZCB0aGVuIGZlZWRpbmcgaXQgdG8gYWxsb2NhIGlzCmV2ZW4gbGVzcyB3 aXNlIHRoYW4gZmVlZGluZyBpdCB0byBtYWxsb2MuCi0tLQogc3JjL2lub3RpZnkuYyB8IDE3ICsr KysrKysrKysrLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5vdGlmeS5jIGIvc3JjL2lub3RpZnkuYwppbmRl eCBiNjc2ZWEyMTZhLi5hZDAyMTY0YjM3IDEwMDY0NAotLS0gYS9zcmMvaW5vdGlmeS5jCisrKyBi L3NyYy9pbm90aWZ5LmMKQEAgLTQzLDYgKzQzLDkgQEAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMjIg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAvKiBGaWxlIGhhbmRsZSBmb3IgaW5vdGlm eS4gICovCiBzdGF0aWMgaW50IGlub3RpZnlmZCA9IC0xOwogCitzdGF0aWMgc2l6ZV90IGlub3Rp ZnlfYnVmZmVyX2xlbiA9IDA7CitzdGF0aWMgY2hhciAqaW5vdGlmeV9idWZmZXIgPSBOVUxMOwor CiAvKiBBbGlzdCBvZiBmaWxlcyBiZWluZyB3YXRjaGVkLiAgV2Ugd2FudCB0aGUgcmV0dXJuZWQg ZGVzY3JpcHRvciB0bwogICAgYmUgdW5pcXVlIGZvciBldmVyeSB3YXRjaCwgYnV0IGlub3RpZnkg cmV0dXJucyB0aGUgc2FtZSBkZXNjcmlwdG9yCiAgICBXRCBmb3IgbXVsdGlwbGUgY2FsbHMgdG8g aW5vdGlmeV9hZGRfd2F0Y2ggd2l0aCB0aGUgc2FtZSBmaWxlLgpAQCAtMzE5LDkgKzMyMiwxMyBA QCBpbm90aWZ5X2NhbGxiYWNrIChpbnQgZmQsIHZvaWQgKl8pCiAgIC8vIEZJWE1FOiBmZWVkaW5n IHRoZSB2YWx1ZSBmcm9tIEZJT05SRUFEIHRvIGEgbWVtb3J5IGFsbG9jYXRvciBpcyB1bndpc2UK ICAgLy8gU2FkbHkgdGhlIGlub3RpZnkgZXZlbnQgYnVmZmVyIHBhcnNpbmcgYWxnb3JpdGhtIGlz IG5vdCBjYXBhYmxlIG9mCiAgIC8vIGhhbmRsaW5nIHRoZSBjYXNlIHdoZXJlIHdlIHJlYWQgb25s eSBwYXJ0IG9mIGEga2VybmVsIGV2ZW50LgotICBVU0VfU0FGRV9BTExPQ0E7Ci0gIGNoYXIgKmJ1 ZmZlciA9IFNBRkVfQUxMT0NBICh0b19yZWFkKTsKLSAgc3NpemVfdCBuID0gcmVhZCAoZmQsIGJ1 ZmZlciwgdG9fcmVhZCk7CisgIGlmICh0b19yZWFkID4gaW5vdGlmeV9idWZmZXJfbGVuKQorICAg IHsKKyAgICAgIGlub3RpZnlfYnVmZmVyID0geHJlYWxsb2MoaW5vdGlmeV9idWZmZXIsIHRvX3Jl YWQpOworICAgICAgaW5vdGlmeV9idWZmZXJfbGVuID0gdG9fcmVhZDsKKyAgICB9CisKKyAgc3Np emVfdCBuID0gcmVhZCAoZmQsIGlub3RpZnlfYnVmZmVyLCB0b19yZWFkKTsKICAgaWYgKG4gPCAw KQogICAgIHJlcG9ydF9maWxlX25vdGlmeV9lcnJvciAoIkVycm9yIHdoaWxlIHJlYWRpbmcgZmls ZSBzeXN0ZW0gZXZlbnRzIiwgUW5pbCk7CiAKQEAgLTMzMSw3ICszMzgsNyBAQCBpbm90aWZ5X2Nh bGxiYWNrIChpbnQgZmQsIHZvaWQgKl8pCiAKICAgZm9yIChzc2l6ZV90IGkgPSAwOyBpIDwgbjsg KQogICAgIHsKLSAgICAgIHN0cnVjdCBpbm90aWZ5X2V2ZW50ICpldiA9IChzdHJ1Y3QgaW5vdGlm eV9ldmVudCAqKSAmYnVmZmVyW2ldOworICAgICAgc3RydWN0IGlub3RpZnlfZXZlbnQgKmV2ID0g KHN0cnVjdCBpbm90aWZ5X2V2ZW50ICopICZpbm90aWZ5X2J1ZmZlcltpXTsKICAgICAgIExpc3Bf T2JqZWN0IGRlc2NyaXB0b3IgPSBJTlRfVE9fSU5URUdFUiAoZXYtPndkKTsKICAgICAgIExpc3Bf T2JqZWN0IHByZXZ0YWlsID0gZmluZF9kZXNjcmlwdG9yIChkZXNjcmlwdG9yKTsKIApAQCAtMzUx LDggKzM1OCw2IEBAIGlub3RpZnlfY2FsbGJhY2sgKGludCBmZCwgdm9pZCAqXykKICAgICAgICAg fQogICAgICAgaSArPSBzaXplb2YgKCpldikgKyBldi0+bGVuOwogICAgIH0KLQotICBTQUZFX0ZS RUUgKCk7CiB9CiAKIERFRlVOICgiaW5vdGlmeS1hZGQtd2F0Y2giLCBGaW5vdGlmeV9hZGRfd2F0 Y2gsIFNpbm90aWZ5X2FkZF93YXRjaCwgMywgMywgMCwKLS0gCjIuMjAuMQoK --DdFB866C/Z Content-Type: application/octet-stream; name="0003-inotify.c-Break-out-inotify_process_buffer.patch" Content-Disposition: attachment; filename="0003-inotify.c-Break-out-inotify_process_buffer.patch" Content-Transfer-Encoding: base64 RnJvbSBiYzQ2YWZiMzQ1MjRkOTdhMzU0YTYzNmM0NzY1NDRkYWVkZjU2MGNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJYW4gSmFja3NvbiA8aWphY2tzb25AY2hpYXJrLmdyZWVuZW5k Lm9yZy51az4KRGF0ZTogRnJpLCAyMSBKYW4gMjAyMiAxOTo1MToyNSArMDAwMApTdWJqZWN0OiBb UEFUQ0ggMy80XSAqIGlub3RpZnkuYzogQnJlYWsgb3V0IGlub3RpZnlfcHJvY2Vzc19idWZmZXIK CldlIHBhc3MgdGhlIGJ1ZmZlciBmdWxsbmVzcyBpbiBhIGdsb2JhbCB2YXJpYWJsZS4gIFRoaXMg aXMgd2VpcmQgcmlnaHQKbm93LCBidXQgd2UgYXJlIGdvaW5nIHRvIHdhbnQgdGhpcyB0byBwZXJz aXN0IHNvIGl0IGlzIGNvbnZlbmllbnQgdG8KZG8gaXQgbm93LgotLS0KIHNyYy9pbm90aWZ5LmMg fCAxMyArKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbm90aWZ5LmMgYi9zcmMvaW5vdGlmeS5jCmlu ZGV4IGFkMDIxNjRiMzcuLjhhMzY4NWYyZjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbm90aWZ5LmMKKysr IGIvc3JjL2lub3RpZnkuYwpAQCAtNDQsNiArNDQsNyBAQCBDb3B5cmlnaHQgKEMpIDIwMTItMjAy MiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIHN0YXRpYyBpbnQgaW5vdGlmeWZkID0g LTE7CiAKIHN0YXRpYyBzaXplX3QgaW5vdGlmeV9idWZmZXJfbGVuID0gMDsKK3N0YXRpYyBzaXpl X3QgaW5vdGlmeV9idWZmZXJfZnVsbCA9IDA7CiBzdGF0aWMgY2hhciAqaW5vdGlmeV9idWZmZXIg PSBOVUxMOwogCiAvKiBBbGlzdCBvZiBmaWxlcyBiZWluZyB3YXRjaGVkLiAgV2Ugd2FudCB0aGUg cmV0dXJuZWQgZGVzY3JpcHRvciB0bwpAQCAtNzEsNiArNzIsOSBAQCBDb3B5cmlnaHQgKEMpIDIw MTItMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogc3RhdGljIExpc3BfT2Jq ZWN0IHdhdGNoX2xpc3Q7CiAKK3N0YXRpYyB2b2lkCitpbm90aWZ5X3Byb2Nlc3NfYnVmZmVyICh2 b2lkKTsKKwogc3RhdGljIExpc3BfT2JqZWN0CiBtYXNrX3RvX2FzcGVjdHMgKHVpbnQzMl90IG1h c2spCiB7CkBAIC0zMzIsMTEgKzMzNiwxOCBAQCBpbm90aWZ5X2NhbGxiYWNrIChpbnQgZmQsIHZv aWQgKl8pCiAgIGlmIChuIDwgMCkKICAgICByZXBvcnRfZmlsZV9ub3RpZnlfZXJyb3IgKCJFcnJv ciB3aGlsZSByZWFkaW5nIGZpbGUgc3lzdGVtIGV2ZW50cyIsIFFuaWwpOwogCisgIGlub3RpZnlf YnVmZmVyX2Z1bGwgPSBuOworICBpbm90aWZ5X3Byb2Nlc3NfYnVmZmVyICgpOworfQorCitzdGF0 aWMgdm9pZAoraW5vdGlmeV9wcm9jZXNzX2J1ZmZlciAodm9pZCkKK3sKICAgc3RydWN0IGlucHV0 X2V2ZW50IGV2ZW50OwogICBFVkVOVF9JTklUIChldmVudCk7CiAgIGV2ZW50LmtpbmQgPSBGSUxF X05PVElGWV9FVkVOVDsKIAotICBmb3IgKHNzaXplX3QgaSA9IDA7IGkgPCBuOyApCisgIGZvciAo c3NpemVfdCBpID0gMDsgaSA8IGlub3RpZnlfYnVmZmVyX2Z1bGw7ICkKICAgICB7CiAgICAgICBz dHJ1Y3QgaW5vdGlmeV9ldmVudCAqZXYgPSAoc3RydWN0IGlub3RpZnlfZXZlbnQgKikgJmlub3Rp ZnlfYnVmZmVyW2ldOwogICAgICAgTGlzcF9PYmplY3QgZGVzY3JpcHRvciA9IElOVF9UT19JTlRF R0VSIChldi0+d2QpOwotLSAKMi4yMC4xCgo= --DdFB866C/Z Content-Type: application/octet-stream; name="0004-inotify-Pause-when-keyboard-input-is-suspended.patch" Content-Disposition: attachment; filename="0004-inotify-Pause-when-keyboard-input-is-suspended.patch" Content-Transfer-Encoding: base64 RnJvbSA3Yjk0ZjE4MjY4M2FlMTJlM2YzOWE4MmE5OTU3MjM5ZDliMzU4MzJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJYW4gSmFja3NvbiA8aWphY2tzb25AY2hpYXJrLmdyZWVuZW5k Lm9yZy51az4KRGF0ZTogRnJpLCAyMSBKYW4gMjAyMiAxOTo1NjoxMyArMDAwMApTdWJqZWN0OiBb UEFUQ0ggNC80XSBpbm90aWZ5OiBQYXVzZSB3aGVuIGtleWJvYXJkIGlucHV0IGlzIHN1c3BlbmRl ZAoKSWYgdGhlIGVtYWNzIG1haW4gdGhyZWFkIGNhbm5vdCBwcm9jZXNzIGV2ZW50cyBxdWlja2x5 IGVub3VnaCwgdGhlCmlucHV0IGJ1ZmZlciBjYW4gYmVjb21lIGZ1bGwuICBJZiB0aGF0IGhhcHBl bnMsIGV2ZW50cyBjYW4gZ2V0IGxvc3QuCgpUaGVyZSBpcyBhIG1lY2hhbmlzbSB0byBkZXRlY3Qg dGhpcyBpbiBrZXlib2FyZC5jLCBhbmQgcHJldmVudCBwZW9wbGUKZnJvbSBwdXR0aW5nIG1vcmUg c3R1ZmYgaW50byB0aGUgYnVmZmVyLCBidXQgaXQgd2FzIG5vdCB3aXJlZCB1cCB0bwp0aGUgaW5v dGlmeSBtYWNoaW5lcnkuICBTbyBoZWF2eSBpbm90aWZ5IGxvYWQgY2FuIGNhdXNlIGxvc3QKa2V5 c3Ryb2tlcyEKCkZpeCB0aGlzLgoKKiBpbm90aWZ5LmM6IEJlIGFibGUgdG8gcGF1c2UgYW5kIHJl c3VtZSB0aGUgcmVhZGluZywgcmV0YWluaW5nIHRoZQpidWZmZXJlZCBldmVudHMgYXMgbmVjZXNz YXJ5LgoqIGtleWJvYXJkLmM6IENhbGwgc3RvcF9pbm90aWZ5X2lucHV0IGFuZCByZXN1bWVfaW5v dGlmeV9pbnB1dC4KCkRldGFpbHMgb2YgdGhlIGFwcHJvYWNoIGFyZToKCiAtIFRoZSBgaWAgbG9v cCB2YXJpYWJsZSBpbiBgaW5vdGlmeV9wcm9jZXNzX2J1ZmZlcmAgYmVjb21lcyBhIGdsb2JhbAog ICB2YXJpYWJsZSwgc28gdGhhdCB3ZSBjYW4gcmV0YWluIG91ciBrbm93bGVkZ2Ugb2Ygd2hlcmUg d2Ugd2VyZS4KCiAtIEVuYWJsaW5nIG9yIGRpc2FibGluZyByZWFkaW5nIGZyb20gdGhlIGlub3Rp ZnkgZmQgaXMgbm93IGRvbmUgaW4gYQogICBzaW5nbGUgaWRlbXBvdGVudCBmdW5jdGlvbiB3aGlj aCBjaGVja3Mgd2hldGhlciAoaSkgaW5wdXQgaXMKICAgc3VzcGVuZGVkIChpaSkgdGhlIGJ1ZmZl ciBvZiB1bnByb2Nzc2VkIGlub3RpZnkgZXZlbnRzIGlzIGVtcHR5LgogICBIYXBwaWx5IGFkZF9y ZWFkX2ZkIGFuZCBkZWxldGVfcmVhZF9mZCBhcmUgaWRlbXBvdGVudC4KCiAtIE5ldyBob29rcyBh cmUgcHJvdmlkZWQgYnkgd2hpY2gga2V5Ym9hcmQuYyB0ZWxscyBpbm90aWZ5LmMgd2hlbgogICBp bnB1dCBpcyBiZWluZyBzdXNwZW5kZWQgYW5kIHVuc3VzcGVuZGVkLiAgU3VzcGVuZGluZyBpbnB1 dCBpcwogICBzdHJhaWdodGZvcndhcmQuICBVbnN1c3BlbmRpbmcgaXQgbWF5IGludm9sdmUgcHJv Y2Vzc2luZyBidWZmZXJlZAogICBldmVudHMgKGFuZCB0aGF0IG1pZ2h0IGNhdXNlIHRoZSBpbnB1 dCB0byBiZSBzdXNwZW5kZWQgYWdhaW4hKQoKSSBoYXZlIGNoZWNrZWQgdGhhdCB0aGlzIGZpeGVz IHRoZSBsb3N0IGlucHV0IGJ1Zywgd2hpY2ggSSBjYW4KcmVwcm9kdWNlIHdpdGggYSBjcmF6eSB0 ZXN0IHNldHVwLiAgV2l0aCBteSBwYXRjaCwgd2hlbiBlbWFjcyBpcwpwcm9jZXNzaW5nIHRvbyBt YW55IGlub3RpZnkgZXZlbnRzLCBpdCBjYW4gYmVjb21lIHJhdGhlciB1bnJlc3BvbnNpdmUKLSBi dXQgd2hlbiBpdCByZWNvdmVycywgYWxsIHRoZSBldmVudHMgYXJlIHRoZXJlLgoKVGVzdGVkLWJ5 OiBJYW4gSmFja3NvbiA8aWphY2tzb25AY2hpYXJrLmdyZWVuZW5kLm9yZy51az4KLS0tCiBzcmMv aW5vdGlmeS5jICB8IDU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystLS0tCiBzcmMva2V5Ym9hcmQuYyB8ICAyICsrCiBzcmMva2V5Ym9hcmQuaCB8ICA5ICsr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDY0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2lub3RpZnkuYyBiL3NyYy9pbm90aWZ5LmMKaW5kZXggOGEzNjg1 ZjJmMS4uOTdjMGZkOWVmYSAxMDA2NDQKLS0tIGEvc3JjL2lub3RpZnkuYworKysgYi9zcmMvaW5v dGlmeS5jCkBAIC00Myw4ICs0MywxNSBAQCBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMiBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIC8qIEZpbGUgaGFuZGxlIGZvciBpbm90aWZ5LiAgKi8K IHN0YXRpYyBpbnQgaW5vdGlmeWZkID0gLTE7CiAKKy8qIEJ1ZmZlciBpcyBsaWtlIHRoaXM6Cisg KiAgIHxvb29vfD09PT09PT09PT09PT09PT09PT09PT18LS0tLS0tLS0tfAorICogICAwICAgIGRv bmUgICAgICAgICAgICAgICAgICAgZnVsbCAgICAgIGxlbgorICogIm9vb28iIGlzIGV2ZW50cyB3 ZSBoYXZlIHByb2Nlc3NlZCBpbnRvIHRoZSBrZXlib2FyZCBidWZmZXIuCisgKiAiPT09PSIgaXMg ZXZlbnRzIHdlIGhhdmUgcmVhZCBmcm9tIHRoZSBrZXJuZWwgYnV0IG5vdCBwcm9jZXNzZWQuCisg KiAiLS0tLSIgaXMgc3BhcmUgc3BhY2UgdGhhdCB3YXMgdXNlZCBvbiBhIHByZXZpb3VzIG9jY2Fz aW9uICAqLwogc3RhdGljIHNpemVfdCBpbm90aWZ5X2J1ZmZlcl9sZW4gPSAwOwogc3RhdGljIHNp emVfdCBpbm90aWZ5X2J1ZmZlcl9mdWxsID0gMDsKK3N0YXRpYyBzaXplX3QgaW5vdGlmeV9idWZm ZXJfZG9uZSA9IDA7CiBzdGF0aWMgY2hhciAqaW5vdGlmeV9idWZmZXIgPSBOVUxMOwogCiAvKiBB bGlzdCBvZiBmaWxlcyBiZWluZyB3YXRjaGVkLiAgV2Ugd2FudCB0aGUgcmV0dXJuZWQgZGVzY3Jp cHRvciB0bwpAQCAtNzQsNiArODEsOCBAQCBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMiBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogc3RhdGljIHZvaWQKIGlub3RpZnlfcHJvY2Vzc19i dWZmZXIgKHZvaWQpOworc3RhdGljIHZvaWQKK2lub3RpZnlfYWRkX29yX3JlbW92ZV9yZWFkaW5n X2ZkICh2b2lkKTsKIAogc3RhdGljIExpc3BfT2JqZWN0CiBtYXNrX3RvX2FzcGVjdHMgKHVpbnQz Ml90IG1hc2spCkBAIC0zMTksNiArMzI4LDE0IEBAIHJlbW92ZV93YXRjaCAoTGlzcF9PYmplY3Qg ZGVzY3JpcHRvciwgTGlzcF9PYmplY3QgaWQpCiBzdGF0aWMgdm9pZAogaW5vdGlmeV9jYWxsYmFj ayAoaW50IGZkLCB2b2lkICpfKQogeworICBpZiAoIGlub3RpZnlfYnVmZmVyX2RvbmUgIT0gaW5v dGlmeV9idWZmZXJfZnVsbCApCisgICAgeworICAgICAgaW5vdGlmeV9hZGRfb3JfcmVtb3ZlX3Jl YWRpbmdfZmQgKCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8vIEJ1ZmZlciBpcyBlbXB0 eS4gIFdlIHdpbGwgcmVzZXQgZG9uZSBhbmQgZnVsbCBhZnRlciByZWFkaW5nIGludG8gaXQuCisK ICAgaW50IHRvX3JlYWQ7CiAgIGlmIChpb2N0bCAoZmQsIEZJT05SRUFELCAmdG9fcmVhZCkgPCAw KQogICAgIHJlcG9ydF9maWxlX25vdGlmeV9lcnJvciAoIkVycm9yIHdoaWxlIHJldHJpZXZpbmcg ZmlsZSBzeXN0ZW0gZXZlbnRzIiwKQEAgLTMzNyw5ICszNTQsMTQgQEAgaW5vdGlmeV9jYWxsYmFj ayAoaW50IGZkLCB2b2lkICpfKQogICAgIHJlcG9ydF9maWxlX25vdGlmeV9lcnJvciAoIkVycm9y IHdoaWxlIHJlYWRpbmcgZmlsZSBzeXN0ZW0gZXZlbnRzIiwgUW5pbCk7CiAKICAgaW5vdGlmeV9i dWZmZXJfZnVsbCA9IG47CisgIGlub3RpZnlfYnVmZmVyX2RvbmUgPSAwOwogICBpbm90aWZ5X3By b2Nlc3NfYnVmZmVyICgpOworICBpbm90aWZ5X2FkZF9vcl9yZW1vdmVfcmVhZGluZ19mZCAoKTsK IH0KIAorLyogSWRlbXBvdGVudGx5IHByb2Nlc3MgZXZlbnRzIGZyb20gb3VyIGJ1ZmZlciBvZiB0 aGluZ3Mgd2UgaGF2ZSByZWFkCisgKiBmcm9tIHRoZSBrZXJuZWwsIGludG8gdGhlIGlucHV0IGV2 ZW50IGJ1ZmZlci4gIENhbGwgc2l0ZXMgc2hvdWxkCisgKiBjYWxsIGlub3RpZnlfYWRkX29yX3Jl bW92ZV9yZWFkaW5nX2ZkIGFmdGVyd2FyZHMuICAqLwogc3RhdGljIHZvaWQKIGlub3RpZnlfcHJv Y2Vzc19idWZmZXIgKHZvaWQpCiB7CkBAIC0zNDcsOSArMzY5LDE0IEBAIGlub3RpZnlfcHJvY2Vz c19idWZmZXIgKHZvaWQpCiAgIEVWRU5UX0lOSVQgKGV2ZW50KTsKICAgZXZlbnQua2luZCA9IEZJ TEVfTk9USUZZX0VWRU5UOwogCi0gIGZvciAoc3NpemVfdCBpID0gMDsgaSA8IGlub3RpZnlfYnVm ZmVyX2Z1bGw7ICkKKyAgLy8gRklYTUU6IElkZWFsbHkgaW4gdGhlIGZ1dHVyZSBzb21lIGFycmFu Z2VtZW50IHdvdWxkIGJlIG1hZGUgdG8KKyAgLy8gcHJpb3JpdGlzZSBrZXlib2FyZCBpbnB1dCBv dmVyIGlub3RpZnkgZXZlbnRzLCB3aGljaCB3b3VsZAorICAvLyBpbnZvbHZlIHVzaW5nIGEgdGln aHRlciBjb25kaXRpb24gdGhhbiBrYmRfb25faG9sZF9wLgorCisgIHdoaWxlKCBpbm90aWZ5X2J1 ZmZlcl9kb25lIDwgaW5vdGlmeV9idWZmZXJfZnVsbCAmJiAha2JkX29uX2hvbGRfcCAoKSApCiAg ICAgewotICAgICAgc3RydWN0IGlub3RpZnlfZXZlbnQgKmV2ID0gKHN0cnVjdCBpbm90aWZ5X2V2 ZW50ICopICZpbm90aWZ5X2J1ZmZlcltpXTsKKyAgICAgIHN0cnVjdCBpbm90aWZ5X2V2ZW50ICpl diA9CisJKHN0cnVjdCBpbm90aWZ5X2V2ZW50ICopICZpbm90aWZ5X2J1ZmZlcltpbm90aWZ5X2J1 ZmZlcl9kb25lXTsKICAgICAgIExpc3BfT2JqZWN0IGRlc2NyaXB0b3IgPSBJTlRfVE9fSU5URUdF UiAoZXYtPndkKTsKICAgICAgIExpc3BfT2JqZWN0IHByZXZ0YWlsID0gZmluZF9kZXNjcmlwdG9y IChkZXNjcmlwdG9yKTsKIApAQCAtMzY3LDEwICszOTQsMzIgQEAgaW5vdGlmeV9wcm9jZXNzX2J1 ZmZlciAodm9pZCkKICAgICAgICAgICBpZiAoZXYtPm1hc2sgJiBJTl9JR05PUkVEKQogCSAgICBy ZW1vdmVfZGVzY3JpcHRvciAocHJldnRhaWwsIHRydWUpOwogICAgICAgICB9Ci0gICAgICBpICs9 IHNpemVvZiAoKmV2KSArIGV2LT5sZW47CisgICAgICBpbm90aWZ5X2J1ZmZlcl9kb25lICs9IHNp emVvZiAoKmV2KSArIGV2LT5sZW47CiAgICAgfQogfQogCisvKiBJZGVtcG90ZW50bHkgc3RhcnQs IG9yIHN0b3AsIHJlYWRpbmcgZnJvbSB0aGUgaW5vdGlmeSBmZCwgYWNjb3JkaW5nCisgKiB0byB3 aGF0IGlzIHJlcXVpcmVkLiAgKi8KK3N0YXRpYyB2b2lkIGlub3RpZnlfYWRkX29yX3JlbW92ZV9y ZWFkaW5nX2ZkICh2b2lkKSB7CisgIGlmIChpbm90aWZ5ZmQgPj0gMCkgeworICAgIGlmICgga2Jk X29uX2hvbGRfcCAoKSB8fCBpbm90aWZ5X2J1ZmZlcl9kb25lICE9IGlub3RpZnlfYnVmZmVyX2Z1 bGwgKQorICAgICAgZGVsZXRlX3JlYWRfZmQgKGlub3RpZnlmZCk7CisgICAgZWxzZQorICAgICAg YWRkX3JlYWRfZmQgKGlub3RpZnlmZCwgJmlub3RpZnlfY2FsbGJhY2ssIE5VTEwpOworICB9Cit9 CisKKy8qIENhbGxlZCB3aGVuIGtleWJvYXJkIGJ1ZmZlciBpcyBnZXR0aW5nIGZ1bGwsIGtiZF9v bl9ob2xkX3AgYmVjb21lcyB0cnVlLiAqLwordm9pZCBzdG9wX2lub3RpZnlfaW5wdXQgKHZvaWQp IHsKKyAgaW5vdGlmeV9hZGRfb3JfcmVtb3ZlX3JlYWRpbmdfZmQgKCk7Cit9CisKKy8qIENhbGxl ZCB3aGVuIGJ1ZmZlciBjYW4gdGFrZSBtb3JlIGV2ZW50cywga2JkX29uX2hvbGRfcCBiZWNvbWVz IGZhbHNlICovCit2b2lkIHJlc3VtZV9pbm90aWZ5X2lucHV0ICh2b2lkKSB7CisgIGlub3RpZnlf cHJvY2Vzc19idWZmZXIoKTsKKyAgaW5vdGlmeV9hZGRfb3JfcmVtb3ZlX3JlYWRpbmdfZmQgKCk7 Cit9CisKIERFRlVOICgiaW5vdGlmeS1hZGQtd2F0Y2giLCBGaW5vdGlmeV9hZGRfd2F0Y2gsIFNp bm90aWZ5X2FkZF93YXRjaCwgMywgMywgMCwKICAgICAgICBkb2M6IC8qIEFkZCBhIHdhdGNoIGZv ciBGSUxFLU5BTUUgdG8gaW5vdGlmeS4KIApAQCAtNDQ3LDcgKzQ5Niw3IEBAIHJlbmFtZXMgKG1v dmVkLWZyb20gYW5kIG1vdmVkLXRvKS4KICAgICAgIGlmIChpbm90aWZ5ZmQgPCAwKQogCXJlcG9y dF9maWxlX25vdGlmeV9lcnJvciAoIkZpbGUgd2F0Y2hpbmcgaXMgbm90IGF2YWlsYWJsZSIsIFFu aWwpOwogICAgICAgd2F0Y2hfbGlzdCA9IFFuaWw7Ci0gICAgICBhZGRfcmVhZF9mZCAoaW5vdGlm eWZkLCAmaW5vdGlmeV9jYWxsYmFjaywgTlVMTCk7CisgICAgICBpbm90aWZ5X2FkZF9vcl9yZW1v dmVfcmVhZGluZ19mZCAoKTsKICAgICB9CiAKICAgZW5jb2RlZF9maWxlX25hbWUgPSBFTkNPREVf RklMRSAoZmlsZW5hbWUpOwpkaWZmIC0tZ2l0IGEvc3JjL2tleWJvYXJkLmMgYi9zcmMva2V5Ym9h cmQuYwppbmRleCA5ODY1YmM5YWRkLi4xNzFiZGNmMWQ1IDEwMDY0NAotLS0gYS9zcmMva2V5Ym9h cmQuYworKysgYi9zcmMva2V5Ym9hcmQuYwpAQCAtMzY1Nyw2ICszNjU3LDcgQEAga2JkX2J1ZmZl cl9zdG9yZV9idWZmZXJlZF9ldmVudCAodW5pb24gYnVmZmVyZWRfaW5wdXRfZXZlbnQgKmV2ZW50 LAogICAgICAgICAgIGhvbGRfa2V5Ym9hcmRfaW5wdXQgKCk7CiAgICAgICAgICAgdW5yZXF1ZXN0 X3NpZ2lvICgpOwogICAgICAgICAgIHN0b3BfcG9sbGluZyAoKTsKKwkgIHN0b3BfaW5vdGlmeV9p bnB1dCAoKTsKICAgICAgICAgfQogI2VuZGlmCS8qIHN1YnByb2Nlc3NlcyAqLwogICAgIH0KQEAg LTM4NDksNiArMzg1MCw3IEBAIGtiZF9idWZmZXJfZ2V0X2V2ZW50IChLQk9BUkQgKiprYnAsCiAg ICAgICB1bmhvbGRfa2V5Ym9hcmRfaW5wdXQgKCk7CiAgICAgICByZXF1ZXN0X3NpZ2lvICgpOwog ICAgICAgc3RhcnRfcG9sbGluZyAoKTsKKyAgICAgIHJlc3VtZV9pbm90aWZ5X2lucHV0ICgpOwog ICAgIH0KICNlbmRpZgkvKiBzdWJwcm9jZXNzZXMgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2tleWJv YXJkLmggYi9zcmMva2V5Ym9hcmQuaAppbmRleCAwM2FhOTZhZDRiLi5hODMyZDA4YzJiIDEwMDY0 NAotLS0gYS9zcmMva2V5Ym9hcmQuaAorKysgYi9zcmMva2V5Ym9hcmQuaApAQCAtNDk5LDQgKzQ5 OSwxMyBAQCBrYmRfYnVmZmVyX3N0b3JlX2V2ZW50X2hvbGQgKHN0cnVjdCBpbnB1dF9ldmVudCAq ZXZlbnQsCiAKIElOTElORV9IRUFERVJfRU5ECiAKKy8qIERlZmluZWQgaW4gaW5vdGlmeS5jICov CisjaWZkZWYgSEFWRV9JTk9USUZZCitleHRlcm4gdm9pZCBzdG9wX2lub3RpZnlfaW5wdXQgKHZv aWQpOworZXh0ZXJuIHZvaWQgcmVzdW1lX2lub3RpZnlfaW5wdXQgKHZvaWQpOworI2Vsc2UKK0lO TElORSB2b2lkIHN0b3BfaW5vdGlmeV9pbnB1dCAodm9pZCkgeyB9CitJTkxJTkUgdm9pZCByZXN1 bWVfaW5vdGlmeV9pbnB1dCAodm9pZCkgeyB9CisjZW5kaWYKKwogI2VuZGlmIC8qIEVNQUNTX0tF WUJPQVJEX0ggKi8KLS0gCjIuMjAuMQoK --DdFB866C/Z Content-Type: text/plain; charset=us-ascii Content-Description: .signature Content-Transfer-Encoding: 7bit -- Ian Jackson These opinions are my own. Pronouns: they/he. If I emailed you from @fyvzl.net or @evade.org.uk, that is a private address which bypasses my fierce spamfilter. --DdFB866C/Z--