Mir

Cannot connect to nested server when started from a differen vt

Bug #1379266 reported by Andreas Pokorny
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Mir
Fix Released
Medium
Alexandros Frantzis
mir (Ubuntu)
Fix Released
Undecided
Unassigned

Bug Description

launch a server
  # sudo ./mir_demo_server_basic --vt 1 --file /tmp/mir_socket

switch to vt 2
  # sudo chmod 666 /tmp/mir_socket
  # ./mir_demo_server_shell --host-socket /tmp/mir_socket --file /tmp/mir_nested

switch to vt 3
  # ./mir_demo_client_egltriangle -m /tmp/mir_nested

Switch to vt 1:
  Expected to see Triangle but
  ERROR: just a mouse cursor

Switch to vt 3:
  egltriangle died with "Can't get connection"

Switch to vt 1
 Connect via ssh from a different machine:
   # ./mir_demo_client_egltriangle -m /tmp/mir_nested
  as expected: -> mir_demo_client_egltriangle runs

Switch to vt 3;
   # ./mir_demo_client_egltriangle -m /tmp/mir_socket

Switch to vt 1
  as expected: another egltriangle runs.

Related branches

Changed in mir:
assignee: nobody → Alexandros Frantzis (afrantzis)
Changed in mir:
importance: Undecided → Medium
Revision history for this message
Alexandros Frantzis (afrantzis) wrote :

A description of the underlying cause:

The DRM auth magic cookie used to authenticate file descriptors is tied to, and can only be authenticated against, the DRM master that is active at the time of the drmGetMagic() call.

Currently, when a nested server wants to give a client an authenticated fd, it creates a DRM fd and gets a magic cookie for it. It then sends the cookie to the host for authentication. However, if the nested server gets the magic cookie while the host server is paused (and is therefore no longer the DRM master), the cookie is useless since it is not tied to the proper DRM master (the host). So, when the host server resumes and receives the request to authenticate the cookie, it fails to do so, since the cookie was not registered with it.

A solution is to introduce a mir_connection_drm_get_auth_fd() client API, so that the host can handle the whole process of creating an auth fd on its own (like it does when sending an authenticated fd when a client connects), avoiding the problem of invalid magic cookies.

The need for an additional platform specific function has triggered some discussions on the topic (see thread [1]) , so I will postpone implementation until a decision has been reached (hopefully by the end of next week)

[1] https://lists.ubuntu.com/archives/mir-devel/2014-October/000923.html

Changed in mir:
status: New → Triaged
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

Fix committed into lp:mir at revision None, scheduled for release in mir, milestone 0.11.0

Changed in mir:
status: Triaged → Fix Committed
Changed in mir:
milestone: none → 0.11.0
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (3.2 KiB)

This bug was fixed in the package mir - 0.11.0+15.04.20150209.1-0ubuntu1

---------------
mir (0.11.0+15.04.20150209.1-0ubuntu1) vivid; urgency=medium

  [ Daniel van Vugt ]
  * New upstream release 0.11.0 (https://launchpad.net/mir/+milestone/0.11.0)
    - Enhancements:
      . Lots more major plumbing in the Android code, on the path to
        supporting external displays.
      . Add support for clang 3.6.
      . Major redesign of server classes in mir::shell,scene and friends
        (still in progress).
      . Added client API for creating dialogs and tooltips.
      . Added new surface states: mir_surface_state_hidden and
        mir_surface_state_horizmaximized.
      . Performance: Use optimally efficient fragment shading when possible.
      . Performance: (Desktop) Composite using double buffering instead of
        triple to reduce visible lag.
      . mir_proving_server: Can now resize windows from any edge or corner
        using the existing Alt+middlebuttondrag.
      . mir_proving_server: Added some demo custom shaders (negative and
        high contrast modes: Super+N/C).
      . mir_proving_server: Can now close clients politely via Alt+F4.
      . Added MirPointerInputEvent (part of the new input API, the old
        MirMotionEvent is still supported also for now).
    - ABI summary: Servers need rebuilding, but clients do not;
      . Mirclient ABI unchanged at 8
      . Mircommon ABI unchanged at 3
      . Mirplatform ABI bumped to 6
      . Mirserver ABI bumped to 29
    - Bug fixes:
      . [regression] mir_demo_server exits immediately with boost
        bad_any_cast exception (LP: #1414630)
      . need way to position menus and tooltips (relative positioning to
        parent) (LP: #1324101)
      . GLibMainLoopTest failure seen in CI (LP: #1413748)
      . Clang builds fail in CI (LP: #1416317)
      . segfault in mir::compositor::GLProgramFamily::Shader::init()
        (LP: #1416482)
      . GLRenderer: The default fragment shader is sub-optimal for alpha=1.0
        (LP: #1350674)
      . mesa::DisplayBuffer::post_update is triple buffered - more laggy than
        it needs to be (LP: #1350725)
      . Cannot connect to nested server when started from a differen vt
        (LP: #1379266)
      . [testfail] AsioMainLoopAlarmTest fails in CI (LP: #1392256)
      . Compositor report inconsistently reports frame time during bypass,
        and render time otherwise (LP: #1408906)
      . [regression] mir_demo_client_fingerpaint doesn't paint anything any
        more (with the mouse) (LP: #1413139)
      . Hardware cursor is always slightly ahead of the composited image
        (LP: #1274408)
      . integration tests are outputting (too many) DisplayServer log
        messages (LP: #1408231)
      . [regression] deploy-and-test.sh doesn't work any more (unless you
        have umockdev installed already) (LP: #1413479)
      . Color Inverse on display. Toggle Negative Image (LP: #1400580)
      . mir-ubuntu-vivid-armhf-ci fails consistently (LP: #1407863)
      . Double-buffered surfaces may lag or freeze if event driven and not
        constantly redrawing (LP: #1395581)
      . Pointer motion and crossing events...

Read more...

Changed in mir (Ubuntu):
status: New → Fix Released
Changed in mir:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers