Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F175586982
D14173.id38901.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D14173.id38901.diff
View Options
Index: head/sys/kern/vfs_extattr.c
===================================================================
--- head/sys/kern/vfs_extattr.c
+++ head/sys/kern/vfs_extattr.c
@@ -49,6 +49,17 @@
#include <security/audit/audit.h>
#include <security/mac/mac_framework.h>
+static int kern_extattr_set_path(struct thread *td, const char *path,
+ int attrnamespace, const char *attrname, void *data,
+ size_t nbytes, int follow);
+static int kern_extattr_get_path(struct thread *td, const char *path,
+ int attrnamespace, const char *attrname, void *data,
+ size_t nbytes, int follow);
+static int kern_extattr_delete_path(struct thread *td, const char *path,
+ int attrnamespace, const char *attrname, int follow);
+static int kern_extattr_list_path(struct thread *td, const char *path,
+ int attrnamespace, void *data, size_t nbytes, int follow);
+
/*
* Syscall to push extended attribute configuration information into the VFS.
* Accepts a path, which it converts to a mountpoint, as well as a command
@@ -255,28 +266,9 @@
int
sys_extattr_set_file(struct thread *td, struct extattr_set_file_args *uap)
{
- struct nameidata nd;
- char attrname[EXTATTR_MAXNAMELEN];
- int error;
- AUDIT_ARG_VALUE(uap->attrnamespace);
- error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL);
- if (error)
- return (error);
- AUDIT_ARG_TEXT(attrname);
-
- NDINIT(&nd, LOOKUP, FOLLOW | AUDITVNODE1, UIO_USERSPACE,
- uap->path, td);
- error = namei(&nd);
- if (error)
- return (error);
- NDFREE(&nd, NDF_ONLY_PNBUF);
-
- error = extattr_set_vp(nd.ni_vp, uap->attrnamespace, attrname,
- uap->data, uap->nbytes, td);
-
- vrele(nd.ni_vp);
- return (error);
+ return (kern_extattr_set_path(td, uap->path, uap->attrnamespace,
+ uap->attrname, uap->data, uap->nbytes, FOLLOW));
}
#ifndef _SYS_SYSPROTO_H_
@@ -291,25 +283,33 @@
int
sys_extattr_set_link(struct thread *td, struct extattr_set_link_args *uap)
{
+
+ return (kern_extattr_set_path(td, uap->path, uap->attrnamespace,
+ uap->attrname, uap->data, uap->nbytes, NOFOLLOW));
+}
+
+static int
+kern_extattr_set_path(struct thread *td, const char *path, int attrnamespace,
+ const char *uattrname, void *data, size_t nbytes, int follow)
+{
struct nameidata nd;
char attrname[EXTATTR_MAXNAMELEN];
int error;
- AUDIT_ARG_VALUE(uap->attrnamespace);
- error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL);
+ AUDIT_ARG_VALUE(attrnamespace);
+ error = copyinstr(uattrname, attrname, EXTATTR_MAXNAMELEN, NULL);
if (error)
return (error);
AUDIT_ARG_TEXT(attrname);
- NDINIT(&nd, LOOKUP, NOFOLLOW | AUDITVNODE1, UIO_USERSPACE,
- uap->path, td);
+ NDINIT(&nd, LOOKUP, follow | AUDITVNODE1, UIO_USERSPACE, path, td);
error = namei(&nd);
if (error)
return (error);
NDFREE(&nd, NDF_ONLY_PNBUF);
- error = extattr_set_vp(nd.ni_vp, uap->attrnamespace, attrname,
- uap->data, uap->nbytes, td);
+ error = extattr_set_vp(nd.ni_vp, attrnamespace, attrname, data,
+ nbytes, td);
vrele(nd.ni_vp);
return (error);
@@ -433,27 +433,8 @@
int
sys_extattr_get_file(struct thread *td, struct extattr_get_file_args *uap)
{
- struct nameidata nd;
- char attrname[EXTATTR_MAXNAMELEN];
- int error;
-
- AUDIT_ARG_VALUE(uap->attrnamespace);
- error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL);
- if (error)
- return (error);
- AUDIT_ARG_TEXT(attrname);
-
- NDINIT(&nd, LOOKUP, FOLLOW | AUDITVNODE1, UIO_USERSPACE, uap->path, td);
- error = namei(&nd);
- if (error)
- return (error);
- NDFREE(&nd, NDF_ONLY_PNBUF);
-
- error = extattr_get_vp(nd.ni_vp, uap->attrnamespace, attrname,
- uap->data, uap->nbytes, td);
-
- vrele(nd.ni_vp);
- return (error);
+ return (kern_extattr_get_path(td, uap->path, uap->attrnamespace,
+ uap->attrname, uap->data, uap->nbytes, FOLLOW));
}
#ifndef _SYS_SYSPROTO_H_
@@ -468,25 +449,32 @@
int
sys_extattr_get_link(struct thread *td, struct extattr_get_link_args *uap)
{
+ return (kern_extattr_get_path(td, uap->path, uap->attrnamespace,
+ uap->attrname, uap->data, uap->nbytes, NOFOLLOW));
+}
+
+static int
+kern_extattr_get_path(struct thread *td, const char *path, int attrnamespace,
+ const char *uattrname, void *data, size_t nbytes, int follow)
+{
struct nameidata nd;
char attrname[EXTATTR_MAXNAMELEN];
int error;
- AUDIT_ARG_VALUE(uap->attrnamespace);
- error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL);
+ AUDIT_ARG_VALUE(attrnamespace);
+ error = copyinstr(uattrname, attrname, EXTATTR_MAXNAMELEN, NULL);
if (error)
return (error);
AUDIT_ARG_TEXT(attrname);
- NDINIT(&nd, LOOKUP, NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, uap->path,
- td);
+ NDINIT(&nd, LOOKUP, follow | AUDITVNODE1, UIO_USERSPACE, path, td);
error = namei(&nd);
if (error)
return (error);
NDFREE(&nd, NDF_ONLY_PNBUF);
- error = extattr_get_vp(nd.ni_vp, uap->attrnamespace, attrname,
- uap->data, uap->nbytes, td);
+ error = extattr_get_vp(nd.ni_vp, attrnamespace, attrname, data,
+ nbytes, td);
vrele(nd.ni_vp);
return (error);
@@ -577,25 +565,9 @@
int
sys_extattr_delete_file(struct thread *td, struct extattr_delete_file_args *uap)
{
- struct nameidata nd;
- char attrname[EXTATTR_MAXNAMELEN];
- int error;
- AUDIT_ARG_VALUE(uap->attrnamespace);
- error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL);
- if (error)
- return(error);
- AUDIT_ARG_TEXT(attrname);
-
- NDINIT(&nd, LOOKUP, FOLLOW | AUDITVNODE1, UIO_USERSPACE, uap->path, td);
- error = namei(&nd);
- if (error)
- return(error);
- NDFREE(&nd, NDF_ONLY_PNBUF);
-
- error = extattr_delete_vp(nd.ni_vp, uap->attrnamespace, attrname, td);
- vrele(nd.ni_vp);
- return(error);
+ return (kern_extattr_delete_path(td, uap->path, uap->attrnamespace,
+ uap->attrname, FOLLOW));
}
#ifndef _SYS_SYSPROTO_H_
@@ -608,23 +580,32 @@
int
sys_extattr_delete_link(struct thread *td, struct extattr_delete_link_args *uap)
{
+
+ return (kern_extattr_delete_path(td, uap->path, uap->attrnamespace,
+ uap->attrname, NOFOLLOW));
+}
+
+static int
+kern_extattr_delete_path(struct thread *td, const char *path, int attrnamespace,
+ const char *uattrname, int follow)
+{
struct nameidata nd;
char attrname[EXTATTR_MAXNAMELEN];
int error;
- AUDIT_ARG_VALUE(uap->attrnamespace);
- error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL);
+ AUDIT_ARG_VALUE(attrnamespace);
+ error = copyinstr(uattrname, attrname, EXTATTR_MAXNAMELEN, NULL);
if (error)
return(error);
AUDIT_ARG_TEXT(attrname);
- NDINIT(&nd, LOOKUP, NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, uap->path, td);
+ NDINIT(&nd, LOOKUP, follow | AUDITVNODE1, UIO_USERSPACE, path, td);
error = namei(&nd);
if (error)
return(error);
NDFREE(&nd, NDF_ONLY_PNBUF);
- error = extattr_delete_vp(nd.ni_vp, uap->attrnamespace, attrname, td);
+ error = extattr_delete_vp(nd.ni_vp, attrnamespace, attrname, td);
vrele(nd.ni_vp);
return(error);
}
@@ -734,21 +715,9 @@
int
sys_extattr_list_file(struct thread *td, struct extattr_list_file_args *uap)
{
- struct nameidata nd;
- int error;
- AUDIT_ARG_VALUE(uap->attrnamespace);
- NDINIT(&nd, LOOKUP, FOLLOW | AUDITVNODE1, UIO_USERSPACE, uap->path, td);
- error = namei(&nd);
- if (error)
- return (error);
- NDFREE(&nd, NDF_ONLY_PNBUF);
-
- error = extattr_list_vp(nd.ni_vp, uap->attrnamespace, uap->data,
- uap->nbytes, td);
-
- vrele(nd.ni_vp);
- return (error);
+ return (kern_extattr_list_path(td, uap->path, uap->attrnamespace,
+ uap->data, uap->nbytes, FOLLOW));
}
#ifndef _SYS_SYSPROTO_H_
@@ -762,19 +731,26 @@
int
sys_extattr_list_link(struct thread *td, struct extattr_list_link_args *uap)
{
+
+ return (kern_extattr_list_path(td, uap->path, uap->attrnamespace,
+ uap->data, uap->nbytes, NOFOLLOW));
+}
+
+static int
+kern_extattr_list_path(struct thread *td, const char *path, int attrnamespace,
+ void *data, size_t nbytes, int follow)
+{
struct nameidata nd;
int error;
- AUDIT_ARG_VALUE(uap->attrnamespace);
- NDINIT(&nd, LOOKUP, NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, uap->path,
- td);
+ AUDIT_ARG_VALUE(attrnamespace);
+ NDINIT(&nd, LOOKUP, follow | AUDITVNODE1, UIO_USERSPACE, path, td);
error = namei(&nd);
if (error)
return (error);
NDFREE(&nd, NDF_ONLY_PNBUF);
- error = extattr_list_vp(nd.ni_vp, uap->attrnamespace, uap->data,
- uap->nbytes, td);
+ error = extattr_list_vp(nd.ni_vp, attrnamespace, data, nbytes, td);
vrele(nd.ni_vp);
return (error);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Oct 12, 8:57 PM (8 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40703357
Default Alt Text
D14173.id38901.diff (8 KB)
Attached To
Mode
D14173: Reduce duplication in extattr_*_(file|link) syscalls.
Attached
Detach File
Event Timeline
Log In to Comment