From: Patrick Steinhardt Date: Tue, 29 May 2018 11:29:03 +0000 (+0200) Subject: sysctl: do not report set key in case `close_stream` fails X-Git-Tag: v4.0.0~438 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=866a27cdcdc4252cfb3472a641e6810161498d54;p=procps-ng sysctl: do not report set key in case `close_stream` fails As we're using buffered I/O when writing kernel parameters, write errors may get delayed until we close the `FILE` stream. As we are currently outputting the key that is to be set disregarding the return value of `close_stream`, we may end up in a situation where we report error and success: $ sysctl kernel.printk_ratelimit=100000000000000 sysctl: setting key "kernel.printk_ratelimit": error code 22 kernel.printk_ratelimit = 100000000000000 Fix the issue by only outputting the updated value in case `close_stream` does not report an error. Signed-off-by: Patrick Steinhardt --- diff --git a/sysctl.c b/sysctl.c index 5bae47fe..e5ca8038 100644 --- a/sysctl.c +++ b/sysctl.c @@ -462,7 +462,7 @@ static int WriteSetting(const char *setting) rc = 0; if (close_stream(fp) != 0) xwarn(_("setting key \"%s\""), outname); - if (rc == 0 && !Quiet) { + else if (rc == 0 && !Quiet) { if (NameOnly) { fprintf(stdout, "%s\n", outname); } else {