From nobody Wed Feb 15 16:19:13 2023 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 4PH3Dd4gWrz3qVxX; Wed, 15 Feb 2023 16:19:13 +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 4PH3Dd46cSz3k2X; Wed, 15 Feb 2023 16:19:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1676477953; 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=elrGmdtmdq4FC2B+XNJjuPmBcBkYpGXus3ddgVJxh78=; b=nCVYQseLXN5UYHZYvVGlFIPiwYbwTwVqVeyE7AmFcHu1Uyokjz9UjfUGwm52q3MVhJNlqm /oEQb21hMmWhCdzdv0SnNRM7KXzm+Cz+hITkg/zhoF8HJcVgc7BPuHio+FQrR5bLDodqC/ tWI2tBM0SA1kgDZQLzy+DMUjDKxkWS5fID1sSjXtHCClnfNH8F+0yaMB82uFkdrInuSom2 HziTh0mcnJfBZrjsHvbxgRW4mhkkLdSRI6gxoLK4hoBzlj8ytidC1qSHsFkP+8cMXxDR/B 22KhEqhLhSwHz7418o+hAF6nkt85I8CYQSKKDPlF3oGYVBmQ+OWFZJkgeQfqOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1676477953; 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=elrGmdtmdq4FC2B+XNJjuPmBcBkYpGXus3ddgVJxh78=; b=RDrkEojHkMuipjNl6Q/pb380Pz3kEXUVE9Pf9/fywPHyO889yA+Fg6ZNZnMVxBAQFLlbir Ekxj3jPYFh6ejFj8va6K+bNZrFK+ICtYPxFP4ENQtuvymyXcIeX/Q/ee8tSPInNIZDsA22 vdBXvurTE2uUcMO/vrMjTgd9cUtV+1Jgy1RJy8y5r0Ako9uK0KABpCv1lmxutUJA/6xRGs ZFuBc8hH82OkT5Ju9ItfMAY9ngPfQ1WOEt3Rl71jqXvF9G/y7KYlRBjGh7ce75RV3/dF+j k7WcFfs4XEsrucmLNiJwnmQKGbWDniD40VVwcT/+0vkcWmtmAZUjRZJAnkND3w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1676477953; a=rsa-sha256; cv=none; b=gRBHwvw4xH7sY0e2DYJvTrNycHLtAICembCMHzGmS3JVPtbZfaQ8e4RPXfeQCqn4GeXuZb +g6kkpkQwanU6gYmRIPOByCrenjoZyg4q8sahvM1dPIJG69burCgdXSHSKq0DFjJGpR9VZ CzsSGJsBf8c4XyqFO3rJ++9ryUPTaI0hcgT0UhdHkElbeEEq7QjogA3DDijLy8ZJIXJRuE osdUsvf6Xuat3+39Hj+aUlQ3SbCuQB59UtV/eVaD4HQoxp+O8kEmB/wF2F2xbXPMv2WXi6 FC8GewiChXS2m3b2q0cvfQNwvvUnmuTB0O3XJyQX5hsR78av5gC1TkAGUUOXOQ== 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 4PH3Dd3BNwzVFn; Wed, 15 Feb 2023 16:19:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 31FGJDfd059516; Wed, 15 Feb 2023 16:19:13 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 31FGJDHm059515; Wed, 15 Feb 2023 16:19:13 GMT (envelope-from git) Date: Wed, 15 Feb 2023 16:19:13 GMT Message-Id: <202302151619.31FGJDHm059515@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: "Alexander V. Chernikov" Subject: git: f334eece0677 - releng/13.2 - netlink: allow to override sb_max for netlink sockets. 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: melifaro X-Git-Repository: src X-Git-Refname: refs/heads/releng/13.2 X-Git-Reftype: branch X-Git-Commit: f334eece06771b8f81a9ca04318925c4faf9cdcd Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch releng/13.2 has been updated by melifaro: URL: https://cgit.FreeBSD.org/src/commit/?id=f334eece06771b8f81a9ca04318925c4faf9cdcd commit f334eece06771b8f81a9ca04318925c4faf9cdcd Author: Alexander V. Chernikov AuthorDate: 2023-02-10 16:07:17 +0000 Commit: Alexander V. Chernikov CommitDate: 2023-02-15 16:18:39 +0000 netlink: allow to override sb_max for netlink sockets. Netlink sockets sometimes require larger buffers than other sockets. For example, full-view IPv4 dump sent via netlink may consume 50+ megabytes. The desired buffer may be bigger than the system maximum `sb_max`. FreeBSD HEAD has a mechanism for overriding protocol `setsockopt()` handler, which netlink uses to permit buffer reservations beyond `sb_max`. This behaviour is handy as it doesn't require system administrator to lift the limits for other sockets. Stable/13 lack such muchanism, so a different approach has to be used. This diff is a direct commit to stable/13 and it simply copies the logic from Netlink in -HEAD for checking if the larger buffer size should be permitted. Differential Revision: https://reviews.freebsd.org/D38472 Approved by: re(cperciva) (cherry picked from commit c3d3f3594fdf653392936594b75ec330af12d7fa) --- sys/kern/uipc_sockbuf.c | 3 ++- sys/kern/uipc_socket.c | 10 ++++++++++ sys/sys/sockopt.h | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/sys/kern/uipc_sockbuf.c b/sys/kern/uipc_sockbuf.c index cbfcc0e5fe95..277965412779 100644 --- a/sys/kern/uipc_sockbuf.c +++ b/sys/kern/uipc_sockbuf.c @@ -693,7 +693,8 @@ sbsetopt(struct socket *so, int cmd, u_long cc) if (*lowat > *hiwat) *lowat = *hiwat; } else { - if (!sbreserve_locked(sb, cc, so, curthread)) + u_long limit = sogetmaxbuf(so); + if (!sbreserve_locked_limit(sb, cc, so, limit, curthread)) error = ENOBUFS; } if (error == 0) diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index f8931b653a4d..fdf718de2483 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -128,6 +128,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -2975,6 +2976,15 @@ sooptcopyin(struct sockopt *sopt, void *buf, size_t len, size_t minlen) return (0); } +u_long +sogetmaxbuf(struct socket *so) +{ + if (so->so_proto->pr_domain->dom_family != PF_NETLINK) + return (sb_max); + u_long nl_maxsockbuf = 512 * 1024 * 1024; /* 512M, XXX: init based on physmem */ + return ((priv_check(curthread, PRIV_NET_ROUTE) == 0) ? nl_maxsockbuf : sb_max); +} + /* * Kernel version of setsockopt(2). * diff --git a/sys/sys/sockopt.h b/sys/sys/sockopt.h index cb7fc3ffca27..d01d62f21680 100644 --- a/sys/sys/sockopt.h +++ b/sys/sys/sockopt.h @@ -68,5 +68,6 @@ int accept_filt_getopt(struct socket *, struct sockopt *); int accept_filt_setopt(struct socket *, struct sockopt *); int so_setsockopt(struct socket *so, int level, int optname, void *optval, size_t optlen); +u_long sogetmaxbuf(struct socket *so); #endif /* _SYS_SOCKOPT_H_ */