)]}'
{"id":"openvpn~1737","triplet_id":"openvpn~master~Ia7894fc360b12c5a0f63fad2abb9bbb1ad9c2bd5","project":"openvpn","branch":"master","full_branch":"refs/heads/master","attention_set":{},"removed_from_attention_set":{"1000007":{"account":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"last_update":"2026-09-25 16:14:36.000000000","reason":"Change was submitted"},"1000053":{"account":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"last_update":"2026-09-25 04:11:45.000000000","reason":"removed on reply"},"1000003":{"account":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"last_update":"2026-09-25 16:14:36.000000000","reason":"Change was submitted"}},"hashtags":[],"change_id":"Ia7894fc360b12c5a0f63fad2abb9bbb1ad9c2bd5","subject":"dco_linux: read multicast notifications on a dedicated netlink socket","status":"MERGED","created":"2026-06-29 00:36:00.000000000","updated":"2026-09-25 16:14:36.000000000","submitted":"2026-09-25 16:14:36.000000000","submitter":{"_account_id":1000002,"name":"Gert Doering","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"total_comment_count":4,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"1737","meta_rev_id":"ae90b547430a55e067cc408ecd628c838fa57bac","_number":1737,"virtual_id_number":1737,"owner":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"actions":{},"labels":{"Code-Review":{"all":[{"value":0,"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},{"value":0,"_account_id":1000002,"name":"Gert Doering","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"}],"values":{"-2":"This shall not be submitted","-1":"I would prefer this is not submitted as is"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me, approved"},"description":"","default_value":0}},"removable_reviewers":[{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"}],"reviewers":{"REVIEWER":[{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"}],"CC":[{"_account_id":1000026,"name":"openvpn-devel","email":"openvpn-devel@lists.sourceforge.net","username":"openvpn-devel"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-06-29 00:36:01.000000000","updated_by":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"real_updated_by":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"reviewer":{"_account_id":1000026,"name":"openvpn-devel","email":"openvpn-devel@lists.sourceforge.net","username":"openvpn-devel"},"state":"CC"},{"updated":"2026-06-29 00:36:01.000000000","updated_by":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"real_updated_by":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"reviewer":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"state":"REVIEWER"},{"updated":"2026-09-24 16:30:13.000000000","updated_by":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"real_updated_by":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"reviewer":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"state":"CC"},{"updated":"2026-09-25 04:11:45.000000000","updated_by":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"real_updated_by":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"reviewer":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"state":"REVIEWER"}],"messages":[{"id":"369300f59ce2f3b20f61df5b30589d775e6ccd51","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"date":"2026-06-29 00:36:00.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"fcf618c1c9cffeb972d48377d0324c7d0bfd7271","author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"date":"2026-09-24 16:30:13.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"5b1d5154336f4a1dc841905ea1d78831567c690c","author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"date":"2026-09-24 21:10:54.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"6f9fe93a1fa72c8ffe2f486532722c00f7068d5e","author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"date":"2026-09-24 21:31:24.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"8b46d93e32f54939cb4ce2b7313c159dc0f9a4db","author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"date":"2026-09-25 04:11:45.000000000","message":"Patch Set 1: Code-Review+2\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"c1deafa8f0594d2f14aec9bc4bde0802d5226a80","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"date":"2026-09-25 13:05:10.000000000","message":"Uploaded patch set 2: Patch Set 1 was rebased.\n\nCopied Votes:\n* Code-Review+2 (copy condition: \"changekind:NO_CHANGE OR **changekind:TRIVIAL_REBASE** OR is:MIN\")\n","accounts_in_message":[],"_revision_number":2},{"id":"ae90b547430a55e067cc408ecd628c838fa57bac","tag":"autogenerated:gerrit:merged","author":{"_account_id":1000002,"name":"Gert Doering","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"date":"2026-09-25 16:14:36.000000000","message":"Change has been successfully pushed.","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"08407e0d3c45ab889e6ff4252fc40d778acca149","revisions":{"faaea4c811c3bc93b2121a96b2a4aef893259467":{"kind":"REWORK","_number":1,"created":"2026-06-29 00:36:00.000000000","uploader":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"ref":"refs/changes/37/1737/1","fetch":{"anonymous http":{"url":"https://gerrit.openvpn.net/openvpn","ref":"refs/changes/37/1737/1","commands":{"Branch":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/1 \u0026\u0026 git checkout -b change-1737 FETCH_HEAD","Checkout":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://gerrit.openvpn.net/openvpn refs/changes/37/1737/1","Reset To":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/1 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"2b8afc6c685f4e451fd0fa5aa37f18147520dfc1","subject":"openvpnserv: always use W variant of RpcStringFree()"}],"author":{"name":"Antonio Quartulli","email":"antonio@mandelbit.com","date":"2026-06-29 00:30:51.000000000","tz":120},"committer":{"name":"Antonio Quartulli","email":"antonio@mandelbit.com","date":"2026-06-29 00:33:59.000000000","tz":120},"subject":"dco_linux: read multicast notifications on a dedicated netlink socket","message":"dco_linux: read multicast notifications on a dedicated netlink socket\n\novpn-dco shared a single netlink socket for both synchronous\nrequest/reply transactions (peer create/delete/get, key operations,\nstats) and the asynchronous multicast notification group (peer\ndel/float, key swap). Because every ovpn_nl_msg_send() drains its reply\nwith nl_recvmsgs() on that same socket, a notification queued by the\nkernel could be dispatched re-entrantly in the middle of an unrelated\nrequest/reply: the NL_CB_VALID handler runs ovpn_handle_msg() -\u003e\nmulti_process_incoming_dco() -\u003e multi_close_instance() while the caller\nis still walking an instance collection. For example multi_print_status()\nrefreshes stats with dco_get_peer_stats_multi() and then iterates\nm-\u003ehash, and multi_delete_dup() iterates m-\u003einstances[] while closing\nduplicates; an instance freed underneath either iterator becomes a\nuse-after-free and the server crashes (observed under mass simultaneous\nclient reconnects).\n\nSubscribe the multicast group on a dedicated socket (nl_sock_notify) and\nread it only from dco_read_and_process(), the top-level event-loop point\nwhere closing an instance is safe. The request/reply socket is no longer\na member of the group, so parsing a command or stats reply can never\ndispatch a notification. The event loop now monitors the notification\nsocket; the request/reply socket keeps being drained synchronously by\novpn_nl_msg_send().\n\nChange-Id: Ia7894fc360b12c5a0f63fad2abb9bbb1ad9c2bd5\nGitHub: closes OpenVPN/openvpn#1067\nSigned-off-by: Antonio Quartulli \u003cantonio.quartulli@openvpn.com\u003e\n"},"branch":"refs/heads/master"},"23cbacde0afc425938af3171111cdefde5651c62":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2026-09-25 13:05:10.000000000","uploader":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"ref":"refs/changes/37/1737/2","fetch":{"anonymous http":{"url":"https://gerrit.openvpn.net/openvpn","ref":"refs/changes/37/1737/2","commands":{"Branch":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/2 \u0026\u0026 git checkout -b change-1737 FETCH_HEAD","Checkout":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://gerrit.openvpn.net/openvpn refs/changes/37/1737/2","Reset To":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/2 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"0cc99b10b4464bdeaa8c254f8388aeb241e8e8b6","subject":"GHA: Maintenance update September 2026"}],"author":{"name":"Antonio Quartulli","email":"antonio@mandelbit.com","date":"2026-06-29 00:30:51.000000000","tz":120},"committer":{"name":"Antonio Quartulli","email":"antonio@mandelbit.com","date":"2026-09-25 13:03:00.000000000","tz":120},"subject":"dco_linux: read multicast notifications on a dedicated netlink socket","message":"dco_linux: read multicast notifications on a dedicated netlink socket\n\novpn-dco shared a single netlink socket for both synchronous\nrequest/reply transactions (peer create/delete/get, key operations,\nstats) and the asynchronous multicast notification group (peer\ndel/float, key swap). Because every ovpn_nl_msg_send() drains its reply\nwith nl_recvmsgs() on that same socket, a notification queued by the\nkernel could be dispatched re-entrantly in the middle of an unrelated\nrequest/reply: the NL_CB_VALID handler runs ovpn_handle_msg() -\u003e\nmulti_process_incoming_dco() -\u003e multi_close_instance() while the caller\nis still walking an instance collection. For example multi_print_status()\nrefreshes stats with dco_get_peer_stats_multi() and then iterates\nm-\u003ehash, and multi_delete_dup() iterates m-\u003einstances[] while closing\nduplicates; an instance freed underneath either iterator becomes a\nuse-after-free and the server crashes (observed under mass simultaneous\nclient reconnects).\n\nSubscribe the multicast group on a dedicated socket (nl_sock_notify) and\nread it only from dco_read_and_process(), the top-level event-loop point\nwhere closing an instance is safe. The request/reply socket is no longer\na member of the group, so parsing a command or stats reply can never\ndispatch a notification. The event loop now monitors the notification\nsocket; the request/reply socket keeps being drained synchronously by\novpn_nl_msg_send().\n\nChange-Id: Ia7894fc360b12c5a0f63fad2abb9bbb1ad9c2bd5\nGitHub: closes OpenVPN/openvpn#1067\nSigned-off-by: Antonio Quartulli \u003cantonio.quartulli@openvpn.com\u003e\n"},"branch":"refs/heads/master"},"08407e0d3c45ab889e6ff4252fc40d778acca149":{"kind":"TRIVIAL_REBASE_WITH_MESSAGE_UPDATE","_number":3,"created":"2026-09-25 16:14:36.000000000","uploader":{"_account_id":1000002,"name":"Gert Doering","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"ref":"refs/changes/37/1737/3","fetch":{"anonymous http":{"url":"https://gerrit.openvpn.net/openvpn","ref":"refs/changes/37/1737/3","commands":{"Branch":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/3 \u0026\u0026 git checkout -b change-1737 FETCH_HEAD","Checkout":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://gerrit.openvpn.net/openvpn refs/changes/37/1737/3","Reset To":"git fetch https://gerrit.openvpn.net/openvpn refs/changes/37/1737/3 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"67e6faa4496ff6fedc9297faf78d8cd4646a0b4b","subject":"multi: make multi_add_mbuf static"}],"author":{"name":"Antonio Quartulli","email":"antonio@mandelbit.com","date":"2026-09-25 13:14:11.000000000","tz":120},"committer":{"name":"Gert Doering","email":"gert@greenie.muc.de","date":"2026-09-25 14:39:23.000000000","tz":120},"subject":"dco_linux: read multicast notifications on a dedicated netlink socket","message":"dco_linux: read multicast notifications on a dedicated netlink socket\n\novpn-dco shared a single netlink socket for both synchronous\nrequest/reply transactions (peer create/delete/get, key operations,\nstats) and the asynchronous multicast notification group (peer\ndel/float, key swap). Because every ovpn_nl_msg_send() drains its reply\nwith nl_recvmsgs() on that same socket, a notification queued by the\nkernel could be dispatched re-entrantly in the middle of an unrelated\nrequest/reply: the NL_CB_VALID handler runs ovpn_handle_msg() -\u003e\nmulti_process_incoming_dco() -\u003e multi_close_instance() while the caller\nis still walking an instance collection. For example multi_print_status()\nrefreshes stats with dco_get_peer_stats_multi() and then iterates\nm-\u003ehash, and multi_delete_dup() iterates m-\u003einstances[] while closing\nduplicates; an instance freed underneath either iterator becomes a\nuse-after-free and the server crashes (observed under mass simultaneous\nclient reconnects).\n\nSubscribe the multicast group on a dedicated socket (nl_sock_notify) and\nread it only from dco_read_and_process(), the top-level event-loop point\nwhere closing an instance is safe. The request/reply socket is no longer\na member of the group, so parsing a command or stats reply can never\ndispatch a notification. The event loop now monitors the notification\nsocket; the request/reply socket keeps being drained synchronously by\novpn_nl_msg_send().\n\nChange-Id: Ia7894fc360b12c5a0f63fad2abb9bbb1ad9c2bd5\nGitHub: closes OpenVPN/openvpn#1067\nGitHub: OpenVPN/openvpn#1111\nSigned-off-by: Antonio Quartulli \u003cantonio.quartulli@openvpn.com\u003e\nAcked-by: Razvan Cojocaru \u003crazvanc@mailbox.org\u003e\nGerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1737\nMessage-Id: \u003c20260925131417.10540-1-gert@greenie.muc.de\u003e\nURL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg39497.html\nSigned-off-by: Gert Doering \u003cgert@greenie.muc.de\u003e\n"},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[]}
