diff options
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/inode.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index 81a921165941..57c43ac47925 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/gfs2_ondisk.h> | 17 | #include <linux/gfs2_ondisk.h> |
18 | #include <linux/crc32.h> | 18 | #include <linux/crc32.h> |
19 | #include <linux/lm_interface.h> | 19 | #include <linux/lm_interface.h> |
20 | #include <linux/security.h> | ||
20 | 21 | ||
21 | #include "gfs2.h" | 22 | #include "gfs2.h" |
22 | #include "incore.h" | 23 | #include "incore.h" |
@@ -806,6 +807,39 @@ fail: | |||
806 | return error; | 807 | return error; |
807 | } | 808 | } |
808 | 809 | ||
810 | static int gfs2_security_init(struct gfs2_inode *dip, struct gfs2_inode *ip) | ||
811 | { | ||
812 | int err; | ||
813 | size_t len; | ||
814 | void *value; | ||
815 | char *name; | ||
816 | struct gfs2_ea_request er; | ||
817 | |||
818 | err = security_inode_init_security(&ip->i_inode, &dip->i_inode, | ||
819 | &name, &value, &len); | ||
820 | |||
821 | if (err) { | ||
822 | if (err == -EOPNOTSUPP) | ||
823 | return 0; | ||
824 | return err; | ||
825 | } | ||
826 | |||
827 | memset(&er, 0, sizeof(struct gfs2_ea_request)); | ||
828 | |||
829 | er.er_type = GFS2_EATYPE_SECURITY; | ||
830 | er.er_name = name; | ||
831 | er.er_data = value; | ||
832 | er.er_name_len = strlen(name); | ||
833 | er.er_data_len = len; | ||
834 | |||
835 | err = gfs2_ea_set_i(ip, &er); | ||
836 | |||
837 | kfree(value); | ||
838 | kfree(name); | ||
839 | |||
840 | return err; | ||
841 | } | ||
842 | |||
809 | /** | 843 | /** |
810 | * gfs2_createi - Create a new inode | 844 | * gfs2_createi - Create a new inode |
811 | * @ghs: An array of two holders | 845 | * @ghs: An array of two holders |
@@ -897,6 +931,10 @@ struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name, | |||
897 | if (error) | 931 | if (error) |
898 | goto fail_iput; | 932 | goto fail_iput; |
899 | 933 | ||
934 | error = gfs2_security_init(dip, GFS2_I(inode)); | ||
935 | if (error) | ||
936 | goto fail_iput; | ||
937 | |||
900 | error = link_dinode(dip, name, GFS2_I(inode)); | 938 | error = link_dinode(dip, name, GFS2_I(inode)); |
901 | if (error) | 939 | if (error) |
902 | goto fail_iput; | 940 | goto fail_iput; |