chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
bus: make sure we check for "incompatible" flags negotiated with kernel kdbus
[elogind.git]
/
src
/
libsystemd-bus
/
bus-kernel.c
diff --git
a/src/libsystemd-bus/bus-kernel.c
b/src/libsystemd-bus/bus-kernel.c
index 09e084a02f17f31dd652082ca39a96319f4184d1..fb852bd730a41b44016f623a84f265cee57cec79 100644
(file)
--- a/
src/libsystemd-bus/bus-kernel.c
+++ b/
src/libsystemd-bus/bus-kernel.c
@@
-1074,6
+1074,13
@@
int bus_kernel_create_bus(const char *name, char **s) {
return -errno;
}
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;
if (s) {
char *p;
@@
-1111,17
+1118,24
@@
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);
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;
}
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;
if (s) {
char *p;
- p = strappend("/dev/kdbus/", name);
+ p = strappend("/dev/kdbus/
ns/
", name);
if (!p) {
close_nointr_nofail(fd);
return -ENOMEM;
if (!p) {
close_nointr_nofail(fd);
return -ENOMEM;