Blame view

fs/ext3/xattr_security.c 1.8 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
  /*
   * linux/fs/ext3/xattr_security.c
   * Handler for storing security labels as extended attributes.
   */
  
  #include <linux/module.h>
  #include <linux/string.h>
  #include <linux/fs.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
10
  #include <linux/ext3_jbd.h>
  #include <linux/ext3_fs.h>
ac50960af   Stephen Smalley   [PATCH] ext3: Ena...
11
  #include <linux/security.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12
13
14
15
16
17
  #include "xattr.h"
  
  static size_t
  ext3_xattr_security_list(struct inode *inode, char *list, size_t list_size,
  			 const char *name, size_t name_len)
  {
ef1afd395   Shen Feng   ext3: remove doub...
18
  	const size_t prefix_len = XATTR_SECURITY_PREFIX_LEN;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  	const size_t total_len = prefix_len + name_len + 1;
  
  
  	if (list && total_len <= list_size) {
  		memcpy(list, XATTR_SECURITY_PREFIX, prefix_len);
  		memcpy(list+prefix_len, name, name_len);
  		list[prefix_len + name_len] = '\0';
  	}
  	return total_len;
  }
  
  static int
  ext3_xattr_security_get(struct inode *inode, const char *name,
  		       void *buffer, size_t size)
  {
  	if (strcmp(name, "") == 0)
  		return -EINVAL;
  	return ext3_xattr_get(inode, EXT3_XATTR_INDEX_SECURITY, name,
  			      buffer, size);
  }
  
  static int
  ext3_xattr_security_set(struct inode *inode, const char *name,
  		       const void *value, size_t size, int flags)
  {
  	if (strcmp(name, "") == 0)
  		return -EINVAL;
  	return ext3_xattr_set(inode, EXT3_XATTR_INDEX_SECURITY, name,
  			      value, size, flags);
  }
ac50960af   Stephen Smalley   [PATCH] ext3: Ena...
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  int
  ext3_init_security(handle_t *handle, struct inode *inode, struct inode *dir)
  {
  	int err;
  	size_t len;
  	void *value;
  	char *name;
  
  	err = security_inode_init_security(inode, dir, &name, &value, &len);
  	if (err) {
  		if (err == -EOPNOTSUPP)
  			return 0;
  		return err;
  	}
  	err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY,
  				    name, value, len, 0);
  	kfree(name);
  	kfree(value);
  	return err;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
69
70
71
72
73
74
  struct xattr_handler ext3_xattr_security_handler = {
  	.prefix	= XATTR_SECURITY_PREFIX,
  	.list	= ext3_xattr_security_list,
  	.get	= ext3_xattr_security_get,
  	.set	= ext3_xattr_security_set,
  };