Page MenuHomeFreeBSD

D14173.id38901.diff
No OneTemporary

D14173.id38901.diff

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

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)

Event Timeline