Loading arch/arm64/configs/sdm845-perf_defconfig +1 −0 Original line number Original line Diff line number Diff line Loading @@ -224,6 +224,7 @@ CONFIG_NET_ACT_SKBEDIT=y CONFIG_RMNET_DATA=y CONFIG_RMNET_DATA=y CONFIG_RMNET_DATA_FC=y CONFIG_RMNET_DATA_FC=y CONFIG_RMNET_DATA_DEBUG_PKT=y CONFIG_RMNET_DATA_DEBUG_PKT=y CONFIG_SOCKEV_NLMCAST=y CONFIG_BT=y CONFIG_BT=y CONFIG_MSM_BT_POWER=y CONFIG_MSM_BT_POWER=y CONFIG_CFG80211=y CONFIG_CFG80211=y Loading arch/arm64/configs/sdm845_defconfig +1 −0 Original line number Original line Diff line number Diff line Loading @@ -229,6 +229,7 @@ CONFIG_DNS_RESOLVER=y CONFIG_RMNET_DATA=y CONFIG_RMNET_DATA=y CONFIG_RMNET_DATA_FC=y CONFIG_RMNET_DATA_FC=y CONFIG_RMNET_DATA_DEBUG_PKT=y CONFIG_RMNET_DATA_DEBUG_PKT=y CONFIG_SOCKEV_NLMCAST=y CONFIG_BT=y CONFIG_BT=y CONFIG_MSM_BT_POWER=y CONFIG_MSM_BT_POWER=y CONFIG_CFG80211=y CONFIG_CFG80211=y Loading include/net/sock.h +11 −0 Original line number Original line Diff line number Diff line Loading @@ -2286,4 +2286,15 @@ extern int sysctl_optmem_max; extern __u32 sysctl_wmem_default; extern __u32 sysctl_wmem_default; extern __u32 sysctl_rmem_default; extern __u32 sysctl_rmem_default; /* SOCKEV Notifier Events */ #define SOCKEV_SOCKET 0x00 #define SOCKEV_BIND 0x01 #define SOCKEV_LISTEN 0x02 #define SOCKEV_ACCEPT 0x03 #define SOCKEV_CONNECT 0x04 #define SOCKEV_SHUTDOWN 0x05 int sockev_register_notify(struct notifier_block *nb); int sockev_unregister_notify(struct notifier_block *nb); #endif /* _SOCK_H */ #endif /* _SOCK_H */ net/socket.c +34 −1 Original line number Original line Diff line number Diff line Loading @@ -117,6 +117,8 @@ unsigned int sysctl_net_busy_poll __read_mostly; static ssize_t sock_read_iter(struct kiocb *iocb, struct iov_iter *to); static ssize_t sock_read_iter(struct kiocb *iocb, struct iov_iter *to); static ssize_t sock_write_iter(struct kiocb *iocb, struct iov_iter *from); static ssize_t sock_write_iter(struct kiocb *iocb, struct iov_iter *from); static BLOCKING_NOTIFIER_HEAD(sockev_notifier_list); static int sock_mmap(struct file *file, struct vm_area_struct *vma); static int sock_mmap(struct file *file, struct vm_area_struct *vma); static int sock_close(struct inode *inode, struct file *file); static int sock_close(struct inode *inode, struct file *file); Loading Loading @@ -171,6 +173,14 @@ static const struct net_proto_family __rcu *net_families[NPROTO] __read_mostly; static DEFINE_PER_CPU(int, sockets_in_use); static DEFINE_PER_CPU(int, sockets_in_use); /* /* * Socket Event framework helpers */ static void sockev_notify(unsigned long event, struct socket *sk) { blocking_notifier_call_chain(&sockev_notifier_list, event, sk); } /** * Support routines. * Support routines. * Move socket addresses back and forth across the kernel/user * Move socket addresses back and forth across the kernel/user * divide and look after the messy bits. * divide and look after the messy bits. Loading Loading @@ -1255,6 +1265,9 @@ SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) if (retval < 0) if (retval < 0) goto out; goto out; if (retval == 0) sockev_notify(SOCKEV_SOCKET, sock); retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK)); retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK)); if (retval < 0) if (retval < 0) goto out_release; goto out_release; Loading Loading @@ -1400,6 +1413,8 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) &address, addrlen); &address, addrlen); } } fput_light(sock->file, fput_needed); fput_light(sock->file, fput_needed); if (!err) sockev_notify(SOCKEV_BIND, sock); } } return err; return err; } } Loading Loading @@ -1427,6 +1442,8 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog) err = sock->ops->listen(sock, backlog); err = sock->ops->listen(sock, backlog); fput_light(sock->file, fput_needed); fput_light(sock->file, fput_needed); if (!err) sockev_notify(SOCKEV_LISTEN, sock); } } return err; return err; } } Loading Loading @@ -1513,7 +1530,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, fd_install(newfd, newfile); fd_install(newfd, newfile); err = newfd; err = newfd; if (!err) sockev_notify(SOCKEV_ACCEPT, sock); out_put: out_put: fput_light(sock->file, fput_needed); fput_light(sock->file, fput_needed); out: out: Loading Loading @@ -1563,6 +1581,8 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, err = sock->ops->connect(sock, (struct sockaddr *)&address, addrlen, err = sock->ops->connect(sock, (struct sockaddr *)&address, addrlen, sock->file->f_flags); sock->file->f_flags); if (!err) sockev_notify(SOCKEV_CONNECT, sock); out_put: out_put: fput_light(sock->file, fput_needed); fput_light(sock->file, fput_needed); out: out: Loading Loading @@ -1823,6 +1843,7 @@ SYSCALL_DEFINE2(shutdown, int, fd, int, how) sock = sockfd_lookup_light(fd, &err, &fput_needed); sock = sockfd_lookup_light(fd, &err, &fput_needed); if (sock != NULL) { if (sock != NULL) { sockev_notify(SOCKEV_SHUTDOWN, sock); err = security_socket_shutdown(sock, how); err = security_socket_shutdown(sock, how); if (!err) if (!err) err = sock->ops->shutdown(sock, how); err = sock->ops->shutdown(sock, how); Loading Loading @@ -3340,3 +3361,15 @@ int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how) return sock->ops->shutdown(sock, how); return sock->ops->shutdown(sock, how); } } EXPORT_SYMBOL(kernel_sock_shutdown); EXPORT_SYMBOL(kernel_sock_shutdown); int sockev_register_notify(struct notifier_block *nb) { return blocking_notifier_chain_register(&sockev_notifier_list, nb); } EXPORT_SYMBOL(sockev_register_notify); int sockev_unregister_notify(struct notifier_block *nb) { return blocking_notifier_chain_unregister(&sockev_notifier_list, nb); } EXPORT_SYMBOL(sockev_unregister_notify); Loading
arch/arm64/configs/sdm845-perf_defconfig +1 −0 Original line number Original line Diff line number Diff line Loading @@ -224,6 +224,7 @@ CONFIG_NET_ACT_SKBEDIT=y CONFIG_RMNET_DATA=y CONFIG_RMNET_DATA=y CONFIG_RMNET_DATA_FC=y CONFIG_RMNET_DATA_FC=y CONFIG_RMNET_DATA_DEBUG_PKT=y CONFIG_RMNET_DATA_DEBUG_PKT=y CONFIG_SOCKEV_NLMCAST=y CONFIG_BT=y CONFIG_BT=y CONFIG_MSM_BT_POWER=y CONFIG_MSM_BT_POWER=y CONFIG_CFG80211=y CONFIG_CFG80211=y Loading
arch/arm64/configs/sdm845_defconfig +1 −0 Original line number Original line Diff line number Diff line Loading @@ -229,6 +229,7 @@ CONFIG_DNS_RESOLVER=y CONFIG_RMNET_DATA=y CONFIG_RMNET_DATA=y CONFIG_RMNET_DATA_FC=y CONFIG_RMNET_DATA_FC=y CONFIG_RMNET_DATA_DEBUG_PKT=y CONFIG_RMNET_DATA_DEBUG_PKT=y CONFIG_SOCKEV_NLMCAST=y CONFIG_BT=y CONFIG_BT=y CONFIG_MSM_BT_POWER=y CONFIG_MSM_BT_POWER=y CONFIG_CFG80211=y CONFIG_CFG80211=y Loading
include/net/sock.h +11 −0 Original line number Original line Diff line number Diff line Loading @@ -2286,4 +2286,15 @@ extern int sysctl_optmem_max; extern __u32 sysctl_wmem_default; extern __u32 sysctl_wmem_default; extern __u32 sysctl_rmem_default; extern __u32 sysctl_rmem_default; /* SOCKEV Notifier Events */ #define SOCKEV_SOCKET 0x00 #define SOCKEV_BIND 0x01 #define SOCKEV_LISTEN 0x02 #define SOCKEV_ACCEPT 0x03 #define SOCKEV_CONNECT 0x04 #define SOCKEV_SHUTDOWN 0x05 int sockev_register_notify(struct notifier_block *nb); int sockev_unregister_notify(struct notifier_block *nb); #endif /* _SOCK_H */ #endif /* _SOCK_H */
net/socket.c +34 −1 Original line number Original line Diff line number Diff line Loading @@ -117,6 +117,8 @@ unsigned int sysctl_net_busy_poll __read_mostly; static ssize_t sock_read_iter(struct kiocb *iocb, struct iov_iter *to); static ssize_t sock_read_iter(struct kiocb *iocb, struct iov_iter *to); static ssize_t sock_write_iter(struct kiocb *iocb, struct iov_iter *from); static ssize_t sock_write_iter(struct kiocb *iocb, struct iov_iter *from); static BLOCKING_NOTIFIER_HEAD(sockev_notifier_list); static int sock_mmap(struct file *file, struct vm_area_struct *vma); static int sock_mmap(struct file *file, struct vm_area_struct *vma); static int sock_close(struct inode *inode, struct file *file); static int sock_close(struct inode *inode, struct file *file); Loading Loading @@ -171,6 +173,14 @@ static const struct net_proto_family __rcu *net_families[NPROTO] __read_mostly; static DEFINE_PER_CPU(int, sockets_in_use); static DEFINE_PER_CPU(int, sockets_in_use); /* /* * Socket Event framework helpers */ static void sockev_notify(unsigned long event, struct socket *sk) { blocking_notifier_call_chain(&sockev_notifier_list, event, sk); } /** * Support routines. * Support routines. * Move socket addresses back and forth across the kernel/user * Move socket addresses back and forth across the kernel/user * divide and look after the messy bits. * divide and look after the messy bits. Loading Loading @@ -1255,6 +1265,9 @@ SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) if (retval < 0) if (retval < 0) goto out; goto out; if (retval == 0) sockev_notify(SOCKEV_SOCKET, sock); retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK)); retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK)); if (retval < 0) if (retval < 0) goto out_release; goto out_release; Loading Loading @@ -1400,6 +1413,8 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) &address, addrlen); &address, addrlen); } } fput_light(sock->file, fput_needed); fput_light(sock->file, fput_needed); if (!err) sockev_notify(SOCKEV_BIND, sock); } } return err; return err; } } Loading Loading @@ -1427,6 +1442,8 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog) err = sock->ops->listen(sock, backlog); err = sock->ops->listen(sock, backlog); fput_light(sock->file, fput_needed); fput_light(sock->file, fput_needed); if (!err) sockev_notify(SOCKEV_LISTEN, sock); } } return err; return err; } } Loading Loading @@ -1513,7 +1530,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, fd_install(newfd, newfile); fd_install(newfd, newfile); err = newfd; err = newfd; if (!err) sockev_notify(SOCKEV_ACCEPT, sock); out_put: out_put: fput_light(sock->file, fput_needed); fput_light(sock->file, fput_needed); out: out: Loading Loading @@ -1563,6 +1581,8 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, err = sock->ops->connect(sock, (struct sockaddr *)&address, addrlen, err = sock->ops->connect(sock, (struct sockaddr *)&address, addrlen, sock->file->f_flags); sock->file->f_flags); if (!err) sockev_notify(SOCKEV_CONNECT, sock); out_put: out_put: fput_light(sock->file, fput_needed); fput_light(sock->file, fput_needed); out: out: Loading Loading @@ -1823,6 +1843,7 @@ SYSCALL_DEFINE2(shutdown, int, fd, int, how) sock = sockfd_lookup_light(fd, &err, &fput_needed); sock = sockfd_lookup_light(fd, &err, &fput_needed); if (sock != NULL) { if (sock != NULL) { sockev_notify(SOCKEV_SHUTDOWN, sock); err = security_socket_shutdown(sock, how); err = security_socket_shutdown(sock, how); if (!err) if (!err) err = sock->ops->shutdown(sock, how); err = sock->ops->shutdown(sock, how); Loading Loading @@ -3340,3 +3361,15 @@ int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how) return sock->ops->shutdown(sock, how); return sock->ops->shutdown(sock, how); } } EXPORT_SYMBOL(kernel_sock_shutdown); EXPORT_SYMBOL(kernel_sock_shutdown); int sockev_register_notify(struct notifier_block *nb) { return blocking_notifier_chain_register(&sockev_notifier_list, nb); } EXPORT_SYMBOL(sockev_register_notify); int sockev_unregister_notify(struct notifier_block *nb) { return blocking_notifier_chain_unregister(&sockev_notifier_list, nb); } EXPORT_SYMBOL(sockev_unregister_notify);