diff options
author | B. Watson <yalhcru@gmail.com> | 2017-03-09 04:35:45 -0500 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2017-03-18 06:58:52 +0700 |
commit | 57ced6820ed246d3ba2602099d0c9fb5dfed8077 (patch) | |
tree | c9536dac955291d3ada6930891e8cbf142743a29 /system/vlock/10_fix-buffer-overflow.patch | |
parent | b05afe6414221e410a01e2a08fe046df0b4f7c72 (diff) |
system/vlock: New maintainer, make screensaver work.
Signed-off-by: B. Watson <yalhcru@gmail.com>
Diffstat (limited to 'system/vlock/10_fix-buffer-overflow.patch')
-rw-r--r-- | system/vlock/10_fix-buffer-overflow.patch | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/system/vlock/10_fix-buffer-overflow.patch b/system/vlock/10_fix-buffer-overflow.patch new file mode 100644 index 0000000000000..2fe07386febff --- /dev/null +++ b/system/vlock/10_fix-buffer-overflow.patch @@ -0,0 +1,49 @@ +Description: do not use fd_set with potentially large indices +Author: Helmut Grohne <helmut@subdivi.de> +Bug-Debian: http://bugs.debian.org/754594 +Last-Update: 2014-07-15 + +--- vlock-2.2.2.orig/src/process.c ++++ vlock-2.2.2/src/process.c +@@ -107,7 +107,7 @@ void ensure_death(pid_t pid) + + /* Close all possibly open file descriptors except the ones specified in the + * given set. */ +-static void close_fds(fd_set *except_fds) ++static void close_fds(int except_fd) + { + struct rlimit r; + int maxfd; +@@ -122,7 +122,8 @@ static void close_fds(fd_set *except_fds + /* Close all possibly open file descriptors except STDIN_FILENO, + * STDOUT_FILENO and STDERR_FILENO. */ + for (int fd = 0; fd < maxfd; fd++) +- if (!FD_ISSET(fd, except_fds)) ++ if(fd != STDIN_FILENO && fd != STDOUT_FILENO && fd != STDERR_FILENO ++ && fd != except_fd) + (void) close(fd); + } + +@@ -175,7 +176,6 @@ bool create_child(struct child_process * + + if (child->pid == 0) { + /* Child. */ +- fd_set except_fds; + + if (child->stdin_fd == REDIRECT_PIPE) + (void) dup2(stdin_pipe[0], STDIN_FILENO); +@@ -198,13 +198,7 @@ bool create_child(struct child_process * + else if (child->stderr_fd != NO_REDIRECT) + (void) dup2(child->stderr_fd, STDERR_FILENO); + +- FD_ZERO(&except_fds); +- FD_SET(STDIN_FILENO, &except_fds); +- FD_SET(STDOUT_FILENO, &except_fds); +- FD_SET(STDERR_FILENO, &except_fds); +- FD_SET(status_pipe[1], &except_fds); +- +- (void) close_fds(&except_fds); ++ (void) close_fds(status_pipe[1]); + + (void) setgid(getgid()); + (void) setuid(getuid()); |