Skip to content

Commit b0573de

Browse files
kaberDavid S. Miller
authored and
David S. Miller
committed
[NET]: Introduce SO_{SND,RCV}BUFFORCE socket options
Allows overriding of sysctl_{wmem,rmrm}_max Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent f9e815b commit b0573de

File tree

22 files changed

+58
-2
lines changed

22 files changed

+58
-2
lines changed

include/asm-alpha/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
#define SO_ERROR 0x1007
2626
#define SO_SNDBUF 0x1001
2727
#define SO_RCVBUF 0x1002
28+
#define SO_SNDBUFFORCE 0x100a
29+
#define SO_RCVBUFFORCE 0x100b
2830
#define SO_RCVLOWAT 0x1010
2931
#define SO_SNDLOWAT 0x1011
3032
#define SO_RCVTIMEO 0x1012

include/asm-arm/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#define SO_BROADCAST 6
1515
#define SO_SNDBUF 7
1616
#define SO_RCVBUF 8
17+
#define SO_SNDBUFFORCE 32
18+
#define SO_RCVBUFFORCE 33
1719
#define SO_KEEPALIVE 9
1820
#define SO_OOBINLINE 10
1921
#define SO_NO_CHECK 11

include/asm-arm26/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#define SO_BROADCAST 6
1515
#define SO_SNDBUF 7
1616
#define SO_RCVBUF 8
17+
#define SO_SNDBUFFORCE 32
18+
#define SO_RCVBUFFORCE 33
1719
#define SO_KEEPALIVE 9
1820
#define SO_OOBINLINE 10
1921
#define SO_NO_CHECK 11

include/asm-cris/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#define SO_BROADCAST 6
1717
#define SO_SNDBUF 7
1818
#define SO_RCVBUF 8
19+
#define SO_SNDBUFFORCE 32
20+
#define SO_RCVBUFFORCE 33
1921
#define SO_KEEPALIVE 9
2022
#define SO_OOBINLINE 10
2123
#define SO_NO_CHECK 11

include/asm-frv/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#define SO_BROADCAST 6
1515
#define SO_SNDBUF 7
1616
#define SO_RCVBUF 8
17+
#define SO_SNDBUFFORCE 32
18+
#define SO_RCVBUFFORCE 33
1719
#define SO_KEEPALIVE 9
1820
#define SO_OOBINLINE 10
1921
#define SO_NO_CHECK 11

include/asm-h8300/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#define SO_BROADCAST 6
1515
#define SO_SNDBUF 7
1616
#define SO_RCVBUF 8
17+
#define SO_SNDBUFFORCE 32
18+
#define SO_RCVBUFFORCE 33
1719
#define SO_KEEPALIVE 9
1820
#define SO_OOBINLINE 10
1921
#define SO_NO_CHECK 11

include/asm-i386/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#define SO_BROADCAST 6
1515
#define SO_SNDBUF 7
1616
#define SO_RCVBUF 8
17+
#define SO_SNDBUFFORCE 32
18+
#define SO_RCVBUFFORCE 33
1719
#define SO_KEEPALIVE 9
1820
#define SO_OOBINLINE 10
1921
#define SO_NO_CHECK 11

include/asm-ia64/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
#define SO_BROADCAST 6
2424
#define SO_SNDBUF 7
2525
#define SO_RCVBUF 8
26+
#define SO_SNDBUFFORCE 32
27+
#define SO_RCVBUFFORCE 33
2628
#define SO_KEEPALIVE 9
2729
#define SO_OOBINLINE 10
2830
#define SO_NO_CHECK 11

include/asm-m32r/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#define SO_BROADCAST 6
1515
#define SO_SNDBUF 7
1616
#define SO_RCVBUF 8
17+
#define SO_SNDBUFFORCE 32
18+
#define SO_RCVBUFFORCE 33
1719
#define SO_KEEPALIVE 9
1820
#define SO_OOBINLINE 10
1921
#define SO_NO_CHECK 11

include/asm-m68k/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#define SO_BROADCAST 6
1515
#define SO_SNDBUF 7
1616
#define SO_RCVBUF 8
17+
#define SO_SNDBUFFORCE 32
18+
#define SO_RCVBUFFORCE 33
1719
#define SO_KEEPALIVE 9
1820
#define SO_OOBINLINE 10
1921
#define SO_NO_CHECK 11

include/asm-mips/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ To add: #define SO_REUSEPORT 0x0200 /* Allow local address and port reuse. */
3737
#define SO_ERROR 0x1007 /* get error status and clear */
3838
#define SO_SNDBUF 0x1001 /* Send buffer size. */
3939
#define SO_RCVBUF 0x1002 /* Receive buffer. */
40+
#define SO_SNDBUFFORCE 0x100a
41+
#define SO_RCVBUFFORCE 0x100b
4042
#define SO_SNDLOWAT 0x1003 /* send low-water mark */
4143
#define SO_RCVLOWAT 0x1004 /* receive low-water mark */
4244
#define SO_SNDTIMEO 0x1005 /* send timeout */

include/asm-parisc/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
/* To add :#define SO_REUSEPORT 0x0200 */
1717
#define SO_SNDBUF 0x1001
1818
#define SO_RCVBUF 0x1002
19+
#define SO_SNDBUFFORCE 0x100a
20+
#define SO_RCVBUFFORCE 0x100b
1921
#define SO_SNDLOWAT 0x1003
2022
#define SO_RCVLOWAT 0x1004
2123
#define SO_SNDTIMEO 0x1005

include/asm-ppc/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#define SO_BROADCAST 6
2121
#define SO_SNDBUF 7
2222
#define SO_RCVBUF 8
23+
#define SO_SNDBUFFORCE 32
24+
#define SO_RCVBUFFORCE 33
2325
#define SO_KEEPALIVE 9
2426
#define SO_OOBINLINE 10
2527
#define SO_NO_CHECK 11

include/asm-ppc64/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#define SO_BROADCAST 6
2222
#define SO_SNDBUF 7
2323
#define SO_RCVBUF 8
24+
#define SO_SNDBUFFORCE 32
25+
#define SO_RCVBUFFORCE 33
2426
#define SO_KEEPALIVE 9
2527
#define SO_OOBINLINE 10
2628
#define SO_NO_CHECK 11

include/asm-s390/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
#define SO_BROADCAST 6
2323
#define SO_SNDBUF 7
2424
#define SO_RCVBUF 8
25+
#define SO_SNDBUFFORCE 32
26+
#define SO_RCVBUFFORCE 33
2527
#define SO_KEEPALIVE 9
2628
#define SO_OOBINLINE 10
2729
#define SO_NO_CHECK 11

include/asm-sh/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#define SO_BROADCAST 6
1515
#define SO_SNDBUF 7
1616
#define SO_RCVBUF 8
17+
#define SO_RCVBUFFORCE 32
18+
#define SO_SNDBUFFORCE 33
1719
#define SO_KEEPALIVE 9
1820
#define SO_OOBINLINE 10
1921
#define SO_NO_CHECK 11

include/asm-sparc/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
#define SO_SNDBUF 0x1001
3131
#define SO_RCVBUF 0x1002
32+
#define SO_SNDBUFFORCE 0x100a
33+
#define SO_RCVBUFFORCE 0x100b
3234
#define SO_ERROR 0x1007
3335
#define SO_TYPE 0x1008
3436

include/asm-sparc64/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
#define SO_SNDBUF 0x1001
3131
#define SO_RCVBUF 0x1002
32+
#define SO_SNDBUFFORCE 0x100a
33+
#define SO_RCVBUFFORCE 0x100b
3234
#define SO_ERROR 0x1007
3335
#define SO_TYPE 0x1008
3436

include/asm-v850/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#define SO_BROADCAST 6
1515
#define SO_SNDBUF 7
1616
#define SO_RCVBUF 8
17+
#define SO_SNDBUFFORCE 32
18+
#define SO_RCVBUFFORCE 33
1719
#define SO_KEEPALIVE 9
1820
#define SO_OOBINLINE 10
1921
#define SO_NO_CHECK 11

include/asm-x86_64/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#define SO_BROADCAST 6
1515
#define SO_SNDBUF 7
1616
#define SO_RCVBUF 8
17+
#define SO_SNDBUFFORCE 32
18+
#define SO_RCVBUFFORCE 33
1719
#define SO_KEEPALIVE 9
1820
#define SO_OOBINLINE 10
1921
#define SO_NO_CHECK 11

include/asm-xtensa/socket.h

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#define SO_BROADCAST 6
2525
#define SO_SNDBUF 7
2626
#define SO_RCVBUF 8
27+
#define SO_SNDBUFFORCE 32
28+
#define SO_RCVBUFFORCE 33
2729
#define SO_KEEPALIVE 9
2830
#define SO_OOBINLINE 10
2931
#define SO_NO_CHECK 11

net/core/sock.c

+16-2
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
260260

261261
if (val > sysctl_wmem_max)
262262
val = sysctl_wmem_max;
263-
263+
set_sndbuf:
264264
sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
265265
if ((val * 2) < SOCK_MIN_SNDBUF)
266266
sk->sk_sndbuf = SOCK_MIN_SNDBUF;
@@ -274,6 +274,13 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
274274
sk->sk_write_space(sk);
275275
break;
276276

277+
case SO_SNDBUFFORCE:
278+
if (!capable(CAP_NET_ADMIN)) {
279+
ret = -EPERM;
280+
break;
281+
}
282+
goto set_sndbuf;
283+
277284
case SO_RCVBUF:
278285
/* Don't error on this BSD doesn't and if you think
279286
about it this is right. Otherwise apps have to
@@ -282,7 +289,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
282289

283290
if (val > sysctl_rmem_max)
284291
val = sysctl_rmem_max;
285-
292+
set_rcvbuf:
286293
sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
287294
/* FIXME: is this lower bound the right one? */
288295
if ((val * 2) < SOCK_MIN_RCVBUF)
@@ -291,6 +298,13 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
291298
sk->sk_rcvbuf = val * 2;
292299
break;
293300

301+
case SO_RCVBUFFORCE:
302+
if (!capable(CAP_NET_ADMIN)) {
303+
ret = -EPERM;
304+
break;
305+
}
306+
goto set_rcvbuf;
307+
294308
case SO_KEEPALIVE:
295309
#ifdef CONFIG_INET
296310
if (sk->sk_protocol == IPPROTO_TCP)

0 commit comments

Comments
 (0)