staticint __init init_task_dexcr(void)
{ if (!early_cpu_has_feature(CPU_FTR_ARCH_31)) return 0;
current->thread.dexcr_onexec = mfspr(SPRN_DEXCR);
return 0;
}
early_initcall(init_task_dexcr)
/* Allow thread local configuration of these by default */ #define DEXCR_PRCTL_EDITABLE ( \
DEXCR_PR_IBRTPD | \
DEXCR_PR_SRAPD | \
DEXCR_PR_NPHIE)
staticint prctl_to_aspect(unsignedlong which, unsignedint *aspect)
{ switch (which) { case PR_PPC_DEXCR_SBHE:
*aspect = DEXCR_PR_SBHE; break; case PR_PPC_DEXCR_IBRTPD:
*aspect = DEXCR_PR_IBRTPD; break; case PR_PPC_DEXCR_SRAPD:
*aspect = DEXCR_PR_SRAPD; break; case PR_PPC_DEXCR_NPHIE:
*aspect = DEXCR_PR_NPHIE; break; default: return -ENODEV;
}
return 0;
}
int get_dexcr_prctl(struct task_struct *task, unsignedlong which)
{ unsignedint aspect; int ret;
ret = prctl_to_aspect(which, &aspect); if (ret) return ret;
if (aspect & DEXCR_PRCTL_EDITABLE)
ret |= PR_PPC_DEXCR_CTRL_EDITABLE;
if (aspect & mfspr(SPRN_DEXCR))
ret |= PR_PPC_DEXCR_CTRL_SET; else
ret |= PR_PPC_DEXCR_CTRL_CLEAR;
if (aspect & task->thread.dexcr_onexec)
ret |= PR_PPC_DEXCR_CTRL_SET_ONEXEC; else
ret |= PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC;
return ret;
}
int set_dexcr_prctl(struct task_struct *task, unsignedlong which, unsignedlong ctrl)
{ unsignedlong dexcr; unsignedint aspect; int err = 0;
err = prctl_to_aspect(which, &aspect); if (err) return err;
if (!(aspect & DEXCR_PRCTL_EDITABLE)) return -EPERM;
if (ctrl & ~PR_PPC_DEXCR_CTRL_MASK) return -EINVAL;
if (ctrl & PR_PPC_DEXCR_CTRL_SET && ctrl & PR_PPC_DEXCR_CTRL_CLEAR) return -EINVAL;
if (ctrl & PR_PPC_DEXCR_CTRL_SET_ONEXEC && ctrl & PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC) return -EINVAL;
/* * We do not want an unprivileged process being able to disable * a setuid process's hash check instructions
*/ if (aspect == DEXCR_PR_NPHIE &&
ctrl & PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC &&
!capable(CAP_SYS_ADMIN)) return -EPERM;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.