1aa98d7cfSKaiGai Kohei /*-------------------------------------------------------------------------* 2aa98d7cfSKaiGai Kohei * File: fs/jffs2/xattr_trusted.c 3aa98d7cfSKaiGai Kohei * XATTR support on JFFS2 FileSystem 4aa98d7cfSKaiGai Kohei * 5aa98d7cfSKaiGai Kohei * Implemented by KaiGai Kohei <kaigai@ak.jp.nec.com> 6aa98d7cfSKaiGai Kohei * Copyright (C) 2006 NEC Corporation 7aa98d7cfSKaiGai Kohei * 8aa98d7cfSKaiGai Kohei * For licensing information, see the file 'LICENCE' in the jffs2 directory. 9aa98d7cfSKaiGai Kohei *-------------------------------------------------------------------------*/ 10aa98d7cfSKaiGai Kohei #include <linux/kernel.h> 11aa98d7cfSKaiGai Kohei #include <linux/fs.h> 12aa98d7cfSKaiGai Kohei #include <linux/jffs2.h> 13aa98d7cfSKaiGai Kohei #include <linux/xattr.h> 14aa98d7cfSKaiGai Kohei #include <linux/mtd/mtd.h> 15aa98d7cfSKaiGai Kohei #include "nodelist.h" 16aa98d7cfSKaiGai Kohei 17aa98d7cfSKaiGai Kohei static int jffs2_trusted_getxattr(struct inode *inode, const char *name, 18aa98d7cfSKaiGai Kohei void *buffer, size_t size) 19aa98d7cfSKaiGai Kohei { 20aa98d7cfSKaiGai Kohei if (!strcmp(name, "")) 21aa98d7cfSKaiGai Kohei return -EINVAL; 22aa98d7cfSKaiGai Kohei return do_jffs2_getxattr(inode, JFFS2_XPREFIX_TRUSTED, name, buffer, size); 23aa98d7cfSKaiGai Kohei } 24aa98d7cfSKaiGai Kohei 25aa98d7cfSKaiGai Kohei static int jffs2_trusted_setxattr(struct inode *inode, const char *name, const void *buffer, 26aa98d7cfSKaiGai Kohei size_t size, int flags) 27aa98d7cfSKaiGai Kohei { 28aa98d7cfSKaiGai Kohei if (!strcmp(name, "")) 29aa98d7cfSKaiGai Kohei return -EINVAL; 30aa98d7cfSKaiGai Kohei return do_jffs2_setxattr(inode, JFFS2_XPREFIX_TRUSTED, name, buffer, size, flags); 31aa98d7cfSKaiGai Kohei } 32aa98d7cfSKaiGai Kohei 33aa98d7cfSKaiGai Kohei static size_t jffs2_trusted_listxattr(struct inode *inode, char *list, size_t list_size, 34aa98d7cfSKaiGai Kohei const char *name, size_t name_len) 35aa98d7cfSKaiGai Kohei { 36aa98d7cfSKaiGai Kohei size_t retlen = XATTR_TRUSTED_PREFIX_LEN + name_len + 1; 37aa98d7cfSKaiGai Kohei 38aa98d7cfSKaiGai Kohei if (list && retlen<=list_size) { 39aa98d7cfSKaiGai Kohei strcpy(list, XATTR_TRUSTED_PREFIX); 40aa98d7cfSKaiGai Kohei strcpy(list + XATTR_TRUSTED_PREFIX_LEN, name); 41aa98d7cfSKaiGai Kohei } 42aa98d7cfSKaiGai Kohei 43aa98d7cfSKaiGai Kohei return retlen; 44aa98d7cfSKaiGai Kohei } 45aa98d7cfSKaiGai Kohei 46aa98d7cfSKaiGai Kohei struct xattr_handler jffs2_trusted_xattr_handler = { 47aa98d7cfSKaiGai Kohei .prefix = XATTR_TRUSTED_PREFIX, 48aa98d7cfSKaiGai Kohei .list = jffs2_trusted_listxattr, 49aa98d7cfSKaiGai Kohei .set = jffs2_trusted_setxattr, 50aa98d7cfSKaiGai Kohei .get = jffs2_trusted_getxattr 51aa98d7cfSKaiGai Kohei }; 52