|
@@ -5640,6 +5640,53 @@ static size_t nfs4_xattr_list_nfs4_acl(struct dentry *dentry, char *list,
|
|
|
return len;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_NFS_V4_SECURITY_LABEL
|
|
|
+static inline int nfs4_server_supports_labels(struct nfs_server *server)
|
|
|
+{
|
|
|
+ return server->caps & NFS_CAP_SECURITY_LABEL;
|
|
|
+}
|
|
|
+
|
|
|
+static int nfs4_xattr_set_nfs4_label(struct dentry *dentry, const char *key,
|
|
|
+ const void *buf, size_t buflen,
|
|
|
+ int flags, int type)
|
|
|
+{
|
|
|
+ if (security_ismaclabel(key))
|
|
|
+ return nfs4_set_security_label(dentry, buf, buflen);
|
|
|
+
|
|
|
+ return -EOPNOTSUPP;
|
|
|
+}
|
|
|
+
|
|
|
+static int nfs4_xattr_get_nfs4_label(struct dentry *dentry, const char *key,
|
|
|
+ void *buf, size_t buflen, int type)
|
|
|
+{
|
|
|
+ if (security_ismaclabel(key))
|
|
|
+ return nfs4_get_security_label(dentry->d_inode, buf, buflen);
|
|
|
+ return -EOPNOTSUPP;
|
|
|
+}
|
|
|
+
|
|
|
+static size_t nfs4_xattr_list_nfs4_label(struct dentry *dentry, char *list,
|
|
|
+ size_t list_len, const char *name,
|
|
|
+ size_t name_len, int type)
|
|
|
+{
|
|
|
+ size_t len = 0;
|
|
|
+
|
|
|
+ if (nfs_server_capable(dentry->d_inode, NFS_CAP_SECURITY_LABEL)) {
|
|
|
+ len = security_inode_listsecurity(dentry->d_inode, NULL, 0);
|
|
|
+ if (list && len <= list_len)
|
|
|
+ security_inode_listsecurity(dentry->d_inode, list, len);
|
|
|
+ }
|
|
|
+ return len;
|
|
|
+}
|
|
|
+
|
|
|
+static const struct xattr_handler nfs4_xattr_nfs4_label_handler = {
|
|
|
+ .prefix = XATTR_SECURITY_PREFIX,
|
|
|
+ .list = nfs4_xattr_list_nfs4_label,
|
|
|
+ .get = nfs4_xattr_get_nfs4_label,
|
|
|
+ .set = nfs4_xattr_set_nfs4_label,
|
|
|
+};
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
/*
|
|
|
* nfs_fhget will use either the mounted_on_fileid or the fileid
|
|
|
*/
|
|
@@ -7468,6 +7515,9 @@ static const struct xattr_handler nfs4_xattr_nfs4_acl_handler = {
|
|
|
|
|
|
const struct xattr_handler *nfs4_xattr_handlers[] = {
|
|
|
&nfs4_xattr_nfs4_acl_handler,
|
|
|
+#ifdef CONFIG_NFS_V4_SECURITY_LABEL
|
|
|
+ &nfs4_xattr_nfs4_label_handler,
|
|
|
+#endif
|
|
|
NULL
|
|
|
};
|
|
|
|