2 # submitted to upstream (Oliver Rauch) via email, 2009-08-18
4 From 6dee7eadd1b7352ec503ea04fa1639d4a93f370b Mon Sep 17 00:00:00 2001
5 From: Nils Philippsen <nils@redhat.com>
6 Date: Thu, 16 Aug 2012 11:18:31 +0200
7 Subject: [PATCH] patch: close-fds
9 Squashed commit of the following:
11 commit 4fdedd3a8b66fb42b2d4dde62df28c78571c1c5d
12 Author: Nils Philippsen <nils@redhat.com>
13 Date: Fri Nov 19 12:15:58 2010 +0100
15 don't leak file descriptors to help browser process (#455450)
17 src/xsane.c | 43 +++++++++++++++++++++++++++++++++++++++++++
18 1 file changed, 43 insertions(+)
20 diff --git a/src/xsane.c b/src/xsane.c
21 index 775610e..1c5d61d 100644
30 /* ---------------------------------------------------------------------------------------------------------------------- */
32 struct option long_options[] =
33 @@ -3684,6 +3686,41 @@ static void xsane_show_gpl(GtkWidget *widget, gpointer data)
35 /* ---------------------------------------------------------------------------------------------------------------------- */
37 +static void xsane_close_fds_for_exec(signed int first_fd_to_leave_open, ...)
43 + unsigned char *close_fds;
45 + open_max = (int) sysconf (_SC_OPEN_MAX);
47 + close_fds = malloc (open_max);
49 + memset (close_fds, 1, open_max);
51 + va_start (ap, first_fd_to_leave_open);
53 + for (i = first_fd_to_leave_open; i >= 0; i = va_arg (ap, signed int)) {
60 + DBG(DBG_info, "closing unneeded file descriptors\n");
62 + for (i = 0; i < open_max; i++) {
70 +/* ---------------------------------------------------------------------------------------------------------------------- */
72 static void xsane_show_doc_via_nsr(GtkWidget *widget, gpointer data) /* show via netscape remote */
74 char *name = (char *) data;
75 @@ -3736,6 +3773,8 @@ static void xsane_show_doc_via_nsr(GtkWidget *widget, gpointer data) /* show via
76 ipc_file = fdopen(xsane.ipc_pipefd[1], "w");
79 + xsane_close_fds_for_exec (1, 2, xsane.ipc_pipefd[1], -1);
81 DBG(DBG_info, "trying to change user id for new subprocess:\n");
82 DBG(DBG_info, "old effective uid = %d\n", (int) geteuid());
84 @@ -3778,6 +3817,8 @@ static void xsane_show_doc_via_nsr(GtkWidget *widget, gpointer data) /* show via
85 ipc_file = fdopen(xsane.ipc_pipefd[1], "w");
88 + xsane_close_fds_for_exec (1, 2, xsane.ipc_pipefd[1], -1);
90 DBG(DBG_info, "trying to change user id for new subprocess:\n");
91 DBG(DBG_info, "old effective uid = %d\n", (int) geteuid());
93 @@ -3899,6 +3940,8 @@ static void xsane_show_doc(GtkWidget *widget, gpointer data)
94 ipc_file = fdopen(xsane.ipc_pipefd[1], "w");
97 + xsane_close_fds_for_exec (1, 2, xsane.ipc_pipefd[1], -1);
99 DBG(DBG_info, "trying to change user id for new subprocess:\n");
100 DBG(DBG_info, "old effective uid = %d\n", (int) geteuid());