Loading security/selinux/ss/context.h +23 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,29 @@ out: return rc; } /* * Sets both levels in the MLS range of 'dst' to the low level of 'src'. */ static inline int mls_context_cpy_low(struct context *dst, struct context *src) { int rc; if (!selinux_mls_enabled) return 0; dst->range.level[0].sens = src->range.level[0].sens; rc = ebitmap_cpy(&dst->range.level[0].cat, &src->range.level[0].cat); if (rc) goto out; dst->range.level[1].sens = src->range.level[0].sens; rc = ebitmap_cpy(&dst->range.level[1].cat, &src->range.level[0].cat); if (rc) ebitmap_destroy(&dst->range.level[0].cat); out: return rc; } static inline int mls_context_cmp(struct context *c1, struct context *c2) { if (!selinux_mls_enabled) Loading security/selinux/ss/mls.c +5 −25 Original line number Diff line number Diff line Loading @@ -270,7 +270,7 @@ int mls_context_to_sid(char oldc, if (!defcon) goto out; rc = mls_copy_context(context, defcon); rc = mls_context_cpy(context, defcon); goto out; } Loading Loading @@ -400,26 +400,6 @@ int mls_from_string(char *str, struct context *context, gfp_t gfp_mask) return rc; } /* * Copies the effective MLS range from `src' into `dst'. */ static inline int mls_scopy_context(struct context *dst, struct context *src) { int l, rc = 0; /* Copy the MLS range from the source context */ for (l = 0; l < 2; l++) { dst->range.level[l].sens = src->range.level[0].sens; rc = ebitmap_cpy(&dst->range.level[l].cat, &src->range.level[0].cat); if (rc) break; } return rc; } /* * Copies the MLS range `range' into `context'. */ Loading Loading @@ -552,19 +532,19 @@ int mls_compute_sid(struct context *scontext, case AVTAB_CHANGE: if (tclass == SECCLASS_PROCESS) /* Use the process MLS attributes. */ return mls_copy_context(newcontext, scontext); return mls_context_cpy(newcontext, scontext); else /* Use the process effective MLS attributes. */ return mls_scopy_context(newcontext, scontext); return mls_context_cpy_low(newcontext, scontext); case AVTAB_MEMBER: /* Only polyinstantiate the MLS attributes if the type is being polyinstantiated */ if (newcontext->type != tcontext->type) { /* Use the process effective MLS attributes. */ return mls_scopy_context(newcontext, scontext); return mls_context_cpy_low(newcontext, scontext); } else { /* Use the related object MLS attributes. */ return mls_copy_context(newcontext, tcontext); return mls_context_cpy(newcontext, tcontext); } default: return -EINVAL; Loading security/selinux/ss/mls.h +0 −20 Original line number Diff line number Diff line Loading @@ -24,26 +24,6 @@ #include "context.h" #include "policydb.h" /* * Copies the MLS range from `src' into `dst'. */ static inline int mls_copy_context(struct context *dst, struct context *src) { int l, rc = 0; /* Copy the MLS range from the source context */ for (l = 0; l < 2; l++) { dst->range.level[l].sens = src->range.level[l].sens; rc = ebitmap_cpy(&dst->range.level[l].cat, &src->range.level[l].cat); if (rc) break; } return rc; } int mls_compute_context_len(struct context *context); void mls_sid_to_context(struct context *context, char **scontext); int mls_context_isvalid(struct policydb *p, struct context *c); Loading security/selinux/ss/services.c +1 −2 Original line number Diff line number Diff line Loading @@ -1916,11 +1916,10 @@ int security_sid_mls_copy(u32 sid, u32 mls_sid, u32 *new_sid) newcon.user = context1->user; newcon.role = context1->role; newcon.type = context1->type; rc = mls_copy_context(&newcon, context2); rc = mls_context_cpy(&newcon, context2); if (rc) goto out_unlock; /* Check the validity of the new context. */ if (!policydb_context_isvalid(&policydb, &newcon)) { rc = convert_context_handle_invalid_context(&newcon); Loading Loading
security/selinux/ss/context.h +23 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,29 @@ out: return rc; } /* * Sets both levels in the MLS range of 'dst' to the low level of 'src'. */ static inline int mls_context_cpy_low(struct context *dst, struct context *src) { int rc; if (!selinux_mls_enabled) return 0; dst->range.level[0].sens = src->range.level[0].sens; rc = ebitmap_cpy(&dst->range.level[0].cat, &src->range.level[0].cat); if (rc) goto out; dst->range.level[1].sens = src->range.level[0].sens; rc = ebitmap_cpy(&dst->range.level[1].cat, &src->range.level[0].cat); if (rc) ebitmap_destroy(&dst->range.level[0].cat); out: return rc; } static inline int mls_context_cmp(struct context *c1, struct context *c2) { if (!selinux_mls_enabled) Loading
security/selinux/ss/mls.c +5 −25 Original line number Diff line number Diff line Loading @@ -270,7 +270,7 @@ int mls_context_to_sid(char oldc, if (!defcon) goto out; rc = mls_copy_context(context, defcon); rc = mls_context_cpy(context, defcon); goto out; } Loading Loading @@ -400,26 +400,6 @@ int mls_from_string(char *str, struct context *context, gfp_t gfp_mask) return rc; } /* * Copies the effective MLS range from `src' into `dst'. */ static inline int mls_scopy_context(struct context *dst, struct context *src) { int l, rc = 0; /* Copy the MLS range from the source context */ for (l = 0; l < 2; l++) { dst->range.level[l].sens = src->range.level[0].sens; rc = ebitmap_cpy(&dst->range.level[l].cat, &src->range.level[0].cat); if (rc) break; } return rc; } /* * Copies the MLS range `range' into `context'. */ Loading Loading @@ -552,19 +532,19 @@ int mls_compute_sid(struct context *scontext, case AVTAB_CHANGE: if (tclass == SECCLASS_PROCESS) /* Use the process MLS attributes. */ return mls_copy_context(newcontext, scontext); return mls_context_cpy(newcontext, scontext); else /* Use the process effective MLS attributes. */ return mls_scopy_context(newcontext, scontext); return mls_context_cpy_low(newcontext, scontext); case AVTAB_MEMBER: /* Only polyinstantiate the MLS attributes if the type is being polyinstantiated */ if (newcontext->type != tcontext->type) { /* Use the process effective MLS attributes. */ return mls_scopy_context(newcontext, scontext); return mls_context_cpy_low(newcontext, scontext); } else { /* Use the related object MLS attributes. */ return mls_copy_context(newcontext, tcontext); return mls_context_cpy(newcontext, tcontext); } default: return -EINVAL; Loading
security/selinux/ss/mls.h +0 −20 Original line number Diff line number Diff line Loading @@ -24,26 +24,6 @@ #include "context.h" #include "policydb.h" /* * Copies the MLS range from `src' into `dst'. */ static inline int mls_copy_context(struct context *dst, struct context *src) { int l, rc = 0; /* Copy the MLS range from the source context */ for (l = 0; l < 2; l++) { dst->range.level[l].sens = src->range.level[l].sens; rc = ebitmap_cpy(&dst->range.level[l].cat, &src->range.level[l].cat); if (rc) break; } return rc; } int mls_compute_context_len(struct context *context); void mls_sid_to_context(struct context *context, char **scontext); int mls_context_isvalid(struct policydb *p, struct context *c); Loading
security/selinux/ss/services.c +1 −2 Original line number Diff line number Diff line Loading @@ -1916,11 +1916,10 @@ int security_sid_mls_copy(u32 sid, u32 mls_sid, u32 *new_sid) newcon.user = context1->user; newcon.role = context1->role; newcon.type = context1->type; rc = mls_copy_context(&newcon, context2); rc = mls_context_cpy(&newcon, context2); if (rc) goto out_unlock; /* Check the validity of the new context. */ if (!policydb_context_isvalid(&policydb, &newcon)) { rc = convert_context_handle_invalid_context(&newcon); Loading