summaryrefslogtreecommitdiff
path: root/extra/rtkit/0001-SECURITY-Pass-uid-of-caller-to-polkit.patch
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2013-10-04 01:59:50 -0700
committerroot <root@rshg054.dnsready.net>2013-10-04 01:59:50 -0700
commita1e8649c27451ac75f05b9b520d52b78e9f2913d (patch)
treeb71006b065dc0cd0a033f59b261db038c27e0e4b /extra/rtkit/0001-SECURITY-Pass-uid-of-caller-to-polkit.patch
parent7a89bde7057dae1b2a87ff0906dc797ebb4b2fc3 (diff)
Fri Oct 4 01:57:28 PDT 2013
Diffstat (limited to 'extra/rtkit/0001-SECURITY-Pass-uid-of-caller-to-polkit.patch')
-rw-r--r--extra/rtkit/0001-SECURITY-Pass-uid-of-caller-to-polkit.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/extra/rtkit/0001-SECURITY-Pass-uid-of-caller-to-polkit.patch b/extra/rtkit/0001-SECURITY-Pass-uid-of-caller-to-polkit.patch
new file mode 100644
index 000000000..92e54b950
--- /dev/null
+++ b/extra/rtkit/0001-SECURITY-Pass-uid-of-caller-to-polkit.patch
@@ -0,0 +1,48 @@
+From f44c5776b25ca2abd7569fb8532c6aede9b0c6b0 Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters@verbum.org>
+Date: Thu, 22 Aug 2013 16:05:22 -0400
+Subject: [PATCH] [SECURITY] Pass uid of caller to polkit
+
+Otherwise, we force polkit to look up the uid itself in /proc, which
+is racy if they execve() a setuid binary.
+---
+ rtkit-daemon.c | 11 ++++++++++-
+ 1 files changed, 10 insertions(+), 1 deletions(-)
+
+diff --git a/rtkit-daemon.c b/rtkit-daemon.c
+index 2ebe673..3ecc1f7 100644
+--- a/rtkit-daemon.c
++++ b/rtkit-daemon.c
+@@ -1170,12 +1170,14 @@ static int verify_polkit(DBusConnection *c, struct rtkit_user *u, struct process
+ DBusMessage *m = NULL, *r = NULL;
+ const char *unix_process = "unix-process";
+ const char *pid = "pid";
++ const char *uid = "uid";
+ const char *start_time = "start-time";
+ const char *cancel_id = "";
+ uint32_t flags = 0;
+ uint32_t pid_u32 = p->pid;
+- uint64_t start_time_u64 = p->starttime;
++ uint32_t uid_u32 = (uint32_t)u->uid;
+ DBusMessageIter iter_msg, iter_struct, iter_array, iter_dict, iter_variant;
++ uint64_t start_time_u64 = p->starttime;
+ int ret;
+ dbus_bool_t authorized = FALSE;
+
+@@ -1206,6 +1208,13 @@ static int verify_polkit(DBusConnection *c, struct rtkit_user *u, struct process
+ assert_se(dbus_message_iter_close_container(&iter_dict, &iter_variant));
+ assert_se(dbus_message_iter_close_container(&iter_array, &iter_dict));
+
++ assert_se(dbus_message_iter_open_container(&iter_array, DBUS_TYPE_DICT_ENTRY, NULL, &iter_dict));
++ assert_se(dbus_message_iter_append_basic(&iter_dict, DBUS_TYPE_STRING, &uid));
++ assert_se(dbus_message_iter_open_container(&iter_dict, DBUS_TYPE_VARIANT, "u", &iter_variant));
++ assert_se(dbus_message_iter_append_basic(&iter_variant, DBUS_TYPE_UINT32, &uid_u32));
++ assert_se(dbus_message_iter_close_container(&iter_dict, &iter_variant));
++ assert_se(dbus_message_iter_close_container(&iter_array, &iter_dict));
++
+ assert_se(dbus_message_iter_close_container(&iter_struct, &iter_array));
+ assert_se(dbus_message_iter_close_container(&iter_msg, &iter_struct));
+
+--
+1.7.1
+