You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6: (61 commits) KEYS: Return more accurate error codes LSM: Add __init to fixup function. TOMOYO: Add pathname grouping support. ima: remove ACPI dependency TPM: ACPI/PNP dependency removal security/selinux/ss: Use kstrdup TOMOYO: Use stack memory for pending entry. Revert "ima: remove ACPI dependency" Revert "TPM: ACPI/PNP dependency removal" KEYS: Do preallocation for __key_link() TOMOYO: Use mutex_lock_interruptible. KEYS: Better handling of errors from construct_alloc_key() KEYS: keyring_serialise_link_sem is only needed for keyring->keyring links TOMOYO: Use GFP_NOFS rather than GFP_KERNEL. ima: remove ACPI dependency TPM: ACPI/PNP dependency removal selinux: generalize disabling of execmem for plt-in-heap archs LSM Audit: rename LSM_AUDIT_NO_AUDIT to LSM_AUDIT_DATA_NONE CRED: Holding a spinlock does not imply the holding of RCU read lock SMACK: Don't #include Ext2 headers ...
This commit is contained in:
@@ -408,9 +408,6 @@ This should be used inside the RCU read lock, as in the following example:
|
||||
...
|
||||
}
|
||||
|
||||
A function need not get RCU read lock to use __task_cred() if it is holding a
|
||||
spinlock at the time as this implicitly holds the RCU read lock.
|
||||
|
||||
Should it be necessary to hold another task's credentials for a long period of
|
||||
time, and possibly to sleep whilst doing so, then the caller should get a
|
||||
reference on them using:
|
||||
@@ -426,17 +423,16 @@ credentials, hiding the RCU magic from the caller:
|
||||
uid_t task_uid(task) Task's real UID
|
||||
uid_t task_euid(task) Task's effective UID
|
||||
|
||||
If the caller is holding a spinlock or the RCU read lock at the time anyway,
|
||||
then:
|
||||
If the caller is holding the RCU read lock at the time anyway, then:
|
||||
|
||||
__task_cred(task)->uid
|
||||
__task_cred(task)->euid
|
||||
|
||||
should be used instead. Similarly, if multiple aspects of a task's credentials
|
||||
need to be accessed, RCU read lock or a spinlock should be used, __task_cred()
|
||||
called, the result stored in a temporary pointer and then the credential
|
||||
aspects called from that before dropping the lock. This prevents the
|
||||
potentially expensive RCU magic from being invoked multiple times.
|
||||
need to be accessed, RCU read lock should be used, __task_cred() called, the
|
||||
result stored in a temporary pointer and then the credential aspects called
|
||||
from that before dropping the lock. This prevents the potentially expensive
|
||||
RCU magic from being invoked multiple times.
|
||||
|
||||
Should some other single aspect of another task's credentials need to be
|
||||
accessed, then this can be used:
|
||||
|
||||
@@ -99,6 +99,7 @@ parameter is applicable:
|
||||
SWSUSP Software suspend (hibernation) is enabled.
|
||||
SUSPEND System suspend states are enabled.
|
||||
FTRACE Function tracing enabled.
|
||||
TPM TPM drivers are enabled.
|
||||
TS Appropriate touchscreen support is enabled.
|
||||
UMS USB Mass Storage support is enabled.
|
||||
USB USB support is enabled.
|
||||
@@ -2616,6 +2617,15 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
tp720= [HW,PS2]
|
||||
|
||||
tpm_suspend_pcr=[HW,TPM]
|
||||
Format: integer pcr id
|
||||
Specify that at suspend time, the tpm driver
|
||||
should extend the specified pcr with zeros,
|
||||
as a workaround for some chips which fail to
|
||||
flush the last written pcr on TPM_SaveState.
|
||||
This will guarantee that all the other pcrs
|
||||
are saved.
|
||||
|
||||
trace_buf_size=nn[KMG]
|
||||
[FTRACE] will set tracing buffer size.
|
||||
|
||||
|
||||
@@ -17,14 +17,16 @@ menuconfig TCG_TPM
|
||||
obtained at: <http://sourceforge.net/projects/trousers>. To
|
||||
compile this driver as a module, choose M here; the module
|
||||
will be called tpm. If unsure, say N.
|
||||
Note: For more TPM drivers enable CONFIG_PNP, CONFIG_ACPI
|
||||
Notes:
|
||||
1) For more TPM drivers enable CONFIG_PNP, CONFIG_ACPI
|
||||
and CONFIG_PNPACPI.
|
||||
2) Without ACPI enabled, the BIOS event log won't be accessible,
|
||||
which is required to validate the PCR 0-7 values.
|
||||
|
||||
if TCG_TPM
|
||||
|
||||
config TCG_TIS
|
||||
tristate "TPM Interface Specification 1.2 Interface"
|
||||
depends on PNP
|
||||
---help---
|
||||
If you have a TPM security chip that is compliant with the
|
||||
TCG TIS 1.2 TPM specification say Yes and it will be accessible
|
||||
|
||||
+40
-7
@@ -1068,6 +1068,27 @@ void tpm_remove_hardware(struct device *dev)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tpm_remove_hardware);
|
||||
|
||||
#define TPM_ORD_SAVESTATE cpu_to_be32(152)
|
||||
#define SAVESTATE_RESULT_SIZE 10
|
||||
|
||||
static struct tpm_input_header savestate_header = {
|
||||
.tag = TPM_TAG_RQU_COMMAND,
|
||||
.length = cpu_to_be32(10),
|
||||
.ordinal = TPM_ORD_SAVESTATE
|
||||
};
|
||||
|
||||
/* Bug workaround - some TPM's don't flush the most
|
||||
* recently changed pcr on suspend, so force the flush
|
||||
* with an extend to the selected _unused_ non-volatile pcr.
|
||||
*/
|
||||
static int tpm_suspend_pcr;
|
||||
static int __init tpm_suspend_setup(char *str)
|
||||
{
|
||||
get_option(&str, &tpm_suspend_pcr);
|
||||
return 1;
|
||||
}
|
||||
__setup("tpm_suspend_pcr=", tpm_suspend_setup);
|
||||
|
||||
/*
|
||||
* We are about to suspend. Save the TPM state
|
||||
* so that it can be restored.
|
||||
@@ -1075,17 +1096,29 @@ EXPORT_SYMBOL_GPL(tpm_remove_hardware);
|
||||
int tpm_pm_suspend(struct device *dev, pm_message_t pm_state)
|
||||
{
|
||||
struct tpm_chip *chip = dev_get_drvdata(dev);
|
||||
u8 savestate[] = {
|
||||
0, 193, /* TPM_TAG_RQU_COMMAND */
|
||||
0, 0, 0, 10, /* blob length (in bytes) */
|
||||
0, 0, 0, 152 /* TPM_ORD_SaveState */
|
||||
};
|
||||
struct tpm_cmd_t cmd;
|
||||
int rc;
|
||||
|
||||
u8 dummy_hash[TPM_DIGEST_SIZE] = { 0 };
|
||||
|
||||
if (chip == NULL)
|
||||
return -ENODEV;
|
||||
|
||||
tpm_transmit(chip, savestate, sizeof(savestate));
|
||||
return 0;
|
||||
/* for buggy tpm, flush pcrs with extend to selected dummy */
|
||||
if (tpm_suspend_pcr) {
|
||||
cmd.header.in = pcrextend_header;
|
||||
cmd.params.pcrextend_in.pcr_idx = cpu_to_be32(tpm_suspend_pcr);
|
||||
memcpy(cmd.params.pcrextend_in.hash, dummy_hash,
|
||||
TPM_DIGEST_SIZE);
|
||||
rc = transmit_cmd(chip, &cmd, EXTEND_PCR_RESULT_SIZE,
|
||||
"extending dummy pcr before suspend");
|
||||
}
|
||||
|
||||
/* now do the actual savestate */
|
||||
cmd.header.in = savestate_header;
|
||||
rc = transmit_cmd(chip, &cmd, SAVESTATE_RESULT_SIZE,
|
||||
"sending savestate before suspend");
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tpm_pm_suspend);
|
||||
|
||||
|
||||
+21
-19
@@ -598,7 +598,7 @@ out_err:
|
||||
tpm_remove_hardware(chip->dev);
|
||||
return rc;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PNP
|
||||
static int __devinit tpm_tis_pnp_init(struct pnp_dev *pnp_dev,
|
||||
const struct pnp_device_id *pnp_id)
|
||||
{
|
||||
@@ -663,7 +663,7 @@ static struct pnp_driver tis_pnp_driver = {
|
||||
module_param_string(hid, tpm_pnp_tbl[TIS_HID_USR_IDX].id,
|
||||
sizeof(tpm_pnp_tbl[TIS_HID_USR_IDX].id), 0444);
|
||||
MODULE_PARM_DESC(hid, "Set additional specific HID for this driver to probe");
|
||||
|
||||
#endif
|
||||
static int tpm_tis_suspend(struct platform_device *dev, pm_message_t msg)
|
||||
{
|
||||
return tpm_pm_suspend(&dev->dev, msg);
|
||||
@@ -690,21 +690,21 @@ MODULE_PARM_DESC(force, "Force device probe rather than using ACPI entry");
|
||||
static int __init init_tis(void)
|
||||
{
|
||||
int rc;
|
||||
#ifdef CONFIG_PNP
|
||||
if (!force)
|
||||
return pnp_register_driver(&tis_pnp_driver);
|
||||
#endif
|
||||
|
||||
if (force) {
|
||||
rc = platform_driver_register(&tis_drv);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
if (IS_ERR(pdev=platform_device_register_simple("tpm_tis", -1, NULL, 0)))
|
||||
return PTR_ERR(pdev);
|
||||
if((rc=tpm_tis_init(&pdev->dev, TIS_MEM_BASE, TIS_MEM_LEN, 0)) != 0) {
|
||||
platform_device_unregister(pdev);
|
||||
platform_driver_unregister(&tis_drv);
|
||||
}
|
||||
rc = platform_driver_register(&tis_drv);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
if (IS_ERR(pdev=platform_device_register_simple("tpm_tis", -1, NULL, 0)))
|
||||
return PTR_ERR(pdev);
|
||||
if((rc=tpm_tis_init(&pdev->dev, TIS_MEM_BASE, TIS_MEM_LEN, 0)) != 0) {
|
||||
platform_device_unregister(pdev);
|
||||
platform_driver_unregister(&tis_drv);
|
||||
}
|
||||
|
||||
return pnp_register_driver(&tis_pnp_driver);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void __exit cleanup_tis(void)
|
||||
@@ -728,12 +728,14 @@ static void __exit cleanup_tis(void)
|
||||
list_del(&i->list);
|
||||
}
|
||||
spin_unlock(&tis_lock);
|
||||
|
||||
if (force) {
|
||||
platform_device_unregister(pdev);
|
||||
platform_driver_unregister(&tis_drv);
|
||||
} else
|
||||
#ifdef CONFIG_PNP
|
||||
if (!force) {
|
||||
pnp_unregister_driver(&tis_pnp_driver);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
platform_device_unregister(pdev);
|
||||
platform_driver_unregister(&tis_drv);
|
||||
}
|
||||
|
||||
module_init(init_tis);
|
||||
|
||||
@@ -1205,8 +1205,6 @@ void generic_delete_inode(struct inode *inode)
|
||||
inodes_stat.nr_inodes--;
|
||||
spin_unlock(&inode_lock);
|
||||
|
||||
security_inode_delete(inode);
|
||||
|
||||
if (op->delete_inode) {
|
||||
void (*delete)(struct inode *) = op->delete_inode;
|
||||
/* Filesystems implementing their own
|
||||
|
||||
@@ -628,7 +628,6 @@ repeat:
|
||||
mnt->mnt_pinned = 0;
|
||||
spin_unlock(&vfsmount_lock);
|
||||
acct_auto_close_mnt(mnt);
|
||||
security_sb_umount_close(mnt);
|
||||
goto repeat;
|
||||
}
|
||||
}
|
||||
@@ -1117,8 +1116,6 @@ static int do_umount(struct vfsmount *mnt, int flags)
|
||||
retval = 0;
|
||||
}
|
||||
spin_unlock(&vfsmount_lock);
|
||||
if (retval)
|
||||
security_sb_umount_busy(mnt);
|
||||
up_write(&namespace_sem);
|
||||
release_mounts(&umount_list);
|
||||
return retval;
|
||||
@@ -1435,17 +1432,10 @@ static int graft_tree(struct vfsmount *mnt, struct path *path)
|
||||
if (cant_mount(path->dentry))
|
||||
goto out_unlock;
|
||||
|
||||
err = security_sb_check_sb(mnt, path);
|
||||
if (err)
|
||||
goto out_unlock;
|
||||
|
||||
err = -ENOENT;
|
||||
if (!d_unlinked(path->dentry))
|
||||
err = attach_recursive_mnt(mnt, path, NULL);
|
||||
out_unlock:
|
||||
mutex_unlock(&path->dentry->d_inode->i_mutex);
|
||||
if (!err)
|
||||
security_sb_post_addmount(mnt, path);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1581,8 +1571,6 @@ static int do_remount(struct path *path, int flags, int mnt_flags,
|
||||
}
|
||||
up_write(&sb->s_umount);
|
||||
if (!err) {
|
||||
security_sb_post_remount(path->mnt, flags, data);
|
||||
|
||||
spin_lock(&vfsmount_lock);
|
||||
touch_mnt_namespace(path->mnt->mnt_ns);
|
||||
spin_unlock(&vfsmount_lock);
|
||||
@@ -2277,7 +2265,6 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
|
||||
touch_mnt_namespace(current->nsproxy->mnt_ns);
|
||||
spin_unlock(&vfsmount_lock);
|
||||
chroot_fs_refs(&root, &new);
|
||||
security_sb_post_pivotroot(&root, &new);
|
||||
error = 0;
|
||||
path_put(&root_parent);
|
||||
path_put(&parent_path);
|
||||
|
||||
@@ -33,7 +33,7 @@ struct common_audit_data {
|
||||
#define LSM_AUDIT_DATA_IPC 4
|
||||
#define LSM_AUDIT_DATA_TASK 5
|
||||
#define LSM_AUDIT_DATA_KEY 6
|
||||
#define LSM_AUDIT_NO_AUDIT 7
|
||||
#define LSM_AUDIT_DATA_NONE 7
|
||||
#define LSM_AUDIT_DATA_KMOD 8
|
||||
struct task_struct *tsk;
|
||||
union {
|
||||
|
||||
@@ -267,49 +267,16 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* @orig the original mount data copied from userspace.
|
||||
* @copy copied data which will be passed to the security module.
|
||||
* Returns 0 if the copy was successful.
|
||||
* @sb_check_sb:
|
||||
* Check permission before the device with superblock @mnt->sb is mounted
|
||||
* on the mount point named by @nd.
|
||||
* @mnt contains the vfsmount for device being mounted.
|
||||
* @path contains the path for the mount point.
|
||||
* Return 0 if permission is granted.
|
||||
* @sb_umount:
|
||||
* Check permission before the @mnt file system is unmounted.
|
||||
* @mnt contains the mounted file system.
|
||||
* @flags contains the unmount flags, e.g. MNT_FORCE.
|
||||
* Return 0 if permission is granted.
|
||||
* @sb_umount_close:
|
||||
* Close any files in the @mnt mounted filesystem that are held open by
|
||||
* the security module. This hook is called during an umount operation
|
||||
* prior to checking whether the filesystem is still busy.
|
||||
* @mnt contains the mounted filesystem.
|
||||
* @sb_umount_busy:
|
||||
* Handle a failed umount of the @mnt mounted filesystem, e.g. re-opening
|
||||
* any files that were closed by umount_close. This hook is called during
|
||||
* an umount operation if the umount fails after a call to the
|
||||
* umount_close hook.
|
||||
* @mnt contains the mounted filesystem.
|
||||
* @sb_post_remount:
|
||||
* Update the security module's state when a filesystem is remounted.
|
||||
* This hook is only called if the remount was successful.
|
||||
* @mnt contains the mounted file system.
|
||||
* @flags contains the new filesystem flags.
|
||||
* @data contains the filesystem-specific data.
|
||||
* @sb_post_addmount:
|
||||
* Update the security module's state when a filesystem is mounted.
|
||||
* This hook is called any time a mount is successfully grafetd to
|
||||
* the tree.
|
||||
* @mnt contains the mounted filesystem.
|
||||
* @mountpoint contains the path for the mount point.
|
||||
* @sb_pivotroot:
|
||||
* Check permission before pivoting the root filesystem.
|
||||
* @old_path contains the path for the new location of the current root (put_old).
|
||||
* @new_path contains the path for the new root (new_root).
|
||||
* Return 0 if permission is granted.
|
||||
* @sb_post_pivotroot:
|
||||
* Update module state after a successful pivot.
|
||||
* @old_path contains the path for the old root.
|
||||
* @new_path contains the path for the new root.
|
||||
* @sb_set_mnt_opts:
|
||||
* Set the security relevant mount options used for a superblock
|
||||
* @sb the superblock to set security mount options for
|
||||
@@ -511,12 +478,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* @mnt is the vfsmount where the dentry was looked up
|
||||
* @dentry contains the dentry structure for the file.
|
||||
* Return 0 if permission is granted.
|
||||
* @inode_delete:
|
||||
* @inode contains the inode structure for deleted inode.
|
||||
* This hook is called when a deleted inode is released (i.e. an inode
|
||||
* with no hard links has its use count drop to zero). A security module
|
||||
* can use this hook to release any persistent label associated with the
|
||||
* inode.
|
||||
* @inode_setxattr:
|
||||
* Check permission before setting the extended attributes
|
||||
* @value identified by @name for @dentry.
|
||||
@@ -691,10 +652,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* @old points to the original credentials.
|
||||
* @gfp indicates the atomicity of any memory allocations.
|
||||
* Prepare a new set of credentials by copying the data from the old set.
|
||||
* @cred_commit:
|
||||
* @new points to the new credentials.
|
||||
* @old points to the original credentials.
|
||||
* Install a new set of credentials.
|
||||
* @cred_transfer:
|
||||
* @new points to the new credentials.
|
||||
* @old points to the original credentials.
|
||||
@@ -717,18 +674,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* userspace to load a kernel module with the given name.
|
||||
* @kmod_name name of the module requested by the kernel
|
||||
* Return 0 if successful.
|
||||
* @task_setuid:
|
||||
* Check permission before setting one or more of the user identity
|
||||
* attributes of the current process. The @flags parameter indicates
|
||||
* which of the set*uid system calls invoked this hook and how to
|
||||
* interpret the @id0, @id1, and @id2 parameters. See the LSM_SETID
|
||||
* definitions at the beginning of this file for the @flags values and
|
||||
* their meanings.
|
||||
* @id0 contains a uid.
|
||||
* @id1 contains a uid.
|
||||
* @id2 contains a uid.
|
||||
* @flags contains one of the LSM_SETID_* values.
|
||||
* Return 0 if permission is granted.
|
||||
* @task_fix_setuid:
|
||||
* Update the module's state after setting one or more of the user
|
||||
* identity attributes of the current process. The @flags parameter
|
||||
@@ -738,18 +683,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* @old is the set of credentials that are being replaces
|
||||
* @flags contains one of the LSM_SETID_* values.
|
||||
* Return 0 on success.
|
||||
* @task_setgid:
|
||||
* Check permission before setting one or more of the group identity
|
||||
* attributes of the current process. The @flags parameter indicates
|
||||
* which of the set*gid system calls invoked this hook and how to
|
||||
* interpret the @id0, @id1, and @id2 parameters. See the LSM_SETID
|
||||
* definitions at the beginning of this file for the @flags values and
|
||||
* their meanings.
|
||||
* @id0 contains a gid.
|
||||
* @id1 contains a gid.
|
||||
* @id2 contains a gid.
|
||||
* @flags contains one of the LSM_SETID_* values.
|
||||
* Return 0 if permission is granted.
|
||||
* @task_setpgid:
|
||||
* Check permission before setting the process group identifier of the
|
||||
* process @p to @pgid.
|
||||
@@ -771,11 +704,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* @p contains the task_struct for the process and place is into @secid.
|
||||
* In case of failure, @secid will be set to zero.
|
||||
*
|
||||
* @task_setgroups:
|
||||
* Check permission before setting the supplementary group set of the
|
||||
* current process.
|
||||
* @group_info contains the new group information.
|
||||
* Return 0 if permission is granted.
|
||||
* @task_setnice:
|
||||
* Check permission before setting the nice value of @p to @nice.
|
||||
* @p contains the task_struct of process.
|
||||
@@ -1139,13 +1067,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* Return the length of the string (including terminating NUL) or -ve if
|
||||
* an error.
|
||||
* May also return 0 (and a NULL buffer pointer) if there is no label.
|
||||
* @key_session_to_parent:
|
||||
* Forcibly assign the session keyring from a process to its parent
|
||||
* process.
|
||||
* @cred: Pointer to process's credentials
|
||||
* @parent_cred: Pointer to parent process's credentials
|
||||
* @keyring: Proposed new session keyring
|
||||
* Return 0 if permission is granted, -ve error otherwise.
|
||||
*
|
||||
* Security hooks affecting all System V IPC operations.
|
||||
*
|
||||
@@ -1333,13 +1254,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* @cap contains the capability <include/linux/capability.h>.
|
||||
* @audit: Whether to write an audit message or not
|
||||
* Return 0 if the capability is granted for @tsk.
|
||||
* @acct:
|
||||
* Check permission before enabling or disabling process accounting. If
|
||||
* accounting is being enabled, then @file refers to the open file used to
|
||||
* store accounting records. If accounting is being disabled, then @file
|
||||
* is NULL.
|
||||
* @file contains the file structure for the accounting file (may be NULL).
|
||||
* Return 0 if permission is granted.
|
||||
* @sysctl:
|
||||
* Check permission before accessing the @table sysctl variable in the
|
||||
* manner specified by @op.
|
||||
@@ -1462,7 +1376,6 @@ struct security_operations {
|
||||
const kernel_cap_t *permitted);
|
||||
int (*capable) (struct task_struct *tsk, const struct cred *cred,
|
||||
int cap, int audit);
|
||||
int (*acct) (struct file *file);
|
||||
int (*sysctl) (struct ctl_table *table, int op);
|
||||
int (*quotactl) (int cmds, int type, int id, struct super_block *sb);
|
||||
int (*quota_on) (struct dentry *dentry);
|
||||
@@ -1484,18 +1397,9 @@ struct security_operations {
|
||||
int (*sb_statfs) (struct dentry *dentry);
|
||||
int (*sb_mount) (char *dev_name, struct path *path,
|
||||
char *type, unsigned long flags, void *data);
|
||||
int (*sb_check_sb) (struct vfsmount *mnt, struct path *path);
|
||||
int (*sb_umount) (struct vfsmount *mnt, int flags);
|
||||
void (*sb_umount_close) (struct vfsmount *mnt);
|
||||
void (*sb_umount_busy) (struct vfsmount *mnt);
|
||||
void (*sb_post_remount) (struct vfsmount *mnt,
|
||||
unsigned long flags, void *data);
|
||||
void (*sb_post_addmount) (struct vfsmount *mnt,
|
||||
struct path *mountpoint);
|
||||
int (*sb_pivotroot) (struct path *old_path,
|
||||
struct path *new_path);
|
||||
void (*sb_post_pivotroot) (struct path *old_path,
|
||||
struct path *new_path);
|
||||
int (*sb_set_mnt_opts) (struct super_block *sb,
|
||||
struct security_mnt_opts *opts);
|
||||
void (*sb_clone_mnt_opts) (const struct super_block *oldsb,
|
||||
@@ -1544,7 +1448,6 @@ struct security_operations {
|
||||
int (*inode_permission) (struct inode *inode, int mask);
|
||||
int (*inode_setattr) (struct dentry *dentry, struct iattr *attr);
|
||||
int (*inode_getattr) (struct vfsmount *mnt, struct dentry *dentry);
|
||||
void (*inode_delete) (struct inode *inode);
|
||||
int (*inode_setxattr) (struct dentry *dentry, const char *name,
|
||||
const void *value, size_t size, int flags);
|
||||
void (*inode_post_setxattr) (struct dentry *dentry, const char *name,
|
||||
@@ -1585,20 +1488,16 @@ struct security_operations {
|
||||
void (*cred_free) (struct cred *cred);
|
||||
int (*cred_prepare)(struct cred *new, const struct cred *old,
|
||||
gfp_t gfp);
|
||||
void (*cred_commit)(struct cred *new, const struct cred *old);
|
||||
void (*cred_transfer)(struct cred *new, const struct cred *old);
|
||||
int (*kernel_act_as)(struct cred *new, u32 secid);
|
||||
int (*kernel_create_files_as)(struct cred *new, struct inode *inode);
|
||||
int (*kernel_module_request)(char *kmod_name);
|
||||
int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags);
|
||||
int (*task_fix_setuid) (struct cred *new, const struct cred *old,
|
||||
int flags);
|
||||
int (*task_setgid) (gid_t id0, gid_t id1, gid_t id2, int flags);
|
||||
int (*task_setpgid) (struct task_struct *p, pid_t pgid);
|
||||
int (*task_getpgid) (struct task_struct *p);
|
||||
int (*task_getsid) (struct task_struct *p);
|
||||
void (*task_getsecid) (struct task_struct *p, u32 *secid);
|
||||
int (*task_setgroups) (struct group_info *group_info);
|
||||
int (*task_setnice) (struct task_struct *p, int nice);
|
||||
int (*task_setioprio) (struct task_struct *p, int ioprio);
|
||||
int (*task_getioprio) (struct task_struct *p);
|
||||
@@ -1728,9 +1627,6 @@ struct security_operations {
|
||||
const struct cred *cred,
|
||||
key_perm_t perm);
|
||||
int (*key_getsecurity)(struct key *key, char **_buffer);
|
||||
int (*key_session_to_parent)(const struct cred *cred,
|
||||
const struct cred *parent_cred,
|
||||
struct key *key);
|
||||
#endif /* CONFIG_KEYS */
|
||||
|
||||
#ifdef CONFIG_AUDIT
|
||||
@@ -1761,7 +1657,6 @@ int security_capset(struct cred *new, const struct cred *old,
|
||||
int security_capable(int cap);
|
||||
int security_real_capable(struct task_struct *tsk, int cap);
|
||||
int security_real_capable_noaudit(struct task_struct *tsk, int cap);
|
||||
int security_acct(struct file *file);
|
||||
int security_sysctl(struct ctl_table *table, int op);
|
||||
int security_quotactl(int cmds, int type, int id, struct super_block *sb);
|
||||
int security_quota_on(struct dentry *dentry);
|
||||
@@ -1783,14 +1678,8 @@ int security_sb_show_options(struct seq_file *m, struct super_block *sb);
|
||||
int security_sb_statfs(struct dentry *dentry);
|
||||
int security_sb_mount(char *dev_name, struct path *path,
|
||||
char *type, unsigned long flags, void *data);
|
||||
int security_sb_check_sb(struct vfsmount *mnt, struct path *path);
|
||||
int security_sb_umount(struct vfsmount *mnt, int flags);
|
||||
void security_sb_umount_close(struct vfsmount *mnt);
|
||||
void security_sb_umount_busy(struct vfsmount *mnt);
|
||||
void security_sb_post_remount(struct vfsmount *mnt, unsigned long flags, void *data);
|
||||
void security_sb_post_addmount(struct vfsmount *mnt, struct path *mountpoint);
|
||||
int security_sb_pivotroot(struct path *old_path, struct path *new_path);
|
||||
void security_sb_post_pivotroot(struct path *old_path, struct path *new_path);
|
||||
int security_sb_set_mnt_opts(struct super_block *sb, struct security_mnt_opts *opts);
|
||||
void security_sb_clone_mnt_opts(const struct super_block *oldsb,
|
||||
struct super_block *newsb);
|
||||
@@ -1816,7 +1705,6 @@ int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd);
|
||||
int security_inode_permission(struct inode *inode, int mask);
|
||||
int security_inode_setattr(struct dentry *dentry, struct iattr *attr);
|
||||
int security_inode_getattr(struct vfsmount *mnt, struct dentry *dentry);
|
||||
void security_inode_delete(struct inode *inode);
|
||||
int security_inode_setxattr(struct dentry *dentry, const char *name,
|
||||
const void *value, size_t size, int flags);
|
||||
void security_inode_post_setxattr(struct dentry *dentry, const char *name,
|
||||
@@ -1850,20 +1738,16 @@ int security_task_create(unsigned long clone_flags);
|
||||
int security_cred_alloc_blank(struct cred *cred, gfp_t gfp);
|
||||
void security_cred_free(struct cred *cred);
|
||||
int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp);
|
||||
void security_commit_creds(struct cred *new, const struct cred *old);
|
||||
void security_transfer_creds(struct cred *new, const struct cred *old);
|
||||
int security_kernel_act_as(struct cred *new, u32 secid);
|
||||
int security_kernel_create_files_as(struct cred *new, struct inode *inode);
|
||||
int security_kernel_module_request(char *kmod_name);
|
||||
int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags);
|
||||
int security_task_fix_setuid(struct cred *new, const struct cred *old,
|
||||
int flags);
|
||||
int security_task_setgid(gid_t id0, gid_t id1, gid_t id2, int flags);
|
||||
int security_task_setpgid(struct task_struct *p, pid_t pgid);
|
||||
int security_task_getpgid(struct task_struct *p);
|
||||
int security_task_getsid(struct task_struct *p);
|
||||
void security_task_getsecid(struct task_struct *p, u32 *secid);
|
||||
int security_task_setgroups(struct group_info *group_info);
|
||||
int security_task_setnice(struct task_struct *p, int nice);
|
||||
int security_task_setioprio(struct task_struct *p, int ioprio);
|
||||
int security_task_getioprio(struct task_struct *p);
|
||||
@@ -1990,11 +1874,6 @@ int security_real_capable_noaudit(struct task_struct *tsk, int cap)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int security_acct(struct file *file)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_sysctl(struct ctl_table *table, int op)
|
||||
{
|
||||
return 0;
|
||||
@@ -2099,41 +1978,17 @@ static inline int security_sb_mount(char *dev_name, struct path *path,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_sb_check_sb(struct vfsmount *mnt,
|
||||
struct path *path)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_sb_umount(struct vfsmount *mnt, int flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_sb_umount_close(struct vfsmount *mnt)
|
||||
{ }
|
||||
|
||||
static inline void security_sb_umount_busy(struct vfsmount *mnt)
|
||||
{ }
|
||||
|
||||
static inline void security_sb_post_remount(struct vfsmount *mnt,
|
||||
unsigned long flags, void *data)
|
||||
{ }
|
||||
|
||||
static inline void security_sb_post_addmount(struct vfsmount *mnt,
|
||||
struct path *mountpoint)
|
||||
{ }
|
||||
|
||||
static inline int security_sb_pivotroot(struct path *old_path,
|
||||
struct path *new_path)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_sb_post_pivotroot(struct path *old_path,
|
||||
struct path *new_path)
|
||||
{ }
|
||||
|
||||
static inline int security_sb_set_mnt_opts(struct super_block *sb,
|
||||
struct security_mnt_opts *opts)
|
||||
{
|
||||
@@ -2249,9 +2104,6 @@ static inline int security_inode_getattr(struct vfsmount *mnt,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_inode_delete(struct inode *inode)
|
||||
{ }
|
||||
|
||||
static inline int security_inode_setxattr(struct dentry *dentry,
|
||||
const char *name, const void *value, size_t size, int flags)
|
||||
{
|
||||
@@ -2398,11 +2250,6 @@ static inline int security_prepare_creds(struct cred *new,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_commit_creds(struct cred *new,
|
||||
const struct cred *old)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void security_transfer_creds(struct cred *new,
|
||||
const struct cred *old)
|
||||
{
|
||||
@@ -2424,12 +2271,6 @@ static inline int security_kernel_module_request(char *kmod_name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_task_setuid(uid_t id0, uid_t id1, uid_t id2,
|
||||
int flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_task_fix_setuid(struct cred *new,
|
||||
const struct cred *old,
|
||||
int flags)
|
||||
@@ -2437,12 +2278,6 @@ static inline int security_task_fix_setuid(struct cred *new,
|
||||
return cap_task_fix_setuid(new, old, flags);
|
||||
}
|
||||
|
||||
static inline int security_task_setgid(gid_t id0, gid_t id1, gid_t id2,
|
||||
int flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_task_setpgid(struct task_struct *p, pid_t pgid)
|
||||
{
|
||||
return 0;
|
||||
@@ -2463,11 +2298,6 @@ static inline void security_task_getsecid(struct task_struct *p, u32 *secid)
|
||||
*secid = 0;
|
||||
}
|
||||
|
||||
static inline int security_task_setgroups(struct group_info *group_info)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_task_setnice(struct task_struct *p, int nice)
|
||||
{
|
||||
return cap_task_setnice(p, nice);
|
||||
@@ -3064,9 +2894,6 @@ void security_key_free(struct key *key);
|
||||
int security_key_permission(key_ref_t key_ref,
|
||||
const struct cred *cred, key_perm_t perm);
|
||||
int security_key_getsecurity(struct key *key, char **_buffer);
|
||||
int security_key_session_to_parent(const struct cred *cred,
|
||||
const struct cred *parent_cred,
|
||||
struct key *key);
|
||||
|
||||
#else
|
||||
|
||||
@@ -3094,13 +2921,6 @@ static inline int security_key_getsecurity(struct key *key, char **_buffer)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_key_session_to_parent(const struct cred *cred,
|
||||
const struct cred *parent_cred,
|
||||
struct key *key)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* CONFIG_KEYS */
|
||||
|
||||
|
||||
+5
-15
@@ -216,7 +216,6 @@ static int acct_on(char *name)
|
||||
{
|
||||
struct file *file;
|
||||
struct vfsmount *mnt;
|
||||
int error;
|
||||
struct pid_namespace *ns;
|
||||
struct bsd_acct_struct *acct = NULL;
|
||||
|
||||
@@ -244,13 +243,6 @@ static int acct_on(char *name)
|
||||
}
|
||||
}
|
||||
|
||||
error = security_acct(file);
|
||||
if (error) {
|
||||
kfree(acct);
|
||||
filp_close(file, NULL);
|
||||
return error;
|
||||
}
|
||||
|
||||
spin_lock(&acct_lock);
|
||||
if (ns->bacct == NULL) {
|
||||
ns->bacct = acct;
|
||||
@@ -281,7 +273,7 @@ static int acct_on(char *name)
|
||||
*/
|
||||
SYSCALL_DEFINE1(acct, const char __user *, name)
|
||||
{
|
||||
int error;
|
||||
int error = 0;
|
||||
|
||||
if (!capable(CAP_SYS_PACCT))
|
||||
return -EPERM;
|
||||
@@ -299,13 +291,11 @@ SYSCALL_DEFINE1(acct, const char __user *, name)
|
||||
if (acct == NULL)
|
||||
return 0;
|
||||
|
||||
error = security_acct(NULL);
|
||||
if (!error) {
|
||||
spin_lock(&acct_lock);
|
||||
acct_file_reopen(acct, NULL, NULL);
|
||||
spin_unlock(&acct_lock);
|
||||
}
|
||||
spin_lock(&acct_lock);
|
||||
acct_file_reopen(acct, NULL, NULL);
|
||||
spin_unlock(&acct_lock);
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
@@ -522,8 +522,6 @@ int commit_creds(struct cred *new)
|
||||
#endif
|
||||
BUG_ON(atomic_read(&new->usage) < 1);
|
||||
|
||||
security_commit_creds(new, old);
|
||||
|
||||
get_cred(new); /* we will require a ref for the subj creds too */
|
||||
|
||||
/* dumpability changes */
|
||||
|
||||
@@ -164,12 +164,6 @@ int groups_search(const struct group_info *group_info, gid_t grp)
|
||||
*/
|
||||
int set_groups(struct cred *new, struct group_info *group_info)
|
||||
{
|
||||
int retval;
|
||||
|
||||
retval = security_task_setgroups(group_info);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
put_group_info(new->group_info);
|
||||
groups_sort(group_info);
|
||||
get_group_info(group_info);
|
||||
|
||||
@@ -492,10 +492,6 @@ SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid)
|
||||
return -ENOMEM;
|
||||
old = current_cred();
|
||||
|
||||
retval = security_task_setgid(rgid, egid, (gid_t)-1, LSM_SETID_RE);
|
||||
if (retval)
|
||||
goto error;
|
||||
|
||||
retval = -EPERM;
|
||||
if (rgid != (gid_t) -1) {
|
||||
if (old->gid == rgid ||
|
||||
@@ -543,10 +539,6 @@ SYSCALL_DEFINE1(setgid, gid_t, gid)
|
||||
return -ENOMEM;
|
||||
old = current_cred();
|
||||
|
||||
retval = security_task_setgid(gid, (gid_t)-1, (gid_t)-1, LSM_SETID_ID);
|
||||
if (retval)
|
||||
goto error;
|
||||
|
||||
retval = -EPERM;
|
||||
if (capable(CAP_SETGID))
|
||||
new->gid = new->egid = new->sgid = new->fsgid = gid;
|
||||
@@ -610,10 +602,6 @@ SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid)
|
||||
return -ENOMEM;
|
||||
old = current_cred();
|
||||
|
||||
retval = security_task_setuid(ruid, euid, (uid_t)-1, LSM_SETID_RE);
|
||||
if (retval)
|
||||
goto error;
|
||||
|
||||
retval = -EPERM;
|
||||
if (ruid != (uid_t) -1) {
|
||||
new->uid = ruid;
|
||||
@@ -675,10 +663,6 @@ SYSCALL_DEFINE1(setuid, uid_t, uid)
|
||||
return -ENOMEM;
|
||||
old = current_cred();
|
||||
|
||||
retval = security_task_setuid(uid, (uid_t)-1, (uid_t)-1, LSM_SETID_ID);
|
||||
if (retval)
|
||||
goto error;
|
||||
|
||||
retval = -EPERM;
|
||||
if (capable(CAP_SETUID)) {
|
||||
new->suid = new->uid = uid;
|
||||
@@ -719,9 +703,6 @@ SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid)
|
||||
if (!new)
|
||||
return -ENOMEM;
|
||||
|
||||
retval = security_task_setuid(ruid, euid, suid, LSM_SETID_RES);
|
||||
if (retval)
|
||||
goto error;
|
||||
old = current_cred();
|
||||
|
||||
retval = -EPERM;
|
||||
@@ -788,10 +769,6 @@ SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid)
|
||||
return -ENOMEM;
|
||||
old = current_cred();
|
||||
|
||||
retval = security_task_setgid(rgid, egid, sgid, LSM_SETID_RES);
|
||||
if (retval)
|
||||
goto error;
|
||||
|
||||
retval = -EPERM;
|
||||
if (!capable(CAP_SETGID)) {
|
||||
if (rgid != (gid_t) -1 && rgid != old->gid &&
|
||||
@@ -851,9 +828,6 @@ SYSCALL_DEFINE1(setfsuid, uid_t, uid)
|
||||
old = current_cred();
|
||||
old_fsuid = old->fsuid;
|
||||
|
||||
if (security_task_setuid(uid, (uid_t)-1, (uid_t)-1, LSM_SETID_FS) < 0)
|
||||
goto error;
|
||||
|
||||
if (uid == old->uid || uid == old->euid ||
|
||||
uid == old->suid || uid == old->fsuid ||
|
||||
capable(CAP_SETUID)) {
|
||||
@@ -864,7 +838,6 @@ SYSCALL_DEFINE1(setfsuid, uid_t, uid)
|
||||
}
|
||||
}
|
||||
|
||||
error:
|
||||
abort_creds(new);
|
||||
return old_fsuid;
|
||||
|
||||
@@ -888,9 +861,6 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid)
|
||||
old = current_cred();
|
||||
old_fsgid = old->fsgid;
|
||||
|
||||
if (security_task_setgid(gid, (gid_t)-1, (gid_t)-1, LSM_SETID_FS))
|
||||
goto error;
|
||||
|
||||
if (gid == old->gid || gid == old->egid ||
|
||||
gid == old->sgid || gid == old->fsgid ||
|
||||
capable(CAP_SETGID)) {
|
||||
@@ -900,7 +870,6 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid)
|
||||
}
|
||||
}
|
||||
|
||||
error:
|
||||
abort_creds(new);
|
||||
return old_fsgid;
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ int main(int argc, char *argv[])
|
||||
fprintf(fout, "\n");
|
||||
|
||||
for (i = 1; i < isids_len; i++) {
|
||||
char *s = initial_sid_to_string[i];
|
||||
const char *s = initial_sid_to_string[i];
|
||||
fprintf(fout, "#define SECINITSID_%s", s);
|
||||
for (j = 0; j < max(1, 40 - strlen(s)); j++)
|
||||
fprintf(fout, " ");
|
||||
|
||||
+1
-75
@@ -12,11 +12,6 @@
|
||||
|
||||
#include <linux/security.h>
|
||||
|
||||
static int cap_acct(struct file *file)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cap_sysctl(ctl_table *table, int op)
|
||||
{
|
||||
return 0;
|
||||
@@ -80,42 +75,16 @@ static int cap_sb_mount(char *dev_name, struct path *path, char *type,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cap_sb_check_sb(struct vfsmount *mnt, struct path *path)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cap_sb_umount(struct vfsmount *mnt, int flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cap_sb_umount_close(struct vfsmount *mnt)
|
||||
{
|
||||
}
|
||||
|
||||
static void cap_sb_umount_busy(struct vfsmount *mnt)
|
||||
{
|
||||
}
|
||||
|
||||
static void cap_sb_post_remount(struct vfsmount *mnt, unsigned long flags,
|
||||
void *data)
|
||||
{
|
||||
}
|
||||
|
||||
static void cap_sb_post_addmount(struct vfsmount *mnt, struct path *path)
|
||||
{
|
||||
}
|
||||
|
||||
static int cap_sb_pivotroot(struct path *old_path, struct path *new_path)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cap_sb_post_pivotroot(struct path *old_path, struct path *new_path)
|
||||
{
|
||||
}
|
||||
|
||||
static int cap_sb_set_mnt_opts(struct super_block *sb,
|
||||
struct security_mnt_opts *opts)
|
||||
{
|
||||
@@ -221,10 +190,6 @@ static int cap_inode_getattr(struct vfsmount *mnt, struct dentry *dentry)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cap_inode_delete(struct inode *ino)
|
||||
{
|
||||
}
|
||||
|
||||
static void cap_inode_post_setxattr(struct dentry *dentry, const char *name,
|
||||
const void *value, size_t size, int flags)
|
||||
{
|
||||
@@ -403,10 +368,6 @@ static int cap_cred_prepare(struct cred *new, const struct cred *old, gfp_t gfp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cap_cred_commit(struct cred *new, const struct cred *old)
|
||||
{
|
||||
}
|
||||
|
||||
static void cap_cred_transfer(struct cred *new, const struct cred *old)
|
||||
{
|
||||
}
|
||||
@@ -426,16 +387,6 @@ static int cap_kernel_module_request(char *kmod_name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cap_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cap_task_setgid(gid_t id0, gid_t id1, gid_t id2, int flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cap_task_setpgid(struct task_struct *p, pid_t pgid)
|
||||
{
|
||||
return 0;
|
||||
@@ -456,11 +407,6 @@ static void cap_task_getsecid(struct task_struct *p, u32 *secid)
|
||||
*secid = 0;
|
||||
}
|
||||
|
||||
static int cap_task_setgroups(struct group_info *group_info)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cap_task_getioprio(struct task_struct *p)
|
||||
{
|
||||
return 0;
|
||||
@@ -875,13 +821,6 @@ static int cap_key_getsecurity(struct key *key, char **_buffer)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cap_key_session_to_parent(const struct cred *cred,
|
||||
const struct cred *parent_cred,
|
||||
struct key *key)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_KEYS */
|
||||
|
||||
#ifdef CONFIG_AUDIT
|
||||
@@ -915,13 +854,12 @@ static void cap_audit_rule_free(void *lsmrule)
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
void security_fixup_ops(struct security_operations *ops)
|
||||
void __init security_fixup_ops(struct security_operations *ops)
|
||||
{
|
||||
set_to_cap_if_null(ops, ptrace_access_check);
|
||||
set_to_cap_if_null(ops, ptrace_traceme);
|
||||
set_to_cap_if_null(ops, capget);
|
||||
set_to_cap_if_null(ops, capset);
|
||||
set_to_cap_if_null(ops, acct);
|
||||
set_to_cap_if_null(ops, capable);
|
||||
set_to_cap_if_null(ops, quotactl);
|
||||
set_to_cap_if_null(ops, quota_on);
|
||||
@@ -941,14 +879,8 @@ void security_fixup_ops(struct security_operations *ops)
|
||||
set_to_cap_if_null(ops, sb_show_options);
|
||||
set_to_cap_if_null(ops, sb_statfs);
|
||||
set_to_cap_if_null(ops, sb_mount);
|
||||
set_to_cap_if_null(ops, sb_check_sb);
|
||||
set_to_cap_if_null(ops, sb_umount);
|
||||
set_to_cap_if_null(ops, sb_umount_close);
|
||||
set_to_cap_if_null(ops, sb_umount_busy);
|
||||
set_to_cap_if_null(ops, sb_post_remount);
|
||||
set_to_cap_if_null(ops, sb_post_addmount);
|
||||
set_to_cap_if_null(ops, sb_pivotroot);
|
||||
set_to_cap_if_null(ops, sb_post_pivotroot);
|
||||
set_to_cap_if_null(ops, sb_set_mnt_opts);
|
||||
set_to_cap_if_null(ops, sb_clone_mnt_opts);
|
||||
set_to_cap_if_null(ops, sb_parse_opts_str);
|
||||
@@ -968,7 +900,6 @@ void security_fixup_ops(struct security_operations *ops)
|
||||
set_to_cap_if_null(ops, inode_permission);
|
||||
set_to_cap_if_null(ops, inode_setattr);
|
||||
set_to_cap_if_null(ops, inode_getattr);
|
||||
set_to_cap_if_null(ops, inode_delete);
|
||||
set_to_cap_if_null(ops, inode_setxattr);
|
||||
set_to_cap_if_null(ops, inode_post_setxattr);
|
||||
set_to_cap_if_null(ops, inode_getxattr);
|
||||
@@ -1009,19 +940,15 @@ void security_fixup_ops(struct security_operations *ops)
|
||||
set_to_cap_if_null(ops, cred_alloc_blank);
|
||||
set_to_cap_if_null(ops, cred_free);
|
||||
set_to_cap_if_null(ops, cred_prepare);
|
||||
set_to_cap_if_null(ops, cred_commit);
|
||||
set_to_cap_if_null(ops, cred_transfer);
|
||||
set_to_cap_if_null(ops, kernel_act_as);
|
||||
set_to_cap_if_null(ops, kernel_create_files_as);
|
||||
set_to_cap_if_null(ops, kernel_module_request);
|
||||
set_to_cap_if_null(ops, task_setuid);
|
||||
set_to_cap_if_null(ops, task_fix_setuid);
|
||||
set_to_cap_if_null(ops, task_setgid);
|
||||
set_to_cap_if_null(ops, task_setpgid);
|
||||
set_to_cap_if_null(ops, task_getpgid);
|
||||
set_to_cap_if_null(ops, task_getsid);
|
||||
set_to_cap_if_null(ops, task_getsecid);
|
||||
set_to_cap_if_null(ops, task_setgroups);
|
||||
set_to_cap_if_null(ops, task_setnice);
|
||||
set_to_cap_if_null(ops, task_setioprio);
|
||||
set_to_cap_if_null(ops, task_getioprio);
|
||||
@@ -1113,7 +1040,6 @@ void security_fixup_ops(struct security_operations *ops)
|
||||
set_to_cap_if_null(ops, key_free);
|
||||
set_to_cap_if_null(ops, key_permission);
|
||||
set_to_cap_if_null(ops, key_getsecurity);
|
||||
set_to_cap_if_null(ops, key_session_to_parent);
|
||||
#endif /* CONFIG_KEYS */
|
||||
#ifdef CONFIG_AUDIT
|
||||
set_to_cap_if_null(ops, audit_rule_init);
|
||||
|
||||
@@ -570,7 +570,7 @@ int cap_inode_setxattr(struct dentry *dentry, const char *name,
|
||||
}
|
||||
|
||||
if (!strncmp(name, XATTR_SECURITY_PREFIX,
|
||||
sizeof(XATTR_SECURITY_PREFIX) - 1) &&
|
||||
sizeof(XATTR_SECURITY_PREFIX) - 1) &&
|
||||
!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
return 0;
|
||||
@@ -596,7 +596,7 @@ int cap_inode_removexattr(struct dentry *dentry, const char *name)
|
||||
}
|
||||
|
||||
if (!strncmp(name, XATTR_SECURITY_PREFIX,
|
||||
sizeof(XATTR_SECURITY_PREFIX) - 1) &&
|
||||
sizeof(XATTR_SECURITY_PREFIX) - 1) &&
|
||||
!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
return 0;
|
||||
@@ -931,7 +931,7 @@ int cap_vm_enough_memory(struct mm_struct *mm, long pages)
|
||||
* @addr: address attempting to be mapped
|
||||
* @addr_only: unused
|
||||
*
|
||||
* If the process is attempting to map memory below mmap_min_addr they need
|
||||
* If the process is attempting to map memory below dac_mmap_min_addr they need
|
||||
* CAP_SYS_RAWIO. The other parameters to this function are unused by the
|
||||
* capability security module. Returns 0 if this mapping should be allowed
|
||||
* -EPERM if not.
|
||||
|
||||
@@ -470,7 +470,7 @@ struct cgroup_subsys devices_subsys = {
|
||||
.name = "devices",
|
||||
.can_attach = devcgroup_can_attach,
|
||||
.create = devcgroup_create,
|
||||
.destroy = devcgroup_destroy,
|
||||
.destroy = devcgroup_destroy,
|
||||
.populate = devcgroup_populate,
|
||||
.subsys_id = devices_subsys_id,
|
||||
};
|
||||
|
||||
@@ -2,15 +2,14 @@
|
||||
#
|
||||
config IMA
|
||||
bool "Integrity Measurement Architecture(IMA)"
|
||||
depends on ACPI
|
||||
depends on SECURITY
|
||||
select SECURITYFS
|
||||
select CRYPTO
|
||||
select CRYPTO_HMAC
|
||||
select CRYPTO_MD5
|
||||
select CRYPTO_SHA1
|
||||
select TCG_TPM
|
||||
select TCG_TIS
|
||||
select TCG_TPM if !S390
|
||||
select TCG_TIS if TCG_TPM
|
||||
help
|
||||
The Trusted Computing Group(TCG) runtime Integrity
|
||||
Measurement Architecture(IMA) maintains a list of hash
|
||||
|
||||
@@ -135,7 +135,7 @@ enum ima_hooks { FILE_CHECK = 1, FILE_MMAP, BPRM_CHECK };
|
||||
int ima_match_policy(struct inode *inode, enum ima_hooks func, int mask);
|
||||
void ima_init_policy(void);
|
||||
void ima_update_policy(void);
|
||||
int ima_parse_add_rule(char *);
|
||||
ssize_t ima_parse_add_rule(char *);
|
||||
void ima_delete_rules(void);
|
||||
|
||||
/* LSM based policy rules require audit */
|
||||
|
||||
@@ -41,7 +41,7 @@ void integrity_audit_msg(int audit_msgno, struct inode *inode,
|
||||
return;
|
||||
|
||||
ab = audit_log_start(current->audit_context, GFP_KERNEL, audit_msgno);
|
||||
audit_log_format(ab, "integrity: pid=%d uid=%u auid=%u ses=%u",
|
||||
audit_log_format(ab, "pid=%d uid=%u auid=%u ses=%u",
|
||||
current->pid, current_cred()->uid,
|
||||
audit_get_loginuid(current),
|
||||
audit_get_sessionid(current));
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user