Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

authored by

Patrick McHardy and committed by
David S. Miller
b0573dea f9e815b3

+58 -2
+2
include/asm-alpha/socket.h
··· 25 25 #define SO_ERROR 0x1007 26 26 #define SO_SNDBUF 0x1001 27 27 #define SO_RCVBUF 0x1002 28 + #define SO_SNDBUFFORCE 0x100a 29 + #define SO_RCVBUFFORCE 0x100b 28 30 #define SO_RCVLOWAT 0x1010 29 31 #define SO_SNDLOWAT 0x1011 30 32 #define SO_RCVTIMEO 0x1012
+2
include/asm-arm/socket.h
··· 14 14 #define SO_BROADCAST 6 15 15 #define SO_SNDBUF 7 16 16 #define SO_RCVBUF 8 17 + #define SO_SNDBUFFORCE 32 18 + #define SO_RCVBUFFORCE 33 17 19 #define SO_KEEPALIVE 9 18 20 #define SO_OOBINLINE 10 19 21 #define SO_NO_CHECK 11
+2
include/asm-arm26/socket.h
··· 14 14 #define SO_BROADCAST 6 15 15 #define SO_SNDBUF 7 16 16 #define SO_RCVBUF 8 17 + #define SO_SNDBUFFORCE 32 18 + #define SO_RCVBUFFORCE 33 17 19 #define SO_KEEPALIVE 9 18 20 #define SO_OOBINLINE 10 19 21 #define SO_NO_CHECK 11
+2
include/asm-cris/socket.h
··· 16 16 #define SO_BROADCAST 6 17 17 #define SO_SNDBUF 7 18 18 #define SO_RCVBUF 8 19 + #define SO_SNDBUFFORCE 32 20 + #define SO_RCVBUFFORCE 33 19 21 #define SO_KEEPALIVE 9 20 22 #define SO_OOBINLINE 10 21 23 #define SO_NO_CHECK 11
+2
include/asm-frv/socket.h
··· 14 14 #define SO_BROADCAST 6 15 15 #define SO_SNDBUF 7 16 16 #define SO_RCVBUF 8 17 + #define SO_SNDBUFFORCE 32 18 + #define SO_RCVBUFFORCE 33 17 19 #define SO_KEEPALIVE 9 18 20 #define SO_OOBINLINE 10 19 21 #define SO_NO_CHECK 11
+2
include/asm-h8300/socket.h
··· 14 14 #define SO_BROADCAST 6 15 15 #define SO_SNDBUF 7 16 16 #define SO_RCVBUF 8 17 + #define SO_SNDBUFFORCE 32 18 + #define SO_RCVBUFFORCE 33 17 19 #define SO_KEEPALIVE 9 18 20 #define SO_OOBINLINE 10 19 21 #define SO_NO_CHECK 11
+2
include/asm-i386/socket.h
··· 14 14 #define SO_BROADCAST 6 15 15 #define SO_SNDBUF 7 16 16 #define SO_RCVBUF 8 17 + #define SO_SNDBUFFORCE 32 18 + #define SO_RCVBUFFORCE 33 17 19 #define SO_KEEPALIVE 9 18 20 #define SO_OOBINLINE 10 19 21 #define SO_NO_CHECK 11
+2
include/asm-ia64/socket.h
··· 23 23 #define SO_BROADCAST 6 24 24 #define SO_SNDBUF 7 25 25 #define SO_RCVBUF 8 26 + #define SO_SNDBUFFORCE 32 27 + #define SO_RCVBUFFORCE 33 26 28 #define SO_KEEPALIVE 9 27 29 #define SO_OOBINLINE 10 28 30 #define SO_NO_CHECK 11
+2
include/asm-m32r/socket.h
··· 14 14 #define SO_BROADCAST 6 15 15 #define SO_SNDBUF 7 16 16 #define SO_RCVBUF 8 17 + #define SO_SNDBUFFORCE 32 18 + #define SO_RCVBUFFORCE 33 17 19 #define SO_KEEPALIVE 9 18 20 #define SO_OOBINLINE 10 19 21 #define SO_NO_CHECK 11
+2
include/asm-m68k/socket.h
··· 14 14 #define SO_BROADCAST 6 15 15 #define SO_SNDBUF 7 16 16 #define SO_RCVBUF 8 17 + #define SO_SNDBUFFORCE 32 18 + #define SO_RCVBUFFORCE 33 17 19 #define SO_KEEPALIVE 9 18 20 #define SO_OOBINLINE 10 19 21 #define SO_NO_CHECK 11
+2
include/asm-mips/socket.h
··· 37 37 #define SO_ERROR 0x1007 /* get error status and clear */ 38 38 #define SO_SNDBUF 0x1001 /* Send buffer size. */ 39 39 #define SO_RCVBUF 0x1002 /* Receive buffer. */ 40 + #define SO_SNDBUFFORCE 0x100a 41 + #define SO_RCVBUFFORCE 0x100b 40 42 #define SO_SNDLOWAT 0x1003 /* send low-water mark */ 41 43 #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ 42 44 #define SO_SNDTIMEO 0x1005 /* send timeout */
+2
include/asm-parisc/socket.h
··· 16 16 /* To add :#define SO_REUSEPORT 0x0200 */ 17 17 #define SO_SNDBUF 0x1001 18 18 #define SO_RCVBUF 0x1002 19 + #define SO_SNDBUFFORCE 0x100a 20 + #define SO_RCVBUFFORCE 0x100b 19 21 #define SO_SNDLOWAT 0x1003 20 22 #define SO_RCVLOWAT 0x1004 21 23 #define SO_SNDTIMEO 0x1005
+2
include/asm-ppc/socket.h
··· 20 20 #define SO_BROADCAST 6 21 21 #define SO_SNDBUF 7 22 22 #define SO_RCVBUF 8 23 + #define SO_SNDBUFFORCE 32 24 + #define SO_RCVBUFFORCE 33 23 25 #define SO_KEEPALIVE 9 24 26 #define SO_OOBINLINE 10 25 27 #define SO_NO_CHECK 11
+2
include/asm-ppc64/socket.h
··· 21 21 #define SO_BROADCAST 6 22 22 #define SO_SNDBUF 7 23 23 #define SO_RCVBUF 8 24 + #define SO_SNDBUFFORCE 32 25 + #define SO_RCVBUFFORCE 33 24 26 #define SO_KEEPALIVE 9 25 27 #define SO_OOBINLINE 10 26 28 #define SO_NO_CHECK 11
+2
include/asm-s390/socket.h
··· 22 22 #define SO_BROADCAST 6 23 23 #define SO_SNDBUF 7 24 24 #define SO_RCVBUF 8 25 + #define SO_SNDBUFFORCE 32 26 + #define SO_RCVBUFFORCE 33 25 27 #define SO_KEEPALIVE 9 26 28 #define SO_OOBINLINE 10 27 29 #define SO_NO_CHECK 11
+2
include/asm-sh/socket.h
··· 14 14 #define SO_BROADCAST 6 15 15 #define SO_SNDBUF 7 16 16 #define SO_RCVBUF 8 17 + #define SO_RCVBUFFORCE 32 18 + #define SO_SNDBUFFORCE 33 17 19 #define SO_KEEPALIVE 9 18 20 #define SO_OOBINLINE 10 19 21 #define SO_NO_CHECK 11
+2
include/asm-sparc/socket.h
··· 29 29 30 30 #define SO_SNDBUF 0x1001 31 31 #define SO_RCVBUF 0x1002 32 + #define SO_SNDBUFFORCE 0x100a 33 + #define SO_RCVBUFFORCE 0x100b 32 34 #define SO_ERROR 0x1007 33 35 #define SO_TYPE 0x1008 34 36
+2
include/asm-sparc64/socket.h
··· 29 29 30 30 #define SO_SNDBUF 0x1001 31 31 #define SO_RCVBUF 0x1002 32 + #define SO_SNDBUFFORCE 0x100a 33 + #define SO_RCVBUFFORCE 0x100b 32 34 #define SO_ERROR 0x1007 33 35 #define SO_TYPE 0x1008 34 36
+2
include/asm-v850/socket.h
··· 14 14 #define SO_BROADCAST 6 15 15 #define SO_SNDBUF 7 16 16 #define SO_RCVBUF 8 17 + #define SO_SNDBUFFORCE 32 18 + #define SO_RCVBUFFORCE 33 17 19 #define SO_KEEPALIVE 9 18 20 #define SO_OOBINLINE 10 19 21 #define SO_NO_CHECK 11
+2
include/asm-x86_64/socket.h
··· 14 14 #define SO_BROADCAST 6 15 15 #define SO_SNDBUF 7 16 16 #define SO_RCVBUF 8 17 + #define SO_SNDBUFFORCE 32 18 + #define SO_RCVBUFFORCE 33 17 19 #define SO_KEEPALIVE 9 18 20 #define SO_OOBINLINE 10 19 21 #define SO_NO_CHECK 11
+2
include/asm-xtensa/socket.h
··· 24 24 #define SO_BROADCAST 6 25 25 #define SO_SNDBUF 7 26 26 #define SO_RCVBUF 8 27 + #define SO_SNDBUFFORCE 32 28 + #define SO_RCVBUFFORCE 33 27 29 #define SO_KEEPALIVE 9 28 30 #define SO_OOBINLINE 10 29 31 #define SO_NO_CHECK 11
+16 -2
net/core/sock.c
··· 260 260 261 261 if (val > sysctl_wmem_max) 262 262 val = sysctl_wmem_max; 263 - 263 + set_sndbuf: 264 264 sk->sk_userlocks |= SOCK_SNDBUF_LOCK; 265 265 if ((val * 2) < SOCK_MIN_SNDBUF) 266 266 sk->sk_sndbuf = SOCK_MIN_SNDBUF; ··· 274 274 sk->sk_write_space(sk); 275 275 break; 276 276 277 + case SO_SNDBUFFORCE: 278 + if (!capable(CAP_NET_ADMIN)) { 279 + ret = -EPERM; 280 + break; 281 + } 282 + goto set_sndbuf; 283 + 277 284 case SO_RCVBUF: 278 285 /* Don't error on this BSD doesn't and if you think 279 286 about it this is right. Otherwise apps have to ··· 289 282 290 283 if (val > sysctl_rmem_max) 291 284 val = sysctl_rmem_max; 292 - 285 + set_rcvbuf: 293 286 sk->sk_userlocks |= SOCK_RCVBUF_LOCK; 294 287 /* FIXME: is this lower bound the right one? */ 295 288 if ((val * 2) < SOCK_MIN_RCVBUF) ··· 297 290 else 298 291 sk->sk_rcvbuf = val * 2; 299 292 break; 293 + 294 + case SO_RCVBUFFORCE: 295 + if (!capable(CAP_NET_ADMIN)) { 296 + ret = -EPERM; 297 + break; 298 + } 299 + goto set_rcvbuf; 300 300 301 301 case SO_KEEPALIVE: 302 302 #ifdef CONFIG_INET