summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/linprocfs/linprocfs.c10
-rw-r--r--sys/compat/linprocfs/linprocfs_misc.c10
-rw-r--r--sys/compat/linprocfs/linprocfs_vnops.c2
-rw-r--r--sys/compat/linux/linux_misc.c24
-rw-r--r--sys/compat/svr4/svr4_misc.c11
-rw-r--r--sys/compat/svr4/svr4_sysvec.c8
6 files changed, 31 insertions, 34 deletions
diff --git a/sys/compat/linprocfs/linprocfs.c b/sys/compat/linprocfs/linprocfs.c
index 6a356fb..04858f7 100644
--- a/sys/compat/linprocfs/linprocfs.c
+++ b/sys/compat/linprocfs/linprocfs.c
@@ -478,14 +478,14 @@ linprocfs_doprocstatus(curp, p, pfs, uio)
PROC_LOCK(p);
sbuf_printf(&sb, "PPid:\t%d\n", p->p_pptr ?
p->p_pptr->p_pid : 0);
- sbuf_printf(&sb, "Uid:\t%d %d %d %d\n", p->p_cred->p_ruid,
+ sbuf_printf(&sb, "Uid:\t%d %d %d %d\n", p->p_ucred->cr_ruid,
p->p_ucred->cr_uid,
- p->p_cred->p_svuid,
+ p->p_ucred->cr_svuid,
/* FreeBSD doesn't have fsuid */
p->p_ucred->cr_uid);
- sbuf_printf(&sb, "Gid:\t%d %d %d %d\n", p->p_cred->p_rgid,
+ sbuf_printf(&sb, "Gid:\t%d %d %d %d\n", p->p_ucred->cr_rgid,
p->p_ucred->cr_gid,
- p->p_cred->p_svgid,
+ p->p_ucred->cr_svgid,
/* FreeBSD doesn't have fsgid */
p->p_ucred->cr_gid);
sbuf_cat(&sb, "Groups:\t");
@@ -577,7 +577,7 @@ linprocfs_doexelink(curp, p, pfs, uio)
char *freepath = NULL;
p = PFIND(pfs->pfs_pid);
- if (p == NULL || p->p_cred == NULL || p->p_ucred == NULL) {
+ if (p == NULL || p->p_ucred == NULL) {
if (p != NULL)
PROC_UNLOCK(p);
printf("doexelink: pid %d disappeared\n", pfs->pfs_pid);
diff --git a/sys/compat/linprocfs/linprocfs_misc.c b/sys/compat/linprocfs/linprocfs_misc.c
index 6a356fb..04858f7 100644
--- a/sys/compat/linprocfs/linprocfs_misc.c
+++ b/sys/compat/linprocfs/linprocfs_misc.c
@@ -478,14 +478,14 @@ linprocfs_doprocstatus(curp, p, pfs, uio)
PROC_LOCK(p);
sbuf_printf(&sb, "PPid:\t%d\n", p->p_pptr ?
p->p_pptr->p_pid : 0);
- sbuf_printf(&sb, "Uid:\t%d %d %d %d\n", p->p_cred->p_ruid,
+ sbuf_printf(&sb, "Uid:\t%d %d %d %d\n", p->p_ucred->cr_ruid,
p->p_ucred->cr_uid,
- p->p_cred->p_svuid,
+ p->p_ucred->cr_svuid,
/* FreeBSD doesn't have fsuid */
p->p_ucred->cr_uid);
- sbuf_printf(&sb, "Gid:\t%d %d %d %d\n", p->p_cred->p_rgid,
+ sbuf_printf(&sb, "Gid:\t%d %d %d %d\n", p->p_ucred->cr_rgid,
p->p_ucred->cr_gid,
- p->p_cred->p_svgid,
+ p->p_ucred->cr_svgid,
/* FreeBSD doesn't have fsgid */
p->p_ucred->cr_gid);
sbuf_cat(&sb, "Groups:\t");
@@ -577,7 +577,7 @@ linprocfs_doexelink(curp, p, pfs, uio)
char *freepath = NULL;
p = PFIND(pfs->pfs_pid);
- if (p == NULL || p->p_cred == NULL || p->p_ucred == NULL) {
+ if (p == NULL || p->p_ucred == NULL) {
if (p != NULL)
PROC_UNLOCK(p);
printf("doexelink: pid %d disappeared\n", pfs->pfs_pid);
diff --git a/sys/compat/linprocfs/linprocfs_vnops.c b/sys/compat/linprocfs/linprocfs_vnops.c
index 2bb824e..08a5023 100644
--- a/sys/compat/linprocfs/linprocfs_vnops.c
+++ b/sys/compat/linprocfs/linprocfs_vnops.c
@@ -433,7 +433,7 @@ linprocfs_getattr(ap)
procp = PFIND(pfs->pfs_pid);
if (procp == NULL)
return (ENOENT);
- if (procp->p_cred == NULL || procp->p_ucred == NULL) {
+ if (procp->p_ucred == NULL) {
PROC_UNLOCK(procp);
return (ENOENT);
}
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c
index 2c7c9b5..64200b1 100644
--- a/sys/compat/linux/linux_misc.c
+++ b/sys/compat/linux/linux_misc.c
@@ -958,13 +958,13 @@ linux_setgroups(p, uap)
struct proc *p;
struct linux_setgroups_args *uap;
{
- struct pcred *pc;
+ struct ucred *newcred, *oldcred;
linux_gid_t linux_gidset[NGROUPS];
gid_t *bsd_gidset;
int ngrp, error;
- pc = p->p_cred;
ngrp = uap->gidsetsize;
+ oldcred = p->p_ucred;
/*
* cr_groups[0] holds egid. Setting the whole set from
@@ -972,22 +972,22 @@ linux_setgroups(p, uap)
* Keep cr_groups[0] unchanged to prevent that.
*/
- if ((error = suser_xxx(NULL, p, PRISON_ROOT)) != 0)
+ if ((error = suser_xxx(oldcred, NULL, PRISON_ROOT)) != 0)
return (error);
if (ngrp >= NGROUPS)
return (EINVAL);
- pc->pc_ucred = crcopy(pc->pc_ucred);
+ newcred = crdup(oldcred);
if (ngrp > 0) {
error = copyin((caddr_t)uap->gidset, (caddr_t)linux_gidset,
ngrp * sizeof(linux_gid_t));
if (error)
return (error);
- pc->pc_ucred->cr_ngroups = ngrp + 1;
+ newcred->cr_ngroups = ngrp + 1;
- bsd_gidset = pc->pc_ucred->cr_groups;
+ bsd_gidset = newcred->cr_groups;
ngrp--;
while (ngrp >= 0) {
bsd_gidset[ngrp + 1] = linux_gidset[ngrp];
@@ -995,9 +995,11 @@ linux_setgroups(p, uap)
}
}
else
- pc->pc_ucred->cr_ngroups = 1;
+ newcred->cr_ngroups = 1;
setsugid(p);
+ p->p_ucred = newcred;
+ crfree(oldcred);
return (0);
}
@@ -1006,14 +1008,14 @@ linux_getgroups(p, uap)
struct proc *p;
struct linux_getgroups_args *uap;
{
- struct pcred *pc;
+ struct ucred *cred;
linux_gid_t linux_gidset[NGROUPS];
gid_t *bsd_gidset;
int bsd_gidsetsz, ngrp, error;
- pc = p->p_cred;
- bsd_gidset = pc->pc_ucred->cr_groups;
- bsd_gidsetsz = pc->pc_ucred->cr_ngroups - 1;
+ cred = p->p_ucred;
+ bsd_gidset = cred->cr_groups;
+ bsd_gidsetsz = cred->cr_ngroups - 1;
/*
* cr_groups[0] holds egid. Returning the whole set
diff --git a/sys/compat/svr4/svr4_misc.c b/sys/compat/svr4/svr4_misc.c
index 1baed66..a92e8a4 100644
--- a/sys/compat/svr4/svr4_misc.c
+++ b/sys/compat/svr4/svr4_misc.c
@@ -1283,7 +1283,7 @@ loop:
/*
* Decrement the count of procs running with this uid.
*/
- (void)chgproccnt(q->p_cred->p_uidinfo, -1, 0);
+ (void)chgproccnt(q->p_ucred->cr_ruidinfo, -1, 0);
/*
* Release reference to text vnode.
@@ -1294,13 +1294,8 @@ loop:
/*
* Free up credentials.
*/
- PROC_LOCK(q);
- if (--q->p_cred->p_refcnt == 0) {
- crfree(q->p_ucred);
- uifree(q->p_cred->p_uidinfo);
- FREE(q->p_cred, M_SUBPROC);
- q->p_cred = NULL;
- }
+ crfree(q->p_ucred);
+ q->p_ucred = NULL;
/*
* Remove unused arguments
diff --git a/sys/compat/svr4/svr4_sysvec.c b/sys/compat/svr4/svr4_sysvec.c
index 912cd2a..9137e0c 100644
--- a/sys/compat/svr4/svr4_sysvec.c
+++ b/sys/compat/svr4/svr4_sysvec.c
@@ -213,10 +213,10 @@ svr4_fixup(register_t **stack_base, struct image_params *imgp)
AUXARGS_ENTRY(pos, AT_FLAGS, args->flags);
AUXARGS_ENTRY(pos, AT_ENTRY, args->entry);
AUXARGS_ENTRY(pos, AT_BASE, args->base);
- AUXARGS_ENTRY(pos, AT_UID, imgp->proc->p_cred->p_ruid);
- AUXARGS_ENTRY(pos, AT_EUID, imgp->proc->p_cred->p_svuid);
- AUXARGS_ENTRY(pos, AT_GID, imgp->proc->p_cred->p_rgid);
- AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_cred->p_svgid);
+ AUXARGS_ENTRY(pos, AT_UID, imgp->proc->p_ucred->cr_ruid);
+ AUXARGS_ENTRY(pos, AT_EUID, imgp->proc->p_ucred->cr_svuid);
+ AUXARGS_ENTRY(pos, AT_GID, imgp->proc->p_ucred->cr_rgid);
+ AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_ucred->cr_svgid);
AUXARGS_ENTRY(pos, AT_NULL, 0);
free(imgp->auxargs, M_TEMP);
OpenPOWER on IntegriCloud