Fragen? Antworten! Siehe auch: Alternativlos
OpenBSD lockt den falschen Prozeß, p. Sie sollten t locken, und zwar bevor sie copyin machen (das kann blocken, und in der Zeit kann der getracete Prozeß enden und so viele neue gestartet werden, daß einer von ihnen seine struct an der richtigen Stelle hat), und dann schreibt dieser Code die Register in den falschen Prozeß rein. Ich vermute mal, daß das im Moment noch nichts ausmacht, weil OpenBSD ein Kernel-Locking-Modell aus den 70ies hat, wo es nur einen großen Kernel Lock gibt. Man kann also sagen, daß ihre beschissene Performance tatsächlich Sicherheitshintergründe hat!!CASE PT_SETREGS:
[…]
error = copyin(SCARG(uap, addr), regs, sizeof(*regs));
if (error == 0) {
PHOLD(p);
error = process_write_regs(t,regs);
PRELE(p);
Ilja ist der Meinung, daß während copyin Paging auslöst auch andere Syscalls gemacht werden können. Ich glaube das, wenn ich es sehe. Welchen Sinn hätte ein großer Kernel Lock dann. Na mal gucken, wir werden das klären.