diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-20 17:50:31 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-20 17:50:31 -0400 |
commit | be967b7e2f7747a5ebf2a07ee627d9338491e784 (patch) | |
tree | f42b82601209a52b8ee478e36d8b21543ab03060 /fs/jffs2/security.c | |
parent | eef11427edcb821b63920219f89379fab84198b9 (diff) | |
parent | 7bc3312bef4d6f220812500c0de7868fb7625a41 (diff) |
Merge git://git.infradead.org/mtd-2.6
* git://git.infradead.org/mtd-2.6: (199 commits)
[MTD] NAND: Fix breakage all over the place
[PATCH] NAND: fix remaining OOB length calculation
[MTD] NAND Fixup NDFC merge brokeness
[MTD NAND] S3C2410 driver cleanup
[MTD NAND] s3c24x0 board: Fix clock handling, ensure proper initialisation.
[JFFS2] Check CRC32 on dirent and data nodes each time they're read
[JFFS2] When retiring nextblock, allocate a node_ref for the wasted space
[JFFS2] Mark XATTR support as experimental, for now
[JFFS2] Don't trust node headers before the CRC is checked.
[MTD] Restore MTD_ROM and MTD_RAM types
[MTD] assume mtd->writesize is 1 for NOR flashes
[MTD NAND] Fix s3c2410 NAND driver so it at least _looks_ like it compiles
[MTD] Prepare physmap for 64-bit-resources
[JFFS2] Fix more breakage caused by janitorial meddling.
[JFFS2] Remove stray __exit from jffs2_compressors_exit()
[MTD] Allow alternate JFFS2 mount variant for root filesystem.
[MTD] Disconnect struct mtd_info from ABI
[MTD] replace MTD_RAM with MTD_GENERIC_TYPE
[MTD] replace MTD_ROM with MTD_GENERIC_TYPE
[MTD] remove a forgotten MTD_XIP
...
Diffstat (limited to 'fs/jffs2/security.c')
-rw-r--r-- | fs/jffs2/security.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/fs/jffs2/security.c b/fs/jffs2/security.c new file mode 100644 index 000000000000..52a9894a6364 --- /dev/null +++ b/fs/jffs2/security.c | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | * JFFS2 -- Journalling Flash File System, Version 2. | ||
3 | * | ||
4 | * Copyright (C) 2006 NEC Corporation | ||
5 | * | ||
6 | * Created by KaiGai Kohei <kaigai@ak.jp.nec.com> | ||
7 | * | ||
8 | * For licensing information, see the file 'LICENCE' in this directory. | ||
9 | * | ||
10 | */ | ||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/slab.h> | ||
13 | #include <linux/fs.h> | ||
14 | #include <linux/time.h> | ||
15 | #include <linux/pagemap.h> | ||
16 | #include <linux/highmem.h> | ||
17 | #include <linux/crc32.h> | ||
18 | #include <linux/jffs2.h> | ||
19 | #include <linux/xattr.h> | ||
20 | #include <linux/mtd/mtd.h> | ||
21 | #include <linux/security.h> | ||
22 | #include "nodelist.h" | ||
23 | |||
24 | /* ---- Initial Security Label Attachment -------------- */ | ||
25 | int jffs2_init_security(struct inode *inode, struct inode *dir) | ||
26 | { | ||
27 | int rc; | ||
28 | size_t len; | ||
29 | void *value; | ||
30 | char *name; | ||
31 | |||
32 | rc = security_inode_init_security(inode, dir, &name, &value, &len); | ||
33 | if (rc) { | ||
34 | if (rc == -EOPNOTSUPP) | ||
35 | return 0; | ||
36 | return rc; | ||
37 | } | ||
38 | rc = do_jffs2_setxattr(inode, JFFS2_XPREFIX_SECURITY, name, value, len, 0); | ||
39 | |||
40 | kfree(name); | ||
41 | kfree(value); | ||
42 | return rc; | ||
43 | } | ||
44 | |||
45 | /* ---- XATTR Handler for "security.*" ----------------- */ | ||
46 | static int jffs2_security_getxattr(struct inode *inode, const char *name, | ||
47 | void *buffer, size_t size) | ||
48 | { | ||
49 | if (!strcmp(name, "")) | ||
50 | return -EINVAL; | ||
51 | |||
52 | return do_jffs2_getxattr(inode, JFFS2_XPREFIX_SECURITY, name, buffer, size); | ||
53 | } | ||
54 | |||
55 | static int jffs2_security_setxattr(struct inode *inode, const char *name, const void *buffer, | ||
56 | size_t size, int flags) | ||
57 | { | ||
58 | if (!strcmp(name, "")) | ||
59 | return -EINVAL; | ||
60 | |||
61 | return do_jffs2_setxattr(inode, JFFS2_XPREFIX_SECURITY, name, buffer, size, flags); | ||
62 | } | ||
63 | |||
64 | static size_t jffs2_security_listxattr(struct inode *inode, char *list, size_t list_size, | ||
65 | const char *name, size_t name_len) | ||
66 | { | ||
67 | size_t retlen = XATTR_SECURITY_PREFIX_LEN + name_len + 1; | ||
68 | |||
69 | if (list && retlen <= list_size) { | ||
70 | strcpy(list, XATTR_SECURITY_PREFIX); | ||
71 | strcpy(list + XATTR_SECURITY_PREFIX_LEN, name); | ||
72 | } | ||
73 | |||
74 | return retlen; | ||
75 | } | ||
76 | |||
77 | struct xattr_handler jffs2_security_xattr_handler = { | ||
78 | .prefix = XATTR_SECURITY_PREFIX, | ||
79 | .list = jffs2_security_listxattr, | ||
80 | .set = jffs2_security_setxattr, | ||
81 | .get = jffs2_security_getxattr | ||
82 | }; | ||