Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> writes: > On Tue, Jun 29, 2021 at 8:52 AM Eric W. Biederman <ebiederm@xxxxxxxxxxxx> wrote: >> >> Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> writes: >> >> > Why the "sigpending < LONG_MAX" test in that >> > >> > if (override_rlimit || (sigpending < LONG_MAX && sigpending <= >> > task_rlimit(t, RLIMIT_SIGPENDING))) { >> > thing? >> >> On second look that sigpending < LONG_MAX check is necessary. When >> inc_rlimit_ucounts detects a problem it returns LONG_MAX. > > I saw that, but _without_ that test you'd be left with just that > > sigpending <= task_rlimit(t, RLIMIT_SIGPENDING) > > and if task_rlimit() is LONG_MAX, then that means "no limits", so it is all ok. It means no limits locally. The creator of your user namespace might have had a limit which you are also bound by. The other possibility is that inc_rlimits_ucounts caused a sigpending counter to overflow. In which case we need to fail and run dec_rlimit_ucounts to keep the counter from staying overflowed. So I don't see a clever way to avoid the sigpending < LONG_MAX test. Eric