]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - include/linux/lsm_hooks.h
binder: use cred instead of task for selinux checks
[mirror_ubuntu-jammy-kernel.git] / include / linux / lsm_hooks.h
index 5c4c5c0602cb74ddf46f774d49fc389c44086840..48b45bcb7762142d27502d15338d8cc2f792d1f9 100644 (file)
  *
  * @binder_set_context_mgr:
  *     Check whether @mgr is allowed to be the binder context manager.
- *     @mgr contains the task_struct for the task being registered.
+ *     @mgr contains the struct cred for the current binder process.
  *     Return 0 if permission is granted.
  * @binder_transaction:
  *     Check whether @from is allowed to invoke a binder transaction call
  *     to @to.
- *     @from contains the task_struct for the sending task.
- *     @to contains the task_struct for the receiving task.
+ *     @from contains the struct cred for the sending process.
+ *     @to contains the struct cred for the receiving process.
  * @binder_transfer_binder:
  *     Check whether @from is allowed to transfer a binder reference to @to.
- *     @from contains the task_struct for the sending task.
- *     @to contains the task_struct for the receiving task.
+ *     @from contains the struct cred for the sending process.
+ *     @to contains the struct cred for the receiving process.
  * @binder_transfer_file:
  *     Check whether @from is allowed to transfer @file to @to.
- *     @from contains the task_struct for the sending task.
+ *     @from contains the struct cred for the sending process.
  *     @file contains the struct file being transferred.
- *     @to contains the task_struct for the receiving task.
+ *     @to contains the struct cred for the receiving process.
  *
  * @ptrace_access_check:
  *     Check permission before allowing the current process to trace the
  *     @pages contains the number of pages.
  *     Return 0 if permission is granted.
  *
+ * @getprocattr:
+ *     Provide the named process attribute for display in special files in
+ *     the /proc/.../attr directory.  Attribute naming and the data displayed
+ *     is at the discretion of the security modules.  The exception is the
+ *     "context" attribute, which will contain the security context of the
+ *     task as a nul terminated text string without trailing whitespace.
  * @ismaclabel:
  *     Check if the extended attribute specified by @name
  *     represents a MAC label. Returns 1 if name is a MAC
  *
  *     @what: kernel feature being accessed
  *
+ * @lock_kernel_down
+ *     Put the kernel into lock-down mode.
+ *
+ *     @where: Where the lock-down is originating from (e.g. command line option)
+ *     @level: The lock-down level (can only increase)
+ *
  * Security hooks for perf events
  *
  * @perf_event_open:
@@ -1570,6 +1582,14 @@ struct security_hook_heads {
        #undef LSM_HOOK
 } __randomize_layout;
 
+/*
+ * Information that identifies a security module.
+ */
+struct lsm_id {
+       const char      *lsm;   /* Name of the LSM */
+       int             slot;   /* Slot in lsmblob if one is allocated */
+};
+
 /*
  * Security module hook list structure.
  * For use with generic list macros for common operations.
@@ -1578,7 +1598,7 @@ struct security_hook_list {
        struct hlist_node               list;
        struct hlist_head               *head;
        union security_list_options     hook;
-       char                            *lsm;
+       struct lsm_id                   *lsmid;
 } __randomize_layout;
 
 /*
@@ -1589,6 +1609,7 @@ struct lsm_blob_sizes {
        int     lbs_file;
        int     lbs_inode;
        int     lbs_superblock;
+       int     lbs_sock;
        int     lbs_ipc;
        int     lbs_msg_msg;
        int     lbs_task;
@@ -1613,7 +1634,7 @@ extern struct security_hook_heads security_hook_heads;
 extern char *lsm_names;
 
 extern void security_add_hooks(struct security_hook_list *hooks, int count,
-                               char *lsm);
+                              struct lsm_id *lsmid);
 
 #define LSM_FLAG_LEGACY_MAJOR  BIT(0)
 #define LSM_FLAG_EXCLUSIVE     BIT(1)
@@ -1677,4 +1698,32 @@ static inline void security_delete_hooks(struct security_hook_list *hooks,
 
 extern int lsm_inode_alloc(struct inode *inode);
 
+/**
+ * lsm_task_display - the "display" LSM for this task
+ * @task: The task to report on
+ *
+ * Returns the task's display LSM slot.
+ */
+static inline int lsm_task_display(struct task_struct *task)
+{
+#ifdef CONFIG_SECURITY
+       int *display = task->security;
+
+       if (display)
+               return *display;
+#endif
+       return LSMBLOB_INVALID;
+}
+
+/* Same as lsm_task_display(), using struct cred as input */
+static inline int lsm_cred_display(struct cred *cred)
+{
+#ifdef CONFIG_SECURITY
+       int *display = cred->security;
+
+       if (display)
+               return *display;
+#endif
+       return LSMBLOB_INVALID;
+}
 #endif /* ! __LINUX_LSM_HOOKS_H */