summaryrefslogtreecommitdiff
path: root/usr/src/lib/libproc/common
diff options
context:
space:
mode:
authorRoger A. Faulkner <Roger.Faulkner@Oracle.COM>2010-07-07 17:36:17 -0700
committerRoger A. Faulkner <Roger.Faulkner@Oracle.COM>2010-07-07 17:36:17 -0700
commit794f0adb050e571bbfde4d2a19b9f88b852079dd (patch)
treec1735b3eda175e9096f5b062a73614e73aa5cd9a /usr/src/lib/libproc/common
parent07925104db56e5c3eacc4865b918bd16af5cec59 (diff)
downloadillumos-gate-794f0adb050e571bbfde4d2a19b9f88b852079dd.tar.gz
PSARC 2010/235 POSIX 1003.1-2008 *at(2) syscalls
6910251 need support for all POSIX.1-2008 *at(2) syscalls 6964835 mknod(2) auditing omits the pathname for invalid arguments
Diffstat (limited to 'usr/src/lib/libproc/common')
-rw-r--r--usr/src/lib/libproc/common/pr_rename.c30
-rw-r--r--usr/src/lib/libproc/common/proc_names.c15
2 files changed, 32 insertions, 13 deletions
diff --git a/usr/src/lib/libproc/common/pr_rename.c b/usr/src/lib/libproc/common/pr_rename.c
index 7696188111..fe0a2847a4 100644
--- a/usr/src/lib/libproc/common/pr_rename.c
+++ b/usr/src/lib/libproc/common/pr_rename.c
@@ -20,8 +20,7 @@
*/
/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#include <stdlib.h>
@@ -88,20 +87,34 @@ int
pr_link(struct ps_prochandle *Pr, const char *existing, const char *new)
{
sysret_t rval;
- argdes_t argd[2];
+ argdes_t argd[5];
argdes_t *adp;
int error;
if (Pr == NULL)
return (link(existing, new));
- adp = &argd[0]; /* existing argument */
+ adp = &argd[0]; /* first directory fd argument */
+ adp->arg_value = AT_FDCWD;
+ adp->arg_object = NULL;
+ adp->arg_type = AT_BYVAL;
+ adp->arg_inout = AI_INPUT;
+ adp->arg_size = 0;
+
+ adp++; /* existing argument */
adp->arg_value = 0;
adp->arg_object = (void *)existing;
adp->arg_type = AT_BYREF;
adp->arg_inout = AI_INPUT;
adp->arg_size = strlen(existing) + 1;
+ adp++; /* second directory fd argument */
+ adp->arg_value = AT_FDCWD;
+ adp->arg_object = NULL;
+ adp->arg_type = AT_BYVAL;
+ adp->arg_inout = AI_INPUT;
+ adp->arg_size = 0;
+
adp++; /* new argument */
adp->arg_value = 0;
adp->arg_object = (void *)new;
@@ -109,7 +122,14 @@ pr_link(struct ps_prochandle *Pr, const char *existing, const char *new)
adp->arg_inout = AI_INPUT;
adp->arg_size = strlen(new) + 1;
- error = Psyscall(Pr, &rval, SYS_link, 2, &argd[0]);
+ adp++; /* flag argument */
+ adp->arg_value = 0;
+ adp->arg_object = NULL;
+ adp->arg_type = AT_BYVAL;
+ adp->arg_inout = AI_INPUT;
+ adp->arg_size = 0;
+
+ error = Psyscall(Pr, &rval, SYS_linkat, 5, &argd[0]);
if (error) {
errno = (error > 0) ? error : ENOSYS;
diff --git a/usr/src/lib/libproc/common/proc_names.c b/usr/src/lib/libproc/common/proc_names.c
index 96f58363c5..3b7d1e25bf 100644
--- a/usr/src/lib/libproc/common/proc_names.c
+++ b/usr/src/lib/libproc/common/proc_names.c
@@ -20,8 +20,7 @@
*/
/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#include <stdio.h>
@@ -121,11 +120,11 @@ static const char *const systable[] = {
"write", /* 4 */
"open", /* 5 */
"close", /* 6 */
- NULL, /* 7 */
+ "linkat", /* 7 */
NULL, /* 8 */
"link", /* 9 */
"unlink", /* 10 */
- NULL, /* 11 */
+ "symlinkat", /* 11 */
"chdir", /* 12 */
"time", /* 13 */
"mknod", /* 14 */
@@ -136,7 +135,7 @@ static const char *const systable[] = {
"lseek", /* 19 */
"getpid", /* 20 */
"mount", /* 21 */
- NULL, /* 22 */
+ "readlinkat", /* 22 */
"setuid", /* 23 */
"getuid", /* 24 */
"stime", /* 25 */
@@ -162,7 +161,7 @@ static const char *const systable[] = {
"faccessat", /* 45 */
"setgid", /* 46 */
"getgid", /* 47 */
- "signal", /* 48 */
+ "mknodat", /* 48 */
"msgsys", /* 49 */
"sysi86", /* 50 */
"acct", /* 51 */
@@ -215,8 +214,8 @@ static const char *const systable[] = {
"sigaction", /* 98 */
"sigpending", /* 99 */
"context", /* 100 */
- NULL, /* 101 */
- NULL, /* 102 */
+ "fchmodat", /* 101 */
+ "mkdirat", /* 102 */
"statvfs", /* 103 */
"fstatvfs", /* 104 */
"getloadavg", /* 105 */