24 Jan, 2014

1 commit

  • Pull audit update from Eric Paris:
    "Again we stayed pretty well contained inside the audit system.
    Venturing out was fixing a couple of function prototypes which were
    inconsistent (didn't hurt anything, but we used the same value as an
    int, uint, u32, and I think even a long in a couple of places).

    We also made a couple of minor changes to when a couple of LSMs called
    the audit system. We hoped to add aarch64 audit support this go
    round, but it wasn't ready.

    I'm disappearing on vacation on Thursday. I should have internet
    access, but it'll be spotty. If anything goes wrong please be sure to
    cc rgb@redhat.com. He'll make fixing things his top priority"

    * git://git.infradead.org/users/eparis/audit: (50 commits)
    audit: whitespace fix in kernel-parameters.txt
    audit: fix location of __net_initdata for audit_net_ops
    audit: remove pr_info for every network namespace
    audit: Modify a set of system calls in audit class definitions
    audit: Convert int limit uses to u32
    audit: Use more current logging style
    audit: Use hex_byte_pack_upper
    audit: correct a type mismatch in audit_syscall_exit()
    audit: reorder AUDIT_TTY_SET arguments
    audit: rework AUDIT_TTY_SET to only grab spin_lock once
    audit: remove needless switch in AUDIT_SET
    audit: use define's for audit version
    audit: documentation of audit= kernel parameter
    audit: wait_for_auditd rework for readability
    audit: update MAINTAINERS
    audit: log task info on feature change
    audit: fix incorrect set of audit_sock
    audit: print error message when fail to create audit socket
    audit: fix dangling keywords in audit_log_set_loginuid() output
    audit: log on errors from filter user rules
    ...

    Linus Torvalds
     

14 Jan, 2014

1 commit


01 Jan, 2014

2 commits

  • Eric Paris politely points out:

    Inside smack_file_receive() it seems like you are initting the audit
    field with LSM_AUDIT_DATA_TASK. And then use
    smk_ad_setfield_u_fs_path().

    Seems like LSM_AUDIT_DATA_PATH would make more sense. (and depending
    on how it's used fix a crash...)

    He is correct. This puts things in order.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     
  • The mount restrictions imposed by Smack rely heavily on the
    use of the filesystem "floor", which is the label that all
    processes writing to the filesystem must have access to. It
    turns out that while the "floor" notion is sound, it has yet
    to be fully implemented and has never been used.

    The sb_mount and sb_umount hooks only make sense if the
    filesystem floor is used actively, and it isn't. They can
    be reintroduced if a rational restriction comes up. Until
    then, they get removed.

    The sb_kern_mount hook is required for the option processing.
    It is too permissive in the case of unprivileged mounts,
    effectively bypassing the CAP_MAC_ADMIN restrictions if
    any of the smack options are specified. Unprivileged mounts
    are no longer allowed to set Smack filesystem options.
    Additionally, the root and default values are set to the
    label of the caller, in keeping with the policy that objects
    get the label of their creator.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     

24 Dec, 2013

2 commits

  • smk_write_change_rule() is calling capable rather than
    the more correct smack_privileged(). This allows for setting
    rules in violation of the onlycap facility. This is the
    simple repair.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     
  • The syslog control requires that the calling proccess
    have the floor ("_") Smack label. Tizen does not run any
    processes except for kernel helpers with the floor label.
    This changes allows the admin to configure a specific
    label for syslog. The default value is the star ("*")
    label, effectively removing the restriction. The value
    can be set using smackfs/syslog for anyone who wants
    a more restrictive behavior.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     

20 Dec, 2013

1 commit

  • Smack prohibits processes from using the star ("*") and web ("@") labels
    because we don't want files with those labels getting created implicitly.
    All setting of those labels should be done explicitly. The trouble is that
    there is no check for these labels in the processing of SMACK64EXEC. That
    is repaired.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     

12 Dec, 2013

1 commit


29 Oct, 2013

1 commit

  • When the ptrace security hooks were split the addition of
    a mode parameter was not taken advantage of in the Smack
    ptrace access check. This changes the access check from
    always looking for read and write access to using the
    passed mode. This will make use of /proc much happier.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     

19 Oct, 2013

1 commit

  • Linux file locking does not follow the same rules
    as other mechanisms. Even though it is a write operation
    a process can set a read lock on files which it has open
    only for read access. Two programs with read access to
    a file can use read locks to communicate.

    This is not acceptable in a Mandatory Access Control
    environment. Smack treats setting a read lock as the
    write operation that it is. Unfortunately, many programs
    assume that setting a read lock is a read operation.
    These programs are unhappy in the Smack environment.

    This patch introduces a new access mode (lock) to address
    this problem. A process with lock access to a file can
    set a read lock. A process with write access to a file can
    set a read lock or a write lock. This prevents a situation
    where processes are granted write access just so they can
    set read locks.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     

08 Sep, 2013

1 commit

  • Pull security subsystem updates from James Morris:
    "Nothing major for this kernel, just maintenance updates"

    * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (21 commits)
    apparmor: add the ability to report a sha1 hash of loaded policy
    apparmor: export set of capabilities supported by the apparmor module
    apparmor: add the profile introspection file to interface
    apparmor: add an optional profile attachment string for profiles
    apparmor: add interface files for profiles and namespaces
    apparmor: allow setting any profile into the unconfined state
    apparmor: make free_profile available outside of policy.c
    apparmor: rework namespace free path
    apparmor: update how unconfined is handled
    apparmor: change how profile replacement update is done
    apparmor: convert profile lists to RCU based locking
    apparmor: provide base for multiple profiles to be replaced at once
    apparmor: add a features/policy dir to interface
    apparmor: enable users to query whether apparmor is enabled
    apparmor: remove minimum size check for vmalloc()
    Smack: parse multiple rules per write to load2, up to PAGE_SIZE-1 bytes
    Smack: network label match fix
    security: smack: add a hash table to quicken smk_find_entry()
    security: smack: fix memleak in smk_write_rules_list()
    xattr: Constify ->name member of "struct xattr".
    ...

    Linus Torvalds
     

23 Aug, 2013

1 commit


13 Aug, 2013

1 commit

  • Smack interface for loading rules has always parsed only single rule from
    data written to it. This requires user program to call one write() per
    each rule it wants to load.
    This change makes it possible to write multiple rules, separated by new
    line character. Smack will load at most PAGE_SIZE-1 characters and properly
    return number of processed bytes. In case when user buffer is larger, it
    will be additionally truncated. All characters after last \n will not get
    parsed to avoid partial rule near input buffer boundary.

    Signed-off-by: Rafal Krypa

    Rafal Krypa
     

06 Aug, 2013

1 commit

  • The original implementation of the Smack IPv6 port based
    local controls works most of the time using a sockaddr as
    a temporary variable, but not always as it overflows in
    some circumstances. The correct data is a sockaddr_in6.
    A struct sockaddr isn't as large as a struct sockaddr_in6.
    There would need to be casting one way or the other. This
    patch gets it the right way.

    Signed-off-by: Casey Schaufler
    Signed-off-by: James Morris

    Casey Schaufler
     

02 Aug, 2013

3 commits

  • The Smack code that matches incoming CIPSO tags with Smack labels
    reaches through the NetLabel interfaces and compares the network
    data with the CIPSO header associated with a Smack label. This was
    done in a ill advised attempt to optimize performance. It works
    so long as the categories fit in a single capset, but this isn't
    always the case.

    This patch changes the Smack code to use the appropriate NetLabel
    interfaces to compare the incoming CIPSO header with the CIPSO
    header associated with a label. It will always match the CIPSO
    headers correctly.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     
  • Accepted for the smack-next tree after changing the number of
    slots from 128 to 16.

    This patch adds a hash table to quicken searching of a smack label by its name.

    Basically, the patch improves performance of SMACK initialization. Parsing of
    rules involves translation from a string to a smack_known (aka label) entity
    which is done in smk_find_entry().

    The current implementation of the function iterates over a global list of
    smack_known resulting in O(N) complexity for smk_find_entry(). The total
    complexity of SMACK initialization becomes O(rules * labels). Therefore it
    scales quadratically with a complexity of a system.

    Applying the patch reduced the complexity of smk_find_entry() to O(1) as long
    as number of label is in hundreds. If the number of labels is increased please
    update SMACK_HASH_SLOTS constant defined in security/smack/smack.h. Introducing
    the configuration of this constant with Kconfig or cmdline might be a good
    idea.

    The size of the hash table was adjusted experimentally. The rule set used by
    TIZEN contains circa 17K rules for 500 labels. The table above contains
    results of SMACK initialization using 'time smackctl apply' bash command.
    The 'Ref' is a kernel without this patch applied. The consecutive values
    refers to value of SMACK_HASH_SLOTS. Every measurement was repeated three
    times to reduce noise.

    | Ref | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512
    --------------------------------------------------------------------------------------------
    Run1 | 1.156 | 1.096 | 0.883 | 0.764 | 0.692 | 0.667 | 0.649 | 0.633 | 0.634 | 0.629 | 0.620
    Run2 | 1.156 | 1.111 | 0.885 | 0.764 | 0.694 | 0.661 | 0.649 | 0.651 | 0.634 | 0.638 | 0.623
    Run3 | 1.160 | 1.107 | 0.886 | 0.764 | 0.694 | 0.671 | 0.661 | 0.638 | 0.631 | 0.624 | 0.638
    AVG | 1.157 | 1.105 | 0.885 | 0.764 | 0.693 | 0.666 | 0.653 | 0.641 | 0.633 | 0.630 | 0.627

    Surprisingly, a single hlist is slightly faster than a double-linked list.
    The speed-up saturates near 64 slots. Therefore I chose value 128 to provide
    some margin if more labels were used.
    It looks that IO becomes a new bottleneck.

    Signed-off-by: Tomasz Stanislawski

    Tomasz Stanislawski
     
  • The smack_parsed_rule structure is allocated. If a rule is successfully
    installed then the last reference to the object is lost. This patch fixes this
    leak. Moreover smack_parsed_rule is allocated on stack because it no longer
    needed ofter smk_write_rules_list() is finished.

    Signed-off-by: Tomasz Stanislawski

    Tomasz Stanislawski
     

25 Jul, 2013

1 commit

  • Since everybody sets kstrdup()ed constant string to "struct xattr"->name but
    nobody modifies "struct xattr"->name , we can omit kstrdup() and its failure
    checking by constifying ->name member of "struct xattr".

    Signed-off-by: Tetsuo Handa
    Reviewed-by: Joel Becker [ocfs2]
    Acked-by: Serge E. Hallyn
    Acked-by: Casey Schaufler
    Acked-by: Mimi Zohar
    Reviewed-by: Paul Moore
    Tested-by: Paul Moore
    Acked-by: Eric Paris
    Signed-off-by: James Morris

    Tetsuo Handa
     

10 Jul, 2013

1 commit

  • Pull NFS client updates from Trond Myklebust:
    "Feature highlights include:
    - Add basic client support for NFSv4.2
    - Add basic client support for Labeled NFS (selinux for NFSv4.2)
    - Fix the use of credentials in NFSv4.1 stateful operations, and add
    support for NFSv4.1 state protection.

    Bugfix highlights:
    - Fix another NFSv4 open state recovery race
    - Fix an NFSv4.1 back channel session regression
    - Various rpc_pipefs races
    - Fix another issue with NFSv3 auth negotiation

    Please note that Labeled NFS does require some additional support from
    the security subsystem. The relevant changesets have all been
    reviewed and acked by James Morris."

    * tag 'nfs-for-3.11-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (54 commits)
    NFS: Set NFS_CS_MIGRATION for NFSv4 mounts
    NFSv4.1 Refactor nfs4_init_session and nfs4_init_channel_attrs
    nfs: have NFSv3 try server-specified auth flavors in turn
    nfs: have nfs_mount fake up a auth_flavs list when the server didn't provide it
    nfs: move server_authlist into nfs_try_mount_request
    nfs: refactor "need_mount" code out of nfs_try_mount
    SUNRPC: PipeFS MOUNT notification optimization for dying clients
    SUNRPC: split client creation routine into setup and registration
    SUNRPC: fix races on PipeFS UMOUNT notifications
    SUNRPC: fix races on PipeFS MOUNT notifications
    NFSv4.1 use pnfs_device maxcount for the objectlayout gdia_maxcount
    NFSv4.1 use pnfs_device maxcount for the blocklayout gdia_maxcount
    NFSv4.1 Fix gdia_maxcount calculation to fit in ca_maxresponsesize
    NFS: Improve legacy idmapping fallback
    NFSv4.1 end back channel session draining
    NFS: Apply v4.1 capabilities to v4.2
    NFSv4.1: Clean up layout segment comparison helper names
    NFSv4.1: layout segment comparison helpers should take 'const' parameters
    NFSv4: Move the DNS resolver into the NFSv4 module
    rpc_pipefs: only set rpc_dentry_ops if d_op isn't already set
    ...

    Linus Torvalds
     

09 Jun, 2013

1 commit

  • The interface to request security labels from user space is the xattr
    interface. When requesting the security label from an NFS server it is
    important to make sure the requested xattr actually is a MAC label. This allows
    us to make sure that we get the desired semantics from the attribute instead of
    something else such as capabilities or a time based LSM.

    Acked-by: Eric Paris
    Acked-by: James Morris
    Signed-off-by: Matthew N. Dodd
    Signed-off-by: Miguel Rodel Felipe
    Signed-off-by: Phua Eu Gene
    Signed-off-by: Khin Mi Mi Aung
    Signed-off-by: Trond Myklebust

    David Quigley
     

04 Jun, 2013

1 commit


29 May, 2013

4 commits

  • netlbl_secattr_catmap_alloc(GFP_ATOMIC) can return NULL.

    Signed-off-by: Tetsuo Handa

    Tetsuo Handa
     
  • Suppliment the smkfsroot mount option with another, smkfstransmute,
    that does the same thing but also marks the root inode as
    transmutting. This allows a freshly created filesystem to
    be mounted with a transmutting heirarchy.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     
  • Each Smack label that the kernel has seen is added to a
    list of labels. The list of access rules for a given subject
    label hangs off of the label list entry for the label.
    This patch changes the structures that contain subject
    labels to point at the label list entry rather that the
    label itself. Doing so removes a label list lookup in
    smk_access() that was accounting for the largest single
    chunk of Smack overhead.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     
  • Smack does not provide access controls on IPv6 communications.
    This patch introduces a mechanism for maintaining Smack lables
    for local IPv6 communications. It is based on labeling local ports.
    The behavior should be compatible with any future "real" IPv6
    support as it provides no interfaces for users to manipulate
    the labeling. Remote IPv6 connections use the ambient label
    the same way that unlabeled IPv4 packets are treated.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     

03 Apr, 2013

1 commit


20 Mar, 2013

5 commits

  • This patch fixes kernel Oops because of wrong common_audit_data type
    in smack_inode_unlink() and smack_inode_rmdir().

    When SMACK security module is enabled and SMACK logging is on (/smack/logging
    is not zero) and you try to delete the file which
    1) you cannot delete due to SMACK rules and logging of failures is on
    or
    2) you can delete and logging of success is on,

    you will see following:

    Unable to handle kernel NULL pointer dereference at virtual address 000002d7

    [] (strlen+0x0/0x28)
    [] (audit_log_untrustedstring+0x14/0x28)
    [] (common_lsm_audit+0x108/0x6ac)
    [] (smack_log+0xc4/0xe4)
    [] (smk_curacc+0x80/0x10c)
    [] (smack_inode_unlink+0x74/0x80)
    [] (security_inode_unlink+0x2c/0x30)
    [] (vfs_unlink+0x7c/0x100)
    [] (do_unlinkat+0x144/0x16c)

    The function smack_inode_unlink() (and smack_inode_rmdir()) need
    to log two structures of different types. First of all it does:

    smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_DENTRY);
    smk_ad_setfield_u_fs_path_dentry(&ad, dentry);

    This will set common audit data type to LSM_AUDIT_DATA_DENTRY
    and store dentry for auditing (by function smk_curacc(), which in turn calls
    dump_common_audit_data(), which is actually uses provided data and logs it).

    /*
    * You need write access to the thing you're unlinking
    */
    rc = smk_curacc(smk_of_inode(ip), MAY_WRITE, &ad);
    if (rc == 0) {
    /*
    * You also need write access to the containing directory
    */

    Then this function wants to log anoter data:

    smk_ad_setfield_u_fs_path_dentry(&ad, NULL);
    smk_ad_setfield_u_fs_inode(&ad, dir);

    The function sets inode field, but don't change common_audit_data type.

    rc = smk_curacc(smk_of_inode(dir), MAY_WRITE, &ad);
    }

    So the dump_common_audit() function incorrectly interprets inode structure
    as dentry, and Oops will happen.

    This patch reinitializes common_audit_data structures with correct type.
    Also I removed unneeded
    smk_ad_setfield_u_fs_path_dentry(&ad, NULL);
    initialization, because both dentry and inode pointers are stored
    in the same union.

    Signed-off-by: Igor Zhbanov
    Signed-off-by: Kyungmin Park

    Igor Zhbanov
     
  • Rule modifications are enabled via /smack/change-rule. Format is as follows:
    "Subject Object rwaxt rwaxt"

    First two strings are subject and object labels up to 255 characters.
    Third string contains permissions to enable.
    Fourth string contains permissions to disable.

    All unmentioned permissions will be left unchanged.
    If no rule previously existed, it will be created.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Rafal Krypa

    Rafal Krypa
     
  • SMACK_MAGIC moved to a proper place for easy user space access
    (i.e. libsmack).

    Signed-off-by: Jarkko Sakkinen

    Jarkko Sakkinen
     
  • This fixes audit logs for granting or denial of permissions to show
    information about transmute bit.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Rafal Krypa

    Rafal Krypa
     
  • Special file /smack/revoke-subject will silently accept labels that are not
    present on the subject label list. Nothing has to be done for such labels,
    as there are no rules for them to revoke.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Rafal Krypa

    Rafal Krypa
     

23 Feb, 2013

1 commit


17 Dec, 2012

1 commit

  • Pull security subsystem updates from James Morris:
    "A quiet cycle for the security subsystem with just a few maintenance
    updates."

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security:
    Smack: create a sysfs mount point for smackfs
    Smack: use select not depends in Kconfig
    Yama: remove locking from delete path
    Yama: add RCU to drop read locking
    drivers/char/tpm: remove tasklet and cleanup
    KEYS: Use keyring_alloc() to create special keyrings
    KEYS: Reduce initial permissions on keys
    KEYS: Make the session and process keyrings per-thread
    seccomp: Make syscall skipping and nr changes more consistent
    key: Fix resource leak
    keys: Fix unreachable code
    KEYS: Add payload preparsing opportunity prior to key instantiate or update

    Linus Torvalds
     

15 Dec, 2012

2 commits

  • There are a number of "conventions" for where to put LSM filesystems.
    Smack adheres to none of them. Create a mount point at /sys/fs/smackfs
    for mounting smackfs so that Smack can be conventional.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     
  • The components NETLABEL and SECURITY_NETWORK are required by
    Smack. Using "depends" in Kconfig hides the Smack option
    if the user hasn't figured out that they need to be enabled
    while using make menuconfig. Using select is a better choice.
    Because select is not recursive depends on NET and SECURITY
    are added. The reflects similar usage in TOMOYO and AppArmor.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     

12 Oct, 2012

1 commit


19 Sep, 2012

3 commits

  • The data structure allocations being done in prepare_creds
    are duplicated in smack_setprocattr. This results in the
    structure allocated in prepare_creds being orphaned and
    never freed. The duplicate code is removed from
    smack_setprocattr.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Casey Schaufler

    Casey Schaufler
     
  • Add /smack/revoke-subject special file. Writing a SMACK label to this file will
    set the access to '-' for all access rules with that subject label.

    Targeted for git://git.gitorious.org/smack-next/kernel.git

    Signed-off-by: Rafal Krypa

    Rafal Krypa
     
  • On 12/20/2011 11:20 PM, Jarkko Sakkinen wrote:
    > Allow SIGCHLD to be passed to child process without
    > explicit policy. This will help to keep the access
    > control policy simple and easily maintainable with
    > complex applications that require use of multiple
    > security contexts. It will also help to keep them
    > as isolated as possible.
    >
    > Signed-off-by: Jarkko Sakkinen

    I have a slightly different version that applies to the
    current smack-next tree.

    Allow SIGCHLD to be passed to child process without
    explicit policy. This will help to keep the access
    control policy simple and easily maintainable with
    complex applications that require use of multiple
    security contexts. It will also help to keep them
    as isolated as possible.

    Signed-off-by: Casey Schaufler

    security/smack/smack_lsm.c | 37 ++++++++-----------------------------
    1 files changed, 8 insertions(+), 29 deletions(-)

    Casey Schaufler
     

30 Jul, 2012

1 commit

  • Consider the input case of a rule that consists entirely of non space
    symbols followed by a \0. Say 64 + \0

    In this case strlen(data) = 64
    kzalloc of subject and object are 64 byte objects
    sscanfdata, "%s %s %s", subject, ...)

    will put 65 bytes into subject.

    Signed-off-by: Alan Cox
    Acked-by: Casey Schaufler
    Cc: stable@vger.kernel.org
    Signed-off-by: James Morris

    Alan Cox