chiark / gitweb /
bus: make sure we check for "incompatible" flags negotiated with kernel kdbus
[elogind.git] / src / libsystemd-bus / bus-kernel.c
index 93be698f59a228b0475421340bd428f6f34ba344..fb852bd730a41b44016f623a84f265cee57cec79 100644 (file)
@@ -1074,6 +1074,13 @@ int bus_kernel_create_bus(const char *name, char **s) {
                 return -errno;
         }
 
+        /* The higher 32bit of the flags field are considered
+         * 'incompatible flags'. Refuse them all for now. */
+        if (make->flags > 0xFFFFFFFFULL) {
+                close_nointr_nofail(fd);
+                return -ENOTSUP;
+        }
+
         if (s) {
                 char *p;
 
@@ -1111,13 +1118,20 @@ int bus_kernel_create_namespace(const char *name, char **s) {
         n->type = KDBUS_MAKE_NAME;
 
         make->size = ALIGN8(offsetof(struct kdbus_cmd_ns_make, items) + n->size);
-        make->flags = KDBUS_MAKE_POLICY_OPEN;
+        make->flags = KDBUS_MAKE_POLICY_OPEN | KDBUS_MAKE_ACCESS_WORLD;
 
         if (ioctl(fd, KDBUS_CMD_NS_MAKE, make) < 0) {
                 close_nointr_nofail(fd);
                 return -errno;
         }
 
+        /* The higher 32bit of the flags field are considered
+         * 'incompatible flags'. Refuse them all for now. */
+        if (make->flags > 0xFFFFFFFFULL) {
+                close_nointr_nofail(fd);
+                return -ENOTSUP;
+        }
+
         if (s) {
                 char *p;