[LTP] [PATCH v3 1/3] lib: add functions to adjust oom score
Li Wang
liwang@redhat.com
Tue Dec 21 10:23:35 CET 2021
On Tue, Dec 21, 2021 at 5:17 PM Cyril Hrubis <chrubis@suse.cz> wrote:
> Hi!
> > > > v2 --> v3
> > > > * rename to tst_disable_oom_protection
> > > > * support set PID as 0 to protect current process
> > >
> > > > +static void set_oom_score_adj(pid_t pid, int value)
> > > > +{
> > > > + int val;
> > > > + char score_path[64];
> > > > +
> > > > + if (access("/proc/self/oom_score_adj", F_OK) == -1) {
> > > We need to check here also /proc/PID/oom_score_adj, i.e. score_path.
> > >
> >
> > Good catch, I would add a 'W_OK' checking and skip the setting with
> > a reminder message if run without root.
> >
> > how about this?
> >
> > if (access(score_path, W_OK) == -1) {
> > tst_res(TINFO, "Warning: %s cannot be accessed for writing,
> > please check if test run with root user.",
> > score_path);
>
> Hmm, I guess that we should produce TINFO if the file does not exist and
> TWARN if we cannot write to it. Something as:
>
Not exactly, if someone gives a wrong PID, that also cannot find
the score_path. So we shouldn't skip OOM adjustment only
with printing the TFINO.
>
> if (access(score_path, F_OK)) {
> tst_res(TINFO,
> "'%s' does not exist, skipping OOM score adjustement",
> score_path);
> return;
> }
>
> if (access(score_path, W_OK)) {
> tst_res(TWARN, "'%s' not writeable, are you root?", score_path);
> return;
> }
>
As Petr points out, only root user can set a negative value to
oom_score_adj,
this W_OK is not enough for ordinary users.
Consider about situation, I'd suggest go with non-safe macros and add
additional check in the last.
e.g.
--- a/lib/tst_memutils.c
+++ b/lib/tst_memutils.c
@@ -108,17 +108,21 @@ static void set_oom_score_adj(pid_t pid, int value)
else
sprintf(score_path, "/proc/%d/oom_score_adj", pid);
- if (access(score_path, R_OK | W_OK) == -1) {
- tst_res(TINFO, "Warning: %s cannot be accessed for
reading/writing,
- please check if test run with root user.",
- score_path);
- return
- }
-
- SAFE_FILE_PRINTF(score_path, "%d", value);
- SAFE_FILE_SCANF(score_path, "%d", &val);
- if (val != value)
+ if (access(score_path, F_OK) == -1)
+ tst_brk(TBROK, "%s does not exist, please check if PID is
valid");
+
+ FILE_PRINTF(score_path, "%d", value);
+ FILE_SCANF(score_path, "%d", &val);
+
+ if (val != value) {
+ if (value < 0) {
+ tst_res(TINFO, "Warning: %s cannot be set to
negative value,
+ please check if test run with root user.",
+ score_path);
+ return
+ }
tst_brk(TBROK, "oom_score_adj = %d, but expect %d.", val,
value);
+ }
}
--
Regards,
Li Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20211221/59152fb2/attachment.htm>
More information about the ltp
mailing list