hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/fs/ocfs2/xattr.c
....@@ -7261,8 +7261,20 @@
72617261 static int ocfs2_initxattrs(struct inode *inode, const struct xattr *xattr_array,
72627262 void *fs_info)
72637263 {
7264
+ struct ocfs2_security_xattr_info *si = fs_info;
72647265 const struct xattr *xattr;
72657266 int err = 0;
7267
+
7268
+ if (si) {
7269
+ si->value = kmemdup(xattr_array->value, xattr_array->value_len,
7270
+ GFP_KERNEL);
7271
+ if (!si->value)
7272
+ return -ENOMEM;
7273
+
7274
+ si->name = xattr_array->name;
7275
+ si->value_len = xattr_array->value_len;
7276
+ return 0;
7277
+ }
72667278
72677279 for (xattr = xattr_array; xattr->name != NULL; xattr++) {
72687280 err = ocfs2_xattr_set(inode, OCFS2_XATTR_INDEX_SECURITY,
....@@ -7279,13 +7291,23 @@
72797291 const struct qstr *qstr,
72807292 struct ocfs2_security_xattr_info *si)
72817293 {
7294
+ int ret;
7295
+
72827296 /* check whether ocfs2 support feature xattr */
72837297 if (!ocfs2_supports_xattr(OCFS2_SB(dir->i_sb)))
72847298 return -EOPNOTSUPP;
7285
- if (si)
7286
- return security_old_inode_init_security(inode, dir, qstr,
7287
- &si->name, &si->value,
7288
- &si->value_len);
7299
+ if (si) {
7300
+ ret = security_inode_init_security(inode, dir, qstr,
7301
+ &ocfs2_initxattrs, si);
7302
+ /*
7303
+ * security_inode_init_security() does not return -EOPNOTSUPP,
7304
+ * we have to check the xattr ourselves.
7305
+ */
7306
+ if (!ret && !si->name)
7307
+ si->enable = 0;
7308
+
7309
+ return ret;
7310
+ }
72897311
72907312 return security_inode_init_security(inode, dir, qstr,
72917313 &ocfs2_initxattrs, NULL);