Fix: sessiond: erroneous user check logic in session_access_ok
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 14 Aug 2020 20:59:18 +0000 (16:59 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 14 Aug 2020 21:06:04 +0000 (17:06 -0400)
The current session_access_ok logic disallows the access to a session when:
  uid != session->uid && gid != session->gid && uid != 0

This means that any user that is part of the same primary group as the session's
owner can access the session. The primary group is not necessarily (and most
likely) not the `tracing` group.

For instance:
  - the session has uid = 1000, gid = 100
  - the current user has uid = 1001, gid = 100

access to the session is granted.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I2e9208286e5508315dae90cb25d34133ca5edcc0

src/bin/lttng-sessiond/session.c

index 95395c282a2ab79d89b23450a3cc531bea7e28ad..3358648f6864323fbcd2d852bdf1296e7b01cf25 100644 (file)
@@ -1303,7 +1303,13 @@ int session_access_ok(struct ltt_session *session, uid_t uid, gid_t gid)
 {
        assert(session);
 
-       if (uid != session->uid && gid != session->gid && uid != 0) {
+       if (uid == 0) {
+               return 1;
+       }
+
+       return uid == session->uid && gid == session->gid;
+
+       if ((uid != session->uid || gid != session->gid) && uid != 0) {
                return 0;
        } else {
                return 1;
This page took 0.026817 seconds and 4 git commands to generate.