Messages in this thread Patch in this message | | | Date | Mon, 13 May 2019 14:17:04 +0200 | From | Oleg Nesterov <> | Subject | Re: [REGRESSION] ptrace broken from "cgroup: cgroup v2 freezer" (76f969e) |
| |
On 05/12, Alex Xu (Hello71) wrote: > > Hi, > > I was trying to use strace recently and found that it exhibited some > strange behavior. I produced this minimal test case: > > #include <unistd.h> > > int main() { > write(1, "a", 1); > return 0; > } > > which, when run using "gcc test.c && strace ./a.out" produces this > strace output: > > [ pre-main omitted ] > write(1, "a", 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) > write(1, "a", 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) > write(1, "a", 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) > write(1, "a", 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) > write(1, "a", 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) > write(1, "a", 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) > [ repeats forever ]
Yes, cgroup_enter_frozen() alone is wrong, we have already discussed this a bit... see https://lore.kernel.org/lkml/20190508152536.GA17058@redhat.com/
Probably we add leave_frozen(true) after freezable_schedule() for now, then think try to make something better...
But I am not sure I 100% understand whats going on in this case, could you try the patch below? (Just in case, of course it is wrong).
Oleg.
--- x/kernel/signal.c +++ x/kernel/signal.c @@ -149,8 +149,7 @@ { if ((t->jobctl & (JOBCTL_PENDING_MASK | JOBCTL_TRAP_FREEZE)) || PENDING(&t->pending, &t->blocked) || - PENDING(&t->signal->shared_pending, &t->blocked) || - cgroup_task_frozen(t)) { + PENDING(&t->signal->shared_pending, &t->blocked) { set_tsk_thread_flag(t, TIF_SIGPENDING); return true; }
| |