From 3b6115d6b57a263bdc8c9b1df273bd4a7955eead Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 8 Jul 2017 08:16:31 +0200 Subject: debloat: add some debloat patches, strip down procfs and make O_DIRECT support optional, saves ~15K after lzma on MIPS Signed-off-by: Felix Fietkau --- net/Kconfig | 3 +++ net/core/Makefile | 3 ++- net/core/sock.c | 2 ++ net/ipv4/Kconfig | 1 + net/netlink/Kconfig | 1 + net/packet/Kconfig | 1 + net/unix/Kconfig | 1 + 7 files changed, 11 insertions(+), 1 deletion(-) --- a/net/Kconfig +++ b/net/Kconfig @@ -129,6 +129,9 @@ source "net/mptcp/Kconfig" endif # if INET +config SOCK_DIAG + bool + config NETWORK_SECMARK bool "Security Marking" help --- a/net/core/Makefile +++ b/net/core/Makefile @@ -11,12 +11,13 @@ obj-$(CONFIG_SYSCTL) += sysctl_net_core. obj-y += dev.o dev_addr_lists.o dst.o netevent.o \ neighbour.o rtnetlink.o utils.o link_watch.o filter.o \ - sock_diag.o dev_ioctl.o tso.o sock_reuseport.o \ + dev_ioctl.o tso.o sock_reuseport.o \ fib_notifier.o xdp.o flow_offload.o gro.o \ netdev-genl.o netdev-genl-gen.o gso.o obj-$(CONFIG_NETDEV_ADDR_LIST_TEST) += dev_addr_lists_test.o +obj-$(CONFIG_SOCK_DIAG) += sock_diag.o obj-y += net-sysfs.o obj-$(CONFIG_PAGE_POOL) += page_pool.o obj-$(CONFIG_PROC_FS) += net-procfs.o --- a/net/core/sock.c +++ b/net/core/sock.c @@ -118,6 +118,7 @@ #include #include #include +#include #include @@ -150,6 +151,7 @@ static DEFINE_MUTEX(proto_list_mutex); static LIST_HEAD(proto_list); +DEFINE_COOKIE(sock_cookie); static void sock_def_write_space_wfree(struct sock *sk); static void sock_def_write_space(struct sock *sk); @@ -590,6 +592,21 @@ discard_and_relse: } EXPORT_SYMBOL(__sk_receive_skb); +u64 __sock_gen_cookie(struct sock *sk) +{ + u64 res = atomic64_read(&sk->sk_cookie); + + if (!res) { + u64 new = gen_cookie_next(&sock_cookie); + + atomic64_cmpxchg(&sk->sk_cookie, res, new); + + /* Another thread might have changed sk_cookie before us. */ + res = atomic64_read(&sk->sk_cookie); + } + return res; +} + INDIRECT_CALLABLE_DECLARE(struct dst_entry *ip6_dst_check(struct dst_entry *, u32)); INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *, @@ -2239,9 +2256,11 @@ static void __sk_free(struct sock *sk) if (likely(sk->sk_net_refcnt)) sock_inuse_add(sock_net(sk), -1); +#ifdef CONFIG_SOCK_DIAG if (unlikely(sk->sk_net_refcnt && sock_diag_has_destroy_listeners(sk))) sock_diag_broadcast_destroy(sk); else +#endif sk_destruct(sk); } --- a/net/core/sock_diag.c +++ b/net/core/sock_diag.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include @@ -22,23 +21,6 @@ static const struct sock_diag_inet_compa static struct workqueue_struct *broadcast_wq; -DEFINE_COOKIE(sock_cookie); - -u64 __sock_gen_cookie(struct sock *sk) -{ - u64 res = atomic64_read(&sk->sk_cookie); - - if (!res) { - u64 new = gen_cookie_next(&sock_cookie); - - atomic64_cmpxchg(&sk->sk_cookie, res, new); - - /* Another thread might have changed sk_cookie before us. */ - res = atomic64_read(&sk->sk_cookie); - } - return res; -} - int sock_diag_check_cookie(struct sock *sk, const __u32 *cookie) { u64 res; --- a/net/ipv4/Kconfig +++ b/net/ipv4/Kconfig @@ -423,6 +423,7 @@ config INET_TUNNEL config INET_DIAG tristate "INET: socket monitoring interface" + select SOCK_DIAG default y help Support for INET (TCP, DCCP, etc) socket monitoring interface used by --- a/net/netlink/Kconfig +++ b/net/netlink/Kconfig @@ -5,6 +5,7 @@ config NETLINK_DIAG tristate "NETLINK: socket monitoring interface" + select SOCK_DIAG default n help Support for NETLINK socket monitoring interface used by the ss tool. --- a/net/packet/Kconfig +++ b/net/packet/Kconfig @@ -19,6 +19,7 @@ config PACKET config PACKET_DIAG tristate "Packet: sockets monitoring interface" depends on PACKET + select SOCK_DIAG default n help Support for PF_PACKET sockets monitoring interface used by the ss tool. --- a/net/unix/Kconfig +++ b/net/unix/Kconfig @@ -29,6 +29,7 @@ config AF_UNIX_OOB config UNIX_DIAG tristate "UNIX: socket monitoring interface" depends on UNIX + select SOCK_DIAG default n help Support for UNIX socket monitoring interface used by the ss tool. --- a/net/xdp/Kconfig +++ b/net/xdp/Kconfig @@ -10,6 +10,7 @@ config XDP_SOCKETS config XDP_SOCKETS_DIAG tristate "XDP sockets: monitoring interface" depends on XDP_SOCKETS + select SOCK_DIAG default n help Support for PF_XDP sockets monitoring interface used by the ss tool.