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;
+}
+

Reply via email to