[PATCH v2] sysctl: fix the problem that no error is reported when access fails
Denys Vlasenko
vda.linux at googlemail.com
Tue Jun 9 13:59:27 UTC 2020
Thanks, fixed in a bit different way
On Sat, May 16, 2020 at 12:31 PM zhuyan (M) <zhuyan34 at huawei.com> wrote:
>
> When an general user without authority sets the system configuration,
> 0 is returned, but the modification is not successful. It is unreasonable.
>
> Such as, general user didn't have /proc/sys/fs/protected_hardlinks permissions, but run the command 'busybox sysctl fs.protected_symlinks',
> 0 is returned.
>
> Signed-off-by: Yan Zhu <zhuyan34 at huawei.com>
> ---
> procps/sysctl.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/procps/sysctl.c b/procps/sysctl.c index 6d77185..0ffa9fe 100644
> --- a/procps/sysctl.c
> +++ b/procps/sysctl.c
> @@ -53,6 +53,7 @@ enum {
> FLAG_QUIET = 1 << 6,
> };
> #define OPTION_STR "neAapwq"
> +bool sysctl_input_dir = false;
>
> static void sysctl_dots_to_slashes(char *name) { @@ -170,6 +171,10 @@ static int sysctl_act_on_setting(char *setting)
> if (fd < 0) {
> switch (errno) {
> case EACCES:
> + if (!sysctl_input_dir) {
> + bb_perror_msg("error reading key '%s'", outname);
> + break;
> + }
> /* Happens for write-only settings, e.g. net.ipv6.route.flush */
> goto end;
> case ENOENT:
> @@ -310,6 +315,7 @@ int sysctl_main(int argc UNUSED_PARAM, char **argv) {
> int retval;
> int opt;
> + struct stat buf;
>
> opt = getopt32(argv, "+" OPTION_STR); /* '+' - stop on first non-option */
> argv += optind;
> @@ -331,6 +337,7 @@ int sysctl_main(int argc UNUSED_PARAM, char **argv)
> }
> xchdir("/proc/sys");
> if (opt & (FLAG_TABLE_FORMAT | FLAG_SHOW_ALL)) {
> + sysctl_input_dir = true;
> return sysctl_act_recursive(".");
> }
>
> @@ -338,6 +345,12 @@ int sysctl_main(int argc UNUSED_PARAM, char **argv)
>
> retval = 0;
> while (*argv) {
> + if (stat(*argv, &buf) == 0
> + && S_ISDIR(buf.st_mode))
> + sysctl_input_dir = true;
> + else
> + sysctl_input_dir = false;
> +
> sysctl_dots_to_slashes(*argv);
> retval |= sysctl_act_recursive(*argv);
> argv++;
> --
> 2.12.3
>
More information about the busybox
mailing list