LCOV - code coverage report
Current view: top level - lkbce/fs/ext2 - xattr_security.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 27 27 100.0 %
Date: 2017-01-25 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /*
       2             :  * linux/fs/ext2/xattr_security.c
       3             :  * Handler for storing security labels as extended attributes.
       4             :  */
       5             : 
       6             : #include <linux/module.h>
       7             : #include <linux/string.h>
       8             : #include <linux/fs.h>
       9             : #include <linux/ext2_fs.h>
      10             : #include <linux/security.h>
      11             : #include "xattr.h"
      12             : 
      13             : static size_t
      14             : ext2_xattr_security_list(struct dentry *dentry, char *list, size_t list_size,
      15             :                          const char *name, size_t name_len, int type)
      16             : {
      17           2 :         const int prefix_len = XATTR_SECURITY_PREFIX_LEN;
      18           2 :         const size_t total_len = prefix_len + name_len + 1;
      19             : 
      20           4 :         if (list && total_len <= list_size) {
      21           1 :                 memcpy(list, XATTR_SECURITY_PREFIX, prefix_len);
      22           1 :                 memcpy(list+prefix_len, name, name_len);
      23           1 :                 list[prefix_len + name_len] = '\0';
      24             :         }
      25           1 :         return total_len;
      26             : }
      27             : 
      28             : static int
      29             : ext2_xattr_security_get(struct dentry *dentry, const char *name,
      30             :                        void *buffer, size_t size, int type)
      31             : {
      32           4 :         if (strcmp(name, "") == 0)
      33           2 :                 return -EINVAL;
      34           4 :         return ext2_xattr_get(dentry->d_inode, EXT2_XATTR_INDEX_SECURITY, name,
      35             :                               buffer, size);
      36             : }
      37             : 
      38             : static int
      39             : ext2_xattr_security_set(struct dentry *dentry, const char *name,
      40             :                 const void *value, size_t size, int flags, int type)
      41             : {
      42           4 :         if (strcmp(name, "") == 0)
      43           2 :                 return -EINVAL;
      44           4 :         return ext2_xattr_set(dentry->d_inode, EXT2_XATTR_INDEX_SECURITY, name,
      45             :                               value, size, flags);
      46             : }
      47             : 
      48             : int
      49             : ext2_init_security(struct inode *inode, struct inode *dir)
      50             : {
      51          16 :         int err;
      52          16 :         size_t len;
      53          16 :         void *value;
      54          16 :         char *name;
      55             : 
      56          32 :         err = security_inode_init_security(inode, dir, &name, &value, &len);
      57          32 :         if (err) {
      58          32 :                 if (err == -EOPNOTSUPP)
      59          16 :                         return 0;
      60          16 :                 return err;
      61             :         }
      62          48 :         err = ext2_xattr_set(inode, EXT2_XATTR_INDEX_SECURITY,
      63             :                              name, value, len, 0);
      64          16 :         kfree(name);
      65          16 :         kfree(value);
      66          16 :         return err;
      67             : }
      68             : 
      69           1 : struct xattr_handler ext2_xattr_security_handler = {
      70             :         .prefix = XATTR_SECURITY_PREFIX,
      71             :         .list   = ext2_xattr_security_list,
      72             :         .get    = ext2_xattr_security_get,
      73             :         .set    = ext2_xattr_security_set,
      74             : };

Generated by: LCOV version 1.10