From nobody Thu Jan 11 04:52:12 2024 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4T9XMc6nPKz56PjX; Thu, 11 Jan 2024 04:52:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4T9XMc4WpCz40Lj; Thu, 11 Jan 2024 04:52:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1704948732; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ovMU9FU3KOPstT/sokHle8HZvPY9cAu+SrixlLVC1DE=; b=dfnM4s3lPzszfkAVmMJ8IFXtfZ7bT70rNEJ+EWoV2/8CR5qTFak4Cwzw5gN3wtHWGMmZgZ 0oN/h8iTL3gDAjEoTUb+H3IKTu/EiCuLYIlaSLPjPBMMSdUZhfcvUotzNo0Y6xDLSwyR0f pUDKt/JFe/az7NO7obOcY62XZg70WJKA8KV6k/paqcN6ZNHmn6CiqO0x1fobWeYDDhZlrX wzmGmKpUZ03zgzjN8S085+w3WCeEAFb+JcchXOsy7oa6Rwc8EWpzdrk+W/ODypfNHTyfbu ZuYIE5vmVr0LV94Q4BxFG1MRR0aX7Dg6pKN2mmVwEmy/fD1PIYzk3XgwWJFkHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1704948732; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ovMU9FU3KOPstT/sokHle8HZvPY9cAu+SrixlLVC1DE=; b=YRYYYWW2ERusenFdIWsP6ZX72UkNMOTwH3ozvqm9DjiVk5LfUMP47WtLgvVMTPM8d7/fej AXRMbwNtQtP3rfPIfWCCD7CtHZ7GvBRZoTsqImqULi/CuHJvyMvfMQxeHVFEQQSOt5jAiN nqLyMGcrYOoEP0nLFtUqe8HqYG0mRv+qjpIbSu9q0FveIiRdaW8PQOShncSWW+RAprDjEJ UnItVqymH7HlbPiFBPEZgk4tKh3tTNyaOIVgofeAktCpsVH43BvFSg48mdFWAFOtLMJUTg UK7RLLoK8MEnDcGkA0HOXrmhdX/rDh1KMBkTbcPI0E7XoMB7GzFnGjizr1BwsQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1704948732; a=rsa-sha256; cv=none; b=BP++09CYDnOw+pW3k6LsRY+6oLjd0ngBOAd0f8cw6cfhEvLJZ8p2ToMC+kZSlxgOSYbKmS u8AmdqSaSFInZZi0kKF1sdh5Htndjelr9ZFMhKQ+LzO+gnBNE4/2qd2umPqrvg6Vb7zjim uZ2hh8wf2srh8SsrmaUrDia9Sh/IyE9xaH2JFf09+6uVLrobgLMsDG7z7RVfA7/4XA7Uuk 4rYPBepY3cu2ZCEnhC37Jq5MMaiRrkh5ISLOy0fr2WmVcDpk35zZ81AvgDCrrIdxjipJJg OocdU75RaNXR72ZdD3bIVdA607TtZaEByGzAjRguFSEAmfON3yOqpkHeKqWe9Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4T9XMc3YGvz14Wn; Thu, 11 Jan 2024 04:52:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 40B4qC7v041572; Thu, 11 Jan 2024 04:52:12 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 40B4qCTq041569; Thu, 11 Jan 2024 04:52:12 GMT (envelope-from git) Date: Thu, 11 Jan 2024 04:52:12 GMT Message-Id: <202401110452.40B4qCTq041569@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: e6f4c3146065 - main - netlink: improve edge case when reading out truncated last nlmsg in nb List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: glebius X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e6f4c31460658697827aed7f29ec6e960d6f0a87 Auto-Submitted: auto-generated The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=e6f4c31460658697827aed7f29ec6e960d6f0a87 commit e6f4c31460658697827aed7f29ec6e960d6f0a87 Author: Gleb Smirnoff AuthorDate: 2024-01-11 04:51:53 +0000 Commit: Gleb Smirnoff CommitDate: 2024-01-11 04:51:53 +0000 netlink: improve edge case when reading out truncated last nlmsg in nb When there is not enough space for one full message we return it truncated. This enters special block of code that previously may leave empty buffer with offset == datalen in the queue. Avoid that, as dealing later with empty buffers causes more pain than just avoiding them. While here add missing msgrcv increment. --- sys/netlink/netlink_domain.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/sys/netlink/netlink_domain.c b/sys/netlink/netlink_domain.c index 4790845d1d31..94989af73dfe 100644 --- a/sys/netlink/netlink_domain.c +++ b/sys/netlink/netlink_domain.c @@ -762,11 +762,23 @@ nl_soreceive(struct socket *so, struct sockaddr **psa, struct uio *uio, } else if (len == 0 && uio->uio_resid > 0) { flags |= MSG_TRUNC; partlen = uio->uio_resid; - if (!peek) { - /* XXX: may leave empty nb */ + if (peek) + goto nospace; + datalen += hdr->nlmsg_len; + if (nb->offset + hdr->nlmsg_len == + nb->datalen) { + /* + * Avoid leaving empty nb. + * Process last nb normally. + * Trust uiomove() to care + * about negative uio_resid. + */ + nb = TAILQ_NEXT(nb, tailq); + overflow = 0; + partlen = 0; + } else nb->offset += hdr->nlmsg_len; - datalen += hdr->nlmsg_len; - } + msgrcv++; } else partlen = 0; goto nospace;