Netlink sockets are a Linux-specific mechanism for kernel-userspace communication. They are similar to BSD route sockets, although more generalized.
As Netlink communications are connectionless and asynchronously processed, security state associated with an application layer origin needs to be stored with Netlink packets, then checked during delivery to the destination kernel module. The netlink_send() hook is used to store the application layer security state. The netlink_recv() hook is used to retrieve the stored security state as the packet is received by the destination kernel module and mediate final delivery.