2006-05-13 10:18:27 +04:00
/*
* JFFS2 - - Journalling Flash File System , Version 2.
2006-05-13 10:09:47 +04:00
*
2007-04-25 17:16:47 +04:00
* Copyright © 2006 NEC Corporation
2006-05-13 10:09:47 +04:00
*
2006-05-13 10:18:27 +04:00
* Created by KaiGai Kohei < kaigai @ ak . jp . nec . com >
*
* For licensing information , see the file ' LICENCE ' in this directory .
*
*/
2007-04-25 17:16:47 +04:00
2006-05-13 10:09:47 +04:00
# include <linux/kernel.h>
# include <linux/slab.h>
# include <linux/fs.h>
# include <linux/time.h>
# include <linux/pagemap.h>
# include <linux/highmem.h>
# include <linux/crc32.h>
# include <linux/jffs2.h>
# include <linux/xattr.h>
# include <linux/mtd/mtd.h>
# include <linux/security.h>
# include "nodelist.h"
2011-06-06 23:29:25 +04:00
/* ---- Initial Security Label(s) Attachment callback --- */
2012-02-19 22:51:42 +04:00
static int jffs2_initxattrs ( struct inode * inode ,
const struct xattr * xattr_array , void * fs_info )
2006-05-13 10:09:47 +04:00
{
2011-06-06 23:29:25 +04:00
const struct xattr * xattr ;
int err = 0 ;
2006-05-13 10:09:47 +04:00
2011-06-06 23:29:25 +04:00
for ( xattr = xattr_array ; xattr - > name ! = NULL ; xattr + + ) {
err = do_jffs2_setxattr ( inode , JFFS2_XPREFIX_SECURITY ,
xattr - > name , xattr - > value ,
xattr - > value_len , 0 ) ;
if ( err < 0 )
break ;
2006-05-13 10:09:47 +04:00
}
2011-06-06 23:29:25 +04:00
return err ;
}
2006-05-13 10:09:47 +04:00
2011-06-06 23:29:25 +04:00
/* ---- Initial Security Label(s) Attachment ----------- */
int jffs2_init_security ( struct inode * inode , struct inode * dir ,
const struct qstr * qstr )
{
return security_inode_init_security ( inode , dir , qstr ,
& jffs2_initxattrs , NULL ) ;
2006-05-13 10:09:47 +04:00
}
/* ---- XATTR Handler for "security.*" ----------------- */
2015-10-04 20:18:51 +03:00
static int jffs2_security_getxattr ( const struct xattr_handler * handler ,
2016-04-11 03:48:24 +03:00
struct dentry * unused , struct inode * inode ,
const char * name , void * buffer , size_t size )
2006-05-13 10:09:47 +04:00
{
2016-04-11 03:48:24 +03:00
return do_jffs2_getxattr ( inode , JFFS2_XPREFIX_SECURITY ,
2009-11-13 12:52:56 +03:00
name , buffer , size ) ;
2006-05-13 10:09:47 +04:00
}
2015-10-04 20:18:51 +03:00
static int jffs2_security_setxattr ( const struct xattr_handler * handler ,
2016-05-27 17:19:30 +03:00
struct dentry * unused , struct inode * inode ,
const char * name , const void * buffer ,
size_t size , int flags )
2006-05-13 10:09:47 +04:00
{
2016-05-27 17:19:30 +03:00
return do_jffs2_setxattr ( inode , JFFS2_XPREFIX_SECURITY ,
2009-11-13 12:52:56 +03:00
name , buffer , size , flags ) ;
2006-05-13 10:09:47 +04:00
}
2010-05-14 04:53:21 +04:00
const struct xattr_handler jffs2_security_xattr_handler = {
2006-05-13 10:09:47 +04:00
. prefix = XATTR_SECURITY_PREFIX ,
. set = jffs2_security_setxattr ,
. get = jffs2_security_getxattr
} ;