Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1bdb6b5f authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "defconfig: Enable sockev netlink messages"

parents 16f9f1f5 494348f3
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -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
+1 −0
Original line number Original line Diff line number Diff line
@@ -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
+11 −0
Original line number Original line Diff line number Diff line
@@ -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 */
+34 −1
Original line number Original line Diff line number Diff line
@@ -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);
@@ -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.
@@ -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;
@@ -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;
}
}
@@ -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;
}
}
@@ -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:
@@ -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:
@@ -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);
@@ -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);