struct label *label;
label = mac_labelzone_alloc(MAC_WAITOK);
- if (label == NULL)
- return (NULL);
+ if (label == NULL) {
+ return NULL;
+ }
MAC_PERFORM(file_label_init, label);
- return (label);
+ return label;
}
void
mac_file_label_init(struct fileglob *fg)
{
-
fg->fg_label = mac_file_label_alloc();
}
static void
mac_file_label_free(struct label *label)
{
-
MAC_PERFORM(file_label_destroy, label);
mac_labelzone_free(label);
}
void
mac_file_label_associate(struct ucred *cred, struct fileglob *fg)
{
-
MAC_PERFORM(file_label_associate, cred, fg, fg->fg_label);
}
void
mac_file_label_destroy(struct fileglob *fg)
{
-
mac_file_label_free(fg->fg_label);
fg->fg_label = NULL;
}
int error;
MAC_CHECK(file_check_create, cred);
- return (error);
+ return error;
}
int
int error;
MAC_CHECK(file_check_dup, cred, fg, fg->fg_label, newfd);
- return (error);
+ return error;
}
int
int error;
MAC_CHECK(file_check_fcntl, cred, fg, fg->fg_label, cmd, arg);
- return (error);
+ return error;
}
int
-mac_file_check_ioctl(struct ucred *cred, struct fileglob *fg, u_int cmd)
+mac_file_check_ioctl(struct ucred *cred, struct fileglob *fg, u_long cmd)
{
int error;
MAC_CHECK(file_check_ioctl, cred, fg, fg->fg_label, cmd);
- return (error);
+ return error;
}
int
int error;
MAC_CHECK(file_check_inherit, cred, fg, fg->fg_label);
- return (error);
+ return error;
}
int
int error;
MAC_CHECK(file_check_receive, cred, fg, fg->fg_label);
- return (error);
+ return error;
}
int
int error;
MAC_CHECK(file_check_get_offset, cred, fg, fg->fg_label);
- return (error);
+ return error;
}
int
int error;
MAC_CHECK(file_check_change_offset, cred, fg, fg->fg_label);
- return (error);
+ return error;
}
-
+
int
mac_file_check_get(struct ucred *cred, struct fileglob *fg, char *elements,
- int len)
+ size_t len)
{
int error;
-
+
MAC_CHECK(file_check_get, cred, fg, elements, len);
- return (error);
+ return error;
}
int
mac_file_check_set(struct ucred *cred, struct fileglob *fg, char *buf,
- int buflen)
+ size_t buflen)
{
int error;
-
+
MAC_CHECK(file_check_set, cred, fg, buf, buflen);
- return (error);
+ return error;
}
int
struct flock *fl)
{
int error;
-
+
MAC_CHECK(file_check_lock, cred, fg, fg->fg_label, op, fl);
- return (error);
+ return error;
+}
+
+int
+mac_file_check_library_validation(struct proc *proc,
+ struct fileglob *fg, off_t slice_offset,
+ user_long_t error_message, size_t error_message_size)
+{
+ int error;
+
+ MAC_CHECK(file_check_library_validation, proc, fg, slice_offset, error_message, error_message_size);
+ return error;
}
/*
maxp = *maxprot;
MAC_CHECK(file_check_mmap, cred, fg, fg->fg_label, prot, flags, offset, &maxp);
- if ((maxp | *maxprot) != *maxprot)
+ if ((maxp | *maxprot) != *maxprot) {
panic("file_check_mmap increased max protections");
+ }
*maxprot = maxp;
- return (error);
+ return error;
}
void
*prot = result;
}
+
+void
+mac_file_notify_close(struct ucred *cred, struct fileglob *fg)
+{
+ MAC_PERFORM(file_notify_close, cred, fg, fg->fg_label, ((fg->fg_flag & FWASWRITTEN) ? 1 : 0));
+}
+
+
+/*
+ * fileglob XATTR helpers.
+ */
+
+int
+mac_file_setxattr(struct fileglob *fg, const char *name, char *buf, size_t len)
+{
+ struct vnode *vp = NULL;
+
+ if (!fg || FILEGLOB_DTYPE(fg) != DTYPE_VNODE) {
+ return EFTYPE;
+ }
+
+ vp = (struct vnode *)fg->fg_data;
+ return mac_vnop_setxattr(vp, name, buf, len);
+}
+
+int
+mac_file_getxattr(struct fileglob *fg, const char *name, char *buf, size_t len,
+ size_t *attrlen)
+{
+ struct vnode *vp = NULL;
+
+ if (!fg || FILEGLOB_DTYPE(fg) != DTYPE_VNODE) {
+ return EFTYPE;
+ }
+
+ vp = (struct vnode *)fg->fg_data;
+ return mac_vnop_getxattr(vp, name, buf, len, attrlen);
+}
+
+int
+mac_file_removexattr(struct fileglob *fg, const char *name)
+{
+ struct vnode *vp = NULL;
+
+ if (!fg || FILEGLOB_DTYPE(fg) != DTYPE_VNODE) {
+ return EFTYPE;
+ }
+
+ vp = (struct vnode *)fg->fg_data;
+ return mac_vnop_removexattr(vp, name);
+}