991991kern_jail_set (struct thread * td , struct uio * optuio , int flags )
992992{
993993 struct file * jfp_out ;
994- struct jaildesc * desc_in ;
995994 struct nameidata nd ;
996995#ifdef INET
997996 struct prison_ip * ip4 ;
@@ -1095,24 +1094,13 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags)
10951094 * descriptor's prison.
10961095 */
10971096 prison_free (mypr );
1098- error = jaildesc_find (td , jfd_in , & desc_in , & mypr ,
1099- NULL );
1097+ error = jaildesc_find (td , jfd_in , & mypr , NULL );
11001098 if (error != 0 ) {
11011099 vfs_opterror (opts , error == ENOENT ?
11021100 "descriptor to dead jail" :
11031101 "not a jail descriptor" );
11041102 goto done_errmsg ;
11051103 }
1106- /*
1107- * Check file permissions using the current
1108- * credentials, and operation permissions
1109- * using the descriptor's credentials.
1110- */
1111- error = vaccess (VREG , desc_in -> jd_mode , desc_in -> jd_uid ,
1112- desc_in -> jd_gid , VEXEC , td -> td_ucred );
1113- JAILDESC_UNLOCK (desc_in );
1114- if (error != 0 )
1115- goto done_free ;
11161104 if ((flags & JAIL_CREATE ) && mypr -> pr_childmax == 0 ) {
11171105 error = EPERM ;
11181106 goto done_free ;
@@ -1516,27 +1504,15 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags)
15161504 }
15171505 if (flags & JAIL_USE_DESC ) {
15181506 /* Get the jail from its descriptor. */
1519- error = jaildesc_find (td , jfd_in , & desc_in , & pr , & jdcred );
1507+ error = jaildesc_find (td , jfd_in , & pr , & jdcred );
15201508 if (error ) {
15211509 vfs_opterror (opts , error == ENOENT ?
15221510 "descriptor to dead jail" :
15231511 "not a jail descriptor" );
15241512 goto done_deref ;
15251513 }
15261514 drflags |= PD_DEREF ;
1527- /*
1528- * Check file permissions using the current credentials,
1529- * and operation permissions using the descriptor's
1530- * credentials.
1531- */
1532- error = vaccess (VREG , desc_in -> jd_mode , desc_in -> jd_uid ,
1533- desc_in -> jd_gid , VWRITE , td -> td_ucred );
1534- if (error == 0 && (flags & JAIL_ATTACH ))
1535- error = vaccess (VREG , desc_in -> jd_mode , desc_in -> jd_uid ,
1536- desc_in -> jd_gid , VEXEC , td -> td_ucred );
1537- JAILDESC_UNLOCK (desc_in );
1538- if (error == 0 )
1539- error = priv_check_cred (jdcred , PRIV_JAIL_SET );
1515+ error = priv_check_cred (jdcred , PRIV_JAIL_SET );
15401516 if (error == 0 && (flags & JAIL_ATTACH ))
15411517 error = priv_check_cred (jdcred , PRIV_JAIL_ATTACH );
15421518 crfree (jdcred );
@@ -2500,7 +2476,6 @@ kern_jail_get(struct thread *td, struct uio *optuio, int flags)
25002476{
25012477 struct bool_flags * bf ;
25022478 struct file * jfp_out ;
2503- struct jaildesc * desc_in ;
25042479 struct jailsys_flags * jsf ;
25052480 struct prison * pr , * mypr ;
25062481 struct vfsopt * opt ;
@@ -2547,19 +2522,14 @@ kern_jail_get(struct thread *td, struct uio *optuio, int flags)
25472522 }
25482523 if (flags & JAIL_USE_DESC ) {
25492524 /* Get the jail from its descriptor. */
2550- error = jaildesc_find (td , jfd_in , & desc_in , & pr , NULL );
2525+ error = jaildesc_find (td , jfd_in , & pr , NULL );
25512526 if (error ) {
25522527 vfs_opterror (opts , error == ENOENT ?
25532528 "descriptor to dead jail" :
25542529 "not a jail descriptor" );
25552530 goto done ;
25562531 }
25572532 drflags |= PD_DEREF ;
2558- error = vaccess (VREG , desc_in -> jd_mode , desc_in -> jd_uid ,
2559- desc_in -> jd_gid , VREAD , td -> td_ucred );
2560- JAILDESC_UNLOCK (desc_in );
2561- if (error != 0 )
2562- goto done ;
25632533 mtx_lock (& pr -> pr_mtx );
25642534 drflags |= PD_LOCKED ;
25652535 if (!(prison_isalive (pr ) || (flags & JAIL_DYING ))) {
@@ -2573,19 +2543,13 @@ kern_jail_get(struct thread *td, struct uio *optuio, int flags)
25732543 if (flags & JAIL_AT_DESC ) {
25742544 /* Look up jails based on the descriptor's prison. */
25752545 prison_free (mypr );
2576- error = jaildesc_find (td , jfd_in , & desc_in , & mypr ,
2577- NULL );
2546+ error = jaildesc_find (td , jfd_in , & mypr , NULL );
25782547 if (error != 0 ) {
25792548 vfs_opterror (opts , error == ENOENT ?
25802549 "descriptor to dead jail" :
25812550 "not a jail descriptor" );
25822551 goto done ;
25832552 }
2584- error = vaccess (VREG , desc_in -> jd_mode , desc_in -> jd_uid ,
2585- desc_in -> jd_gid , VEXEC , td -> td_ucred );
2586- JAILDESC_UNLOCK (desc_in );
2587- if (error != 0 )
2588- goto done ;
25892553 }
25902554 if (flags & (JAIL_GET_DESC | JAIL_OWN_DESC )) {
25912555 /* Allocate a jail descriptor to return later. */
@@ -2916,23 +2880,14 @@ sys_jail_remove(struct thread *td, struct jail_remove_args *uap)
29162880int
29172881sys_jail_remove_jd (struct thread * td , struct jail_remove_jd_args * uap )
29182882{
2919- struct jaildesc * jd ;
29202883 struct prison * pr ;
29212884 struct ucred * jdcred ;
29222885 int error ;
29232886
2924- error = jaildesc_find (td , uap -> fd , & jd , & pr , & jdcred );
2887+ error = jaildesc_find (td , uap -> fd , & pr , & jdcred );
29252888 if (error )
29262889 return (error );
2927- /*
2928- * Check file permissions using the current credentials, and
2929- * operation permissions using the descriptor's credentials.
2930- */
2931- error = vaccess (VREG , jd -> jd_mode , jd -> jd_uid , jd -> jd_gid , VWRITE ,
2932- td -> td_ucred );
2933- JAILDESC_UNLOCK (jd );
2934- if (error == 0 )
2935- error = priv_check_cred (jdcred , PRIV_JAIL_REMOVE );
2890+ error = priv_check_cred (jdcred , PRIV_JAIL_REMOVE );
29362891 crfree (jdcred );
29372892 if (error ) {
29382893 prison_free (pr );
@@ -3002,26 +2957,17 @@ sys_jail_attach(struct thread *td, struct jail_attach_args *uap)
30022957int
30032958sys_jail_attach_jd (struct thread * td , struct jail_attach_jd_args * uap )
30042959{
3005- struct jaildesc * jd ;
30062960 struct prison * pr ;
30072961 struct ucred * jdcred ;
30082962 int drflags , error ;
30092963
30102964 sx_slock (& allprison_lock );
30112965 drflags = PD_LIST_SLOCKED ;
3012- error = jaildesc_find (td , uap -> fd , & jd , & pr , & jdcred );
2966+ error = jaildesc_find (td , uap -> fd , & pr , & jdcred );
30132967 if (error )
30142968 goto fail ;
30152969 drflags |= PD_DEREF ;
3016- /*
3017- * Check file permissions using the current credentials, and
3018- * operation permissions using the descriptor's credentials.
3019- */
3020- error = vaccess (VREG , jd -> jd_mode , jd -> jd_uid , jd -> jd_gid , VEXEC ,
3021- td -> td_ucred );
3022- JAILDESC_UNLOCK (jd );
3023- if (error == 0 )
3024- error = priv_check_cred (jdcred , PRIV_JAIL_ATTACH );
2970+ error = priv_check_cred (jdcred , PRIV_JAIL_ATTACH );
30252971 crfree (jdcred );
30262972 if (error )
30272973 goto fail ;
0 commit comments