[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <edfe92b9-c97e-b36c-eee1-0fe099d2b596@iogearbox.net>
Date: Tue, 17 Nov 2020 23:47:40 +0100
From: Daniel Borkmann <daniel@...earbox.net>
To: KP Singh <kpsingh@...omium.org>, linux-kernel@...r.kernel.org,
bpf@...r.kernel.org
Cc: Alexei Starovoitov <ast@...nel.org>,
Florent Revest <revest@...omium.org>,
Brendan Jackman <jackmanb@...omium.org>,
Pauline Middelink <middelin@...gle.com>
Subject: Re: [PATCH bpf-next v3 2/2] bpf: Add tests for bpf_lsm_set_bprm_opts
On 11/17/20 3:13 AM, KP Singh wrote:
[...]
> +
> +static int run_set_secureexec(int map_fd, int secureexec)
> +{
> +
^ same here
> + int child_pid, child_status, ret, null_fd;
> +
> + child_pid = fork();
> + if (child_pid == 0) {
> + null_fd = open("/dev/null", O_WRONLY);
> + if (null_fd == -1)
> + exit(errno);
> + dup2(null_fd, STDOUT_FILENO);
> + dup2(null_fd, STDERR_FILENO);
> + close(null_fd);
> +
> + /* Ensure that all executions from hereon are
> + * secure by setting a local storage which is read by
> + * the bprm_creds_for_exec hook and sets bprm->secureexec.
> + */
> + ret = update_storage(map_fd, secureexec);
> + if (ret)
> + exit(ret);
> +
> + /* If the binary is executed with securexec=1, the dynamic
> + * loader ingores and unsets certain variables like LD_PRELOAD,
> + * TMPDIR etc. TMPDIR is used here to simplify the example, as
> + * LD_PRELOAD requires a real .so file.
> + *
> + * If the value of TMPDIR is set, the bash command returns 10
> + * and if the value is unset, it returns 20.
> + */
> + execle("/bin/bash", "bash", "-c",
> + "[[ -z \"${TMPDIR}\" ]] || exit 10 && exit 20", NULL,
> + bash_envp);
> + exit(errno);
> + } else if (child_pid > 0) {
> + waitpid(child_pid, &child_status, 0);
> + ret = WEXITSTATUS(child_status);
> +
> + /* If a secureexec occured, the exit status should be 20.
> + */
> + if (secureexec && ret == 20)
> + return 0;
> +
> + /* If normal execution happened the exit code should be 10.
> + */
> + if (!secureexec && ret == 10)
> + return 0;
> +
and here (rest looks good to me)
> + }
> +
> + return -EINVAL;
> +}
> +
Powered by blists - more mailing lists