[Bug 1750013] Re: systemd-logind: memory leaks on session's connections (trusty-only)

Guilherme G. Piccoli 1750013 at bugs.launchpad.net
Wed Feb 28 14:32:11 UTC 2018


** Description changed:

- It was observed that systemd-logind tool is leaking memory at each session
- connected. The issue happens in systemd from Trusty (14.04), which latest
- version currently (Feb/2018) is 204-5ubuntu20.26 (and still reproduces
- the bug).
- 
- The basic test-case is to run the following loop from a remote machine:
- 
- while true; do ssh <hostname-target> "whoami"; done
- 
- and watch the increase in memory consumption from "systemd-logind" process
- in the target machine. One can use the "ps uax" command to verify the
- RSS of the process, or count the anon pages from /proc/<logind_pid>/smaps.
- 
- To clarify a bit how a session works, the following "stack trace" details
- a bit which function calls happen when a SSH connection is opened, from
- Trusty's systemd-logind point of view:
+ Below the SRU request form. Please refer to the Original Description to
+ a more comprehensive explanation of the problem observed.
  
  
- main() <logind.c>
- manager_startup()
- manager_run() [event-loop]
- bus_loop_dispatch() <dbus-loop.c>
- dbus_watch_handle() -> bus_manager_message_handler()
- bus_manager_create_session()
- manager_add_session() <logind.c>
- session_new() <logind-session.c>
- session_create_fifo()
- session_start()
- session_create_cgroup()
- session_save()
- session_bus_path()
- [...]
+ [Impact] 
  
- After each session is closed, it was observed that session_free() isn't
- called, keeping the sessions alive. This can be verified through the
- command "loginctl list-session" - each session that once connected is
- present there "forever".
+  * systemd-logind tool is leaking memory at each session connected. The 
+  issues happens in systemd from Trusty (14.04) only.
  
- The memory leaks can eventually lead to OOM situation of this process.
- Debug progress will be tracked here, in this LP.
+  * Three issues observed:
+   - systemd-logind is leaking entire sessions, i.e, the sessions are not 
+     feeed after they're closed. In order to fix that, we proactively add 
+     the sessions to systemd garbage collector (gc) when they are closed. 
+     Also, part of the fix is to make cgmanager package a dependency. Refer 
+     to comment #1 to a more thorough explanation of the issue and the fix.
+ 
+   - a small memory leak was observed in the session creation logic of 
+     systemd-logind. The fix for that is the addition of an appropriate 
+     free() call. Refer to comment #2 to more details on the issue and fix.
+ 
+   - another small memory leak was observed in the cgmanager glue code of 
+     systemd-logind - this code is only present in this specific Ubuntu 
+     release of the package, due to necessary compatibility layer with 
+     upstart init system. The fix is to properly call free() in 2 
+     functions. Refer to comment #3 to a deep exposition of the issue and 
+     the fix.
+ 
+ 
+ [Test Case]
+ 
+  * The basic test-case is to run the following loop from a remote machine:
+    while true; do ssh <hostname-target> "whoami"; done
+ 
+  * It's possible to watch the increase in memory consumption from 
+    "systemd-logind" process in the target machine. One can use the
+    "ps uax" command to verify the RSS of the process, or count its 
+    anonymous pages from /proc/<logind_pid>/smaps.
+ 
+ 
+ [Regression Potential] 
+ 
+  * Since the fixes are small and not intrusive, the potential for 
+    regressions are low. More regression considerations on comments #1, #2 
+    and #3 for each fix.
+ 
+  * A potential small regressson is performance-wise, since now we add 
+    sessions to garbage collector proactively.

** Tags added: sts-sru-needed

** Patch added: "debdiff"
   https://bugs.launchpad.net/ubuntu/artful/+source/systemd/+bug/1750013/+attachment/5065280/+files/lp1750013-trusty.debdiff

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to systemd in Ubuntu.
https://bugs.launchpad.net/bugs/1750013

Title:
  systemd-logind: memory leaks on session's connections (trusty-only)

Status in systemd package in Ubuntu:
  Fix Released
Status in systemd source package in Trusty:
  In Progress
Status in systemd source package in Xenial:
  Fix Released
Status in systemd source package in Artful:
  Fix Released
Status in systemd source package in Bionic:
  Fix Released

Bug description:
  Below the SRU request form. Please refer to the Original Description
  to a more comprehensive explanation of the problem observed.

  
  [Impact] 

   * systemd-logind tool is leaking memory at each session connected. The 
   issues happens in systemd from Trusty (14.04) only.

   * Three issues observed:
    - systemd-logind is leaking entire sessions, i.e, the sessions are not 
      feeed after they're closed. In order to fix that, we proactively add 
      the sessions to systemd garbage collector (gc) when they are closed. 
      Also, part of the fix is to make cgmanager package a dependency. Refer 
      to comment #1 to a more thorough explanation of the issue and the fix.

    - a small memory leak was observed in the session creation logic of 
      systemd-logind. The fix for that is the addition of an appropriate 
      free() call. Refer to comment #2 to more details on the issue and fix.

    - another small memory leak was observed in the cgmanager glue code of 
      systemd-logind - this code is only present in this specific Ubuntu 
      release of the package, due to necessary compatibility layer with 
      upstart init system. The fix is to properly call free() in 2 
      functions. Refer to comment #3 to a deep exposition of the issue and 
      the fix.

  
  [Test Case]

   * The basic test-case is to run the following loop from a remote machine:
     while true; do ssh <hostname-target> "whoami"; done

   * It's possible to watch the increase in memory consumption from 
     "systemd-logind" process in the target machine. One can use the
     "ps uax" command to verify the RSS of the process, or count its 
     anonymous pages from /proc/<logind_pid>/smaps.

  
  [Regression Potential] 

   * Since the fixes are small and not intrusive, the potential for 
     regressions are low. More regression considerations on comments #1, #2 
     and #3 for each fix.

   * A potential small regressson is performance-wise, since now we add 
     sessions to garbage collector proactively.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1750013/+subscriptions



More information about the foundations-bugs mailing list