Merge tag 'mips_4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux
[linux-2.6-block.git] / security / selinux / hooks.c
index 99c4675952f7637133e96d74cd8f67cf36a6e7d2..9a46dc24ac1040279bedcdab897a7ab40b0eaa1d 100644 (file)
@@ -1470,7 +1470,9 @@ static inline u16 socket_type_to_security_class(int family, int type, int protoc
                        return SECCLASS_QIPCRTR_SOCKET;
                case PF_SMC:
                        return SECCLASS_SMC_SOCKET;
-#if PF_MAX > 44
+               case PF_XDP:
+                       return SECCLASS_XDP_SOCKET;
+#if PF_MAX > 45
 #error New address family defined, please update this function.
 #endif
                }
@@ -3305,7 +3307,8 @@ static int selinux_inode_setxattr(struct dentry *dentry, const char *name,
                        } else {
                                audit_size = 0;
                        }
-                       ab = audit_log_start(current->audit_context, GFP_ATOMIC, AUDIT_SELINUX_ERR);
+                       ab = audit_log_start(audit_context(),
+                                            GFP_ATOMIC, AUDIT_SELINUX_ERR);
                        audit_log_format(ab, "op=setxattr invalid_context=");
                        audit_log_n_untrustedstring(ab, value, audit_size);
                        audit_log_end(ab);
@@ -4580,6 +4583,18 @@ static int selinux_socket_post_create(struct socket *sock, int family,
        return err;
 }
 
+static int selinux_socket_socketpair(struct socket *socka,
+                                    struct socket *sockb)
+{
+       struct sk_security_struct *sksec_a = socka->sk->sk_security;
+       struct sk_security_struct *sksec_b = sockb->sk->sk_security;
+
+       sksec_a->peer_sid = sksec_b->sid;
+       sksec_b->peer_sid = sksec_a->sid;
+
+       return 0;
+}
+
 /* Range of port numbers used to automatically bind.
    Need to determine whether we should perform a name_bind
    permission check between the socket and the port number. */
@@ -6448,7 +6463,9 @@ static int selinux_setprocattr(const char *name, void *value, size_t size)
                                        audit_size = size - 1;
                                else
                                        audit_size = size;
-                               ab = audit_log_start(current->audit_context, GFP_ATOMIC, AUDIT_SELINUX_ERR);
+                               ab = audit_log_start(audit_context(),
+                                                    GFP_ATOMIC,
+                                                    AUDIT_SELINUX_ERR);
                                audit_log_format(ab, "op=fscreate invalid_context=");
                                audit_log_n_untrustedstring(ab, value, audit_size);
                                audit_log_end(ab);
@@ -7016,6 +7033,7 @@ static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
 
        LSM_HOOK_INIT(socket_create, selinux_socket_create),
        LSM_HOOK_INIT(socket_post_create, selinux_socket_post_create),
+       LSM_HOOK_INIT(socket_socketpair, selinux_socket_socketpair),
        LSM_HOOK_INIT(socket_bind, selinux_socket_bind),
        LSM_HOOK_INIT(socket_connect, selinux_socket_connect),
        LSM_HOOK_INIT(socket_listen, selinux_socket_listen),