Tetsuo Handa wrote:
> Tetsuo Handa wrote:
>
>> Oh, I didn't know TOMOYO needs to call cap_bprm_set_creds().
>>
>
> It is indeed a bug. James, please apply the attached patch for 2.6.30.
>
>
>> SMACK is calling below capability hooks.
>> Maybe TOMOYO needs to call below capability hooks as well.
>>
>> struct security_operations smack_ops = {
>> .capget = cap_capget,
>> .capset = cap_capset,
>> .capable = cap_capable,
>> .settime = cap_settime,
>> .vm_enough_memory = cap_vm_enough_memory,
>> .bprm_set_creds = cap_bprm_set_creds,
>> .bprm_secureexec = cap_bprm_secureexec,
>> .inode_need_killpriv = cap_inode_need_killpriv,
>> .inode_killpriv = cap_inode_killpriv,
>> .task_fix_setuid = cap_task_fix_setuid,
>> .task_prctl = cap_task_prctl,
>> .netlink_send = cap_netlink_send,
>> .netlink_recv = cap_netlink_recv,
>> };
>>
>
> I compared with
>
> static struct security_operations tomoyo_security_ops = {
> .name = "tomoyo",
> .cred_prepare = tomoyo_cred_prepare,
> .bprm_set_creds = tomoyo_bprm_set_creds,
> .bprm_check_security = tomoyo_bprm_check_security,
> #ifdef CONFIG_SYSCTL
> .sysctl = tomoyo_sysctl,
> #endif
> .file_fcntl = tomoyo_file_fcntl,
> .dentry_open = tomoyo_dentry_open,
> .path_truncate = tomoyo_path_truncate,
> .path_unlink = tomoyo_path_unlink,
> .path_mkdir = tomoyo_path_mkdir,
> .path_rmdir = tomoyo_path_rmdir,
> .path_symlink = tomoyo_path_symlink,
> .path_mknod = tomoyo_path_mknod,
> .path_link = tomoyo_path_link,
> .path_rename = tomoyo_path_rename,
> };
>
> and .bprm_set_creds is the only hook which TOMOYO overrides.
> All other hooks will be set to capability hooks by security_fixup_ops().
>
> By the way, is there any reason SMACK explicitly sets above capability hooks
> instead of letting security_fixup_ops() set above capability hooks?
>
No good reason at any rate. That is a clean-up task that I have not
gotten to.
> Regards.
> ----------------------------------------
> [PATCH 2.6.30] tomoyo: add missing call to cap_bprm_set_creds
>
> cap_bprm_set_creds() has to be called from security_bprm_set_creds().
> TOMOYO forgot to call cap_bprm_set_creds() from tomoyo_bprm_set_creds()
> and suid executables were not being working.
>
> Make sure we call cap_bprm_set_creds() with TOMOYO, to set credentials
> properly inside tomoyo_bprm_set_creds().
>
> Signed-off-by: Herton Ronaldo Krzesinski <[email protected]>
> Acked-by: Tetsuo Handa <[email protected]>
> ---
> security/tomoyo/tomoyo.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/security/tomoyo/tomoyo.c b/security/tomoyo/tomoyo.c
> index 5b48191..e42be5c 100644
> --- a/security/tomoyo/tomoyo.c
> +++ b/security/tomoyo/tomoyo.c
> @@ -27,6 +27,12 @@ static int tomoyo_cred_prepare(struct cred *new, const
> struct cred *old,
>
> static int tomoyo_bprm_set_creds(struct linux_binprm *bprm)
> {
> + int rc;
> +
> + rc = cap_bprm_set_creds(bprm);
> + if (rc)
> + return rc;
> +
> /*
> * Do only if this function is called for the first time of an execve
> * operation.
> --
> To unsubscribe from this list: send the line "unsubscribe
> linux-security-module" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
>
_______________________________________________
tomoyo-users-en mailing list
[email protected]
http://lists.sourceforge.jp/mailman/listinfo/tomoyo-users-en