1. 21 Mar, 2017 15 commits
    • Chase Douglas's avatar
      os: Add -displayfd option · 89496d98
      Chase Douglas authored
       commit 88bacc49f06da5927f716869f5a32672a8297ed0
       Author: Chase Douglas <chase.douglas@canonical.com>
       Date:   Wed Apr 4 15:29:42 2012 -0700
      
          os: Add -displayfd option
      
          This option specifies a file descriptor in the launching process.  X
          will scan for an available display number and write that number back to
          the launching process, at the same time as SIGUSR1 generation.  This
          means display managers don't need to guess at available display numbers.
          As a consequence, if X fails to start when using -displayfd, it's not
          because the display was in use, so there's no point in retrying the X
          launch on a higher display number.
      Signed-off-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarChase Douglas <chase.douglas@canonical.com>
      Reviewed-by: 's avatarJulien Cristau <jcristau@debian.org>
      Tested-by: 's avatarJulien Cristau <jcristau@debian.org>
      Reviewed-by: 's avatarAlan Coopersmith <alan.coopersmith@oracle.com>
      Signed-off-by: 's avatarPeter Hutterer <peter.hutterer@who-t.net>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      89496d98
    • Keith Packard's avatar
      os: Use NotifyFd for ErrorConnMax · eb499961
      Keith Packard authored
       commit c3fea428aed919826130ef8ebdb2cceb445a845b
       Author: Keith Packard <keithp@keithp.com>
       Date:   Tue May 24 20:51:31 2016 -0700
      
          os: Use NotifyFd for ErrorConnMax
      
          Instead of open-coding a single FD wait, use NotifyFd to wait for the
          FD to become readable before returning the error message.
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      eb499961
    • Adam Jackson's avatar
      Move SIGUSR1 notification as late as possible. · f5301dee
      Adam Jackson authored
       commit f01e149d1af14ef9ee0e8a6743ab6a08f3bb677c
       Author: Adam Jackson <ajax@redhat.com>
       Date:   Thu Nov 1 15:41:11 2007 -0400
      
          Move SIGUSR1 notification as late as possible.
      
          If we inherited a signal mask from the parent process that ignores SIGUSR1,
          then we will send SIGUSR1 to the parent to indicate when we're ready to
          accept connections.  Unfortunately, we send this notification way too
          early, right after creating the sockets rather than just before entering
          the main loop.
      
          Move it to just before Dispatch() so we're not lying quite so much.
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      f5301dee
    • Adam Jackson's avatar
      dix: Extend initial connection handshake for forwarding proxies · 4f76ed19
      Adam Jackson authored
       commit 78fa121f4097d29458e5453c13473595df06e26e
       Author: Adam Jackson <ajax@redhat.com>
       Date:   Fri Jun 17 13:43:38 2011 -0400
      
          dix: Extend initial connection handshake for forwarding proxies
      
          Forwarding proxies like sshd will appear to be local, even though they
          aren't really.  This leads to weird behaviour for extensions that truly
          require running under the same OS services as the client, like MIT-SHM
          and DRI2.
      
          Add two new legal values for the initial connection's byteOrder field,
          'r' and 'R'.  These act like 'l' and 'B' respectively, but have the side
          effect of forcing the client to be treated as non-local.  Forwarding
          proxies should attempt to munge the first packet of the connection
          accordingly; older servers will reject connections thusly munged, so the
          proxy should fall back to passthrough if the munged connection attempt
          fails.
      Reviewed-by: 's avatarDaniel Stone <daniel@fooishbar.org>
      Signed-off-by: 's avatarAdam Jackson <ajax@redhat.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      4f76ed19
    • Adam Jackson's avatar
      dix: Pull client-is-local flag up to the ClientRec · ed52cb29
      Adam Jackson authored
       Backported from X.org
      
       commit ff8e3ad8074cd2c8bed49b39c40c2b4892118270
       Author: Adam Jackson <ajax@redhat.com>
       Date:   Thu Sep 20 13:16:59 2012 -0400
      
          dix: Pull client-is-local flag up to the ClientRec
      Reviewed-by: 's avatarDaniel Stone <daniel@fooishbar.org>
      Signed-off-by: 's avatarAdam Jackson <ajax@redhat.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      ed52cb29
    • Pauli Nieminen's avatar
      os: always check if client is local when connection is accepted · 349b6dec
      Pauli Nieminen authored
       Backported from X.org:
      
       commit 2d67ada3c4079a11c52024a9c3d4138becca5171
       Author: Pauli Nieminen <ext-pauli.nieminen@nokia.com>
       Date:   Thu Dec 30 19:19:43 2010 +0200
      
          os: always check if client is local when connection is accepted
      
          LocalClient is used for all DRI2 requests that makes it frequently
          called function. Querying if connection is local or not takes 10-15us
          (on ARM) depending on malloc speed.
      Signed-off-by: 's avatarPauli Nieminen <ext-pauli.nieminen@nokia.com>
      Reviewed-by: 's avatarDaniel Stone <daniel@fooishbar.org>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      349b6dec
    • Rami Ylimäki's avatar
      os: Add facilities for client ID tracking. · 239fe3d0
      Rami Ylimäki authored
       commit 6d6d4cb6043905d850834946e9bfc526ed5a9ef7
       Author: Matthieu Herrb <matthieu.herrb@laas.fr>
       Date:   Mon Jan 2 13:23:59 2012 +0000
      
          Add OpenBSD support to DetermineClientCmd()
      
          Uses kvm_getargv() from libkvm.
      Signed-off-by: 's avatarMatthieu Herrb <matthieu.herrb@laas.fr>
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      
       commit cfc4c3d7fa8bd4da4c08b2ab8e6f85435f75353a
       Author: Alan Coopersmith <alan.coopersmith@oracle.com>
       Date:   Sat Dec 24 10:00:56 2011 -0800
      
          Add Solaris support to DetermineClientCmd
      
          Uses /proc/pid/psinfo to read command & partial arguments.
      
          Moves cmdsize & argsize variables into non-Solaris #else clause
          to avoid unused variable warnings.
      
          Fixes format mismatch errors when building with DEBUG defined on
          a 64-bit platform (where Mask is defined as CARD32).
      Signed-off-by: 's avatarAlan Coopersmith <alan.coopersmith@oracle.com>
      Reviewed-by: 's avatarRami Ylimäki <rami.ylimaki@vincit.fi>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      
       commit 780133f9ae7fada462714b47e79d26075bbd9abe
       Author: Alan Coopersmith <alan.coopersmith@oracle.com>
       Date:   Fri Oct 28 21:29:50 2011 -0700
      
          Convert DetermineClientCmd to use strdup instead of malloc+strncpy
      
          *cmdname is initialized to NULL earlier in the function, so it's
          okay to overwrite it with NULL if strdup fails, don't need that
          extra check.
      Signed-off-by: 's avatarAlan Coopersmith <alan.coopersmith@oracle.com>
      Reviewed-by: 's avatarJeremy Huddleston <jeremyhu@apple.com>
      
       commit 2ef4ff45ef1fcfc4967ebe3d550408769e5f6500
       Author: Erkki Seppälä <erkki.seppala@vincit.fi>
       Date:   Fri Mar 25 10:38:23 2011 +0200
      
          os/client: Prevent rare fd leak in DetermineClientPid
      
          DetermineClientPid didn't close file descriptor if read on
          /proc/pid/cmdline failed. Adjusted the code to disregard the close
          return value and perform the return after that, if the read failed or
          returned EOF.
      Signed-off-by: 's avatarMark Kettenis <mark.kettenis@xs4all.nl>
      Signed-off-by: 's avatarErkki Seppälä <erkki.seppala@vincit.fi>
      Reviewed-by: 's avatarRami Ylimäki <rami.ylimaki@vincit.fi>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      
       commit 1e933665bef26c74196bb7c59910e6a78bcacf0e
       Author: Rami Ylimäki <rami.ylimaki@vincit.fi>
       Date:   Wed Dec 22 16:51:09 2010 +0200
      
          os: Add facilities for client ID tracking.
      
          An interface is provided for figuring out the PID and process name of
          a client. Make some existing functionality from SELinux and IA
          extensions available for general use.
      Signed-off-by: 's avatarRami Ylimäki <rami.ylimaki@vincit.fi>
      Reviewed-by: 's avatarTiago Vignatti <tiago.vignatti@nokia.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      239fe3d0
    • Mike Gabriel's avatar
      dix/os: backport various signal handling and smart scheduler changes from X.org · 366067b7
      Mike Gabriel authored
       Backported from X.org:
      
       commit 6178b1c91cfc9e860914acc6f0be2f2d2e07a124
       Author: Adam Jackson <ajax@redhat.com>
       Date:   Tue Jun 7 15:52:11 2016 -0400
      
          dix: Use OsSignal() not signal()
      
          As the man page for the latter states:
      
              The effects of signal() in a multithreaded process are unspecified.
      
          We already have an interface to call sigaction() instead, use it.
      Signed-off-by: 's avatarAdam Jackson <ajax@redhat.com>
      Reviewed-by: 's avatarKeith Packard <keithp@keithp.com>
      
       commit e10ba9e4b52269b2ac75c4802dce4ca47d169657
       Author: Keith Packard <keithp@keithp.com>
       Date:   Wed Nov 11 22:02:01 2015 -0800
      
          Remove non-smart scheduler. Don't require setitimer.
      
          This allows the server to call GetTimeInMillis() after each request is
          processed to avoid needing setitimer. -dumbSched now turns off the
          setitimer.
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      
       commit 1f915e8b524dd02011158aa038935970684c7630
       Author: Daniel Drake <drake@endlessm.com>
       Date:   Wed May 20 13:16:12 2015 -0600
      
          Keep SIGALRM restart flag after Popen
      
          Commit 94ab7455 added SA_RESTART to the SIGALRM handler.  However, the
          Popen code tears down and recreates the SIGALRM handler via OsSignal(),
          and this flag is dropped at this time.
      
          Clean the code to use just a single codepath for creating this signal
          handler, always applying SA_RESTART.
      
          [ajax: Fixed commit id]
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarDaniel Drake <drake@endlessm.com>
      
       commit 94ab7455abc213fc96760e29ab2e943ec682fb22
       Author: Daniel Drake <drake@endlessm.com>
       Date:   Tue May 12 16:39:22 2015 -0600
      
          Allow system call restarts upon signal interruption
      
          The X server frequently deals with SIGIO and SIGALRM interruptions.
          If process execution is inside certain blocking system calls
          when these signals arrive, e.g. with the kernel blocked on
          a contended semaphore, the system calls will be interrupted.
      
          Some system calls are automatically restartable (the kernel re-executes
          them with the same parameters once the signal handler returns) but
          only if the signal handler allows it.
      
          Set SA_RESTART on the signal handlers to enable this convenient
          behaviour.
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarDaniel Drake <drake@endlessm.com>
      
       commit a6c71ce5d2d2fe89e07a2ef5041c915acc3dc686
       Author: Tiago Vignatti <tiago.vignatti@nokia.com>
       Date:   Mon Mar 28 19:21:28 2011 +0300
      
          os: fix memory and fd leaks in Popen
      Signed-off-by: 's avatarTiago Vignatti <tiago.vignatti@nokia.com>
      Reviewed-by: 's avatarPeter Hutterer <peter.hutterer@who-t.net>
      Reviewed-by: 's avatarNicolas Peninguy <nico@lostgeeks.org>
      
       commit c9051b684b524549eab6d5b88ee3e195a6f6fbe8
       Author: Alan Coopersmith <alan.coopersmith@sun.com>
       Date:   Wed Nov 5 18:25:57 2008 -0800
      
          Use OsSignal in Popen/Pclose to avoid SysV signal() stupidity
      
       commit 0e9ef65fa583bf2393dd0fda82df6f092387b425
       Author: Keith Packard <keithp@koto.keithp.com>
       Date:   Wed Nov 7 16:33:10 2007 -0800
      
          Don't frob timers unless SmartSchedule is running
      
       commit 2338d5c9914e2a43c3a4f7ee0f4355ad0a1ad9e7
       Author: Arjan van de Ven <arjan@linux.intel.com>
       Date:   Sun Oct 28 09:37:52 2007 +0100
      
          reduce wakeups from smart scheduler
      
          The smart scheduler itimer currently always fires after each request
          (which in turn causes the CPU to wake out of idle, burning precious
          power). Rather than doing this, just stop the timer before going into
          the select() portion of the WaitFor loop. It's a cheap system call, and
          it will only get called if there's no more commands batched up from the
          active fd.
      
          This change also allows some of the functions to be simplified;
          setitimer() will only fail if it's passed invalid data, and we don't do
          that... so make it void and remove all the conditional code that deals
          with failure.
      
          The change also allows us to remove a few variables that were used for
          housekeeping between the signal handler and the main loop.
      Signed-off-by: 's avatarKeith Packard <keithp@koto.keithp.com>
      
       **Note**: The above change also required ABI changes in hw/nxagent/.
      
       commit abe0a51f3f790f8c055289465e130177c4b647cc
       Author: Ben Byer <bbyer@bbyer.apple.com>
       Date:   Fri Sep 21 17:07:36 2007 -0700
      
          So, like, checking return codes of system calls (signal, etc) is good.
          Also, only restore an old signal handler if one was actually set
          (prevents the server from dying on OS X).
      
       commit 6da39c67905500ab2db00a45cda4a9f756cdde96
       Author: Eric Anholt <eric@anholt.net>
       Date:   Wed Sep 12 13:23:13 2007 +0000
      
          Fix build on FreeBSD after Popen changes.
      
       commit a5b8053606d6e786cdcf6734f271acc05f9cc588
       Author: Adam Jackson <ajax@benzedrine.nwnk.net>
       Date:   Tue Sep 11 11:37:06 2007 -0400
      
          Ignore - not just block - SIGALRM around Popen()/Pclose().
      
          Because our "popen" implementation uses stdio, and because nobody's stdio
          library is capable of surviving signals, we need to make absolutely sure
          that we hide the SIGALRM from the smart scheduler.  Otherwise, when you
          open a menu in openoffice, and it recompiles XKB to deal with the
          accelerators, and you popen xkbcomp because we suck, then the scheduler
          will tell you you're taking forever doing something stupid, and the
          wait() code will get confused, and input will hang and your CPU usage
          slams to 100%.  Down, not across.
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      366067b7
    • Keith Packard's avatar
      dix/os: Merge priority computation into SmartScheduleClient · f14f738a
      Keith Packard authored
       Backported from X.org:
      
       commit 7762a602c1dfdd8cfcf2b8c2281cf4d683d05216
       Author: Keith Packard <keithp@keithp.com>
       Date:   Thu May 19 15:05:55 2016 -0700
      
          dix/os: Merge priority computation into SmartScheduleClient
      
          Instead of having scheduling done in two places (one in
          WaitForSomething, and the other in SmartScheduleClient), just stick
          all of the scheduling in SmartScheduleClient.
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      f14f738a
    • Pauli Nieminen's avatar
      os: Fix a memory leak · 6c076cfe
      Pauli Nieminen authored
       Backported from X.org (+ coding style fixes in other free() calls):
      
       commit 617b7d22115ccaaaa7ec69c99885054d33a3bc37
       Author: Pauli Nieminen <ext-pauli.nieminen@nokia.com>
       Date:   Thu Dec 30 19:19:42 2010 +0200
      
          os: Fix a memory leak
      Signed-off-by: 's avatarPauli Nieminen <ext-pauli.nieminen@nokia.com>
      Reviewed-by: 's avatarAlan Coopersmith <alan.coopersmith@oracle.com>
      Reviewed-by: 's avatarDaniel Stone <daniel@fooishbar.org>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      6c076cfe
    • Alan Coopersmith's avatar
      Rework local client id finding code to be more uniform · 8996f80a
      Alan Coopersmith authored
       Backport of X.org commit:
      
       commit 2d93e69690d2c5d4a89a795ede6423796528e5df
       Author: Alan Coopersmith <alan.coopersmith@sun.com>
       Date:   Thu Sep 27 16:47:06 2007 -0700
      
          Rework local client id finding code to be more uniform
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      
       Note: This commit also switches client_uid_string's size from 32 to 64 chars,
       as found in this X.org commit (spotted by Mihai Moldovan during code review):
      
          commit a7b944f0d96c3e0e15e75378a04def1ac96089fb
          Author: Alan Coopersmith <alan.coopersmith@sun.com>
          Date:   Wed Nov 1 16:17:49 2006 -0800
      
              If getpeerucred() is available, include pid & zoneid in audit messages too
      8996f80a
    • Alan Coopersmith's avatar
      AUDIT messages should contain uid for local accesses (X.org bug #1997) · 6bc37b98
      Alan Coopersmith authored
       commit fbfb35189ef6666707097704b43e052cb2f919ae
       Author: Alan Coopersmith <alan.coopersmith@sun.com>
       Date:   Wed Nov 1 15:11:48 2006 -0800
      
          Bug #1997: AUDIT messages should contain uid for local accesses
      
          <https://bugs.freedesktop.org/show_bug.cgi?id=1997>
      6bc37b98
    • Mike Gabriel's avatar
    • Mike Gabriel's avatar
      104307dd
    • Mike Gabriel's avatar
      Xserver/os/Imakefile: Introduce the NULL variable and line-wrap various variable… · 7177caa7
      Mike Gabriel authored
      Xserver/os/Imakefile: Introduce the NULL variable and line-wrap various variable definitions for the sake of better readability.
      7177caa7
  2. 20 Mar, 2017 5 commits
    • Adam Jackson's avatar
      Don't crash on unconfigured interfaces. (X.org bug #5218, Andrei Barbu) · eac0a8fa
      Adam Jackson authored
       commit 9d62d1e6903ccc095f784279a699b3f40a8f0cf8
       Author: Adam Jackson <ajax@nwnk.net>
       Date:   Sat Jan 7 00:45:17 2006 +0000
      
          Bug #5218: Don't crash on unconfigured interfaces. (Andrei Barbu)
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      eac0a8fa
    • Alan Coopersmith's avatar
      Set padding bytes to 0 in WriteToClient · f9123570
      Alan Coopersmith authored
       commit bed610fcae41ddfe21fa9acde599b17d1d15f5d1
       Author: Alan Coopersmith <alan.coopersmith@oracle.com>
       Date:   Mon Jul 9 19:12:44 2012 -0700
      
          Set padding bytes to 0 in WriteToClient
      
          Clear them out when needed instead of leaving whatever values were
          present in previously sent messages.
      Signed-off-by: 's avatarAlan Coopersmith <alan.coopersmith@oracle.com>
      Reviewed-by: 's avatarKeith Packard <keithp@keithp.com>
      Tested-by: 's avatarDaniel Stone <daniel@fooishbar.org>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      f9123570
    • Aaron Plattner's avatar
      os: Return BadLength instead of disconnecting BigReq clients (#4565) · 2ecd2a00
      Aaron Plattner authored
       Backported from X.org:
      
       commit 67c66606c760c263d7a4c2d1bba43ed6225a4e7c
       Author: Robert Morell <rmorell@nvidia.com>
       Date:   Thu May 9 13:09:02 2013 -0700
      
          os: Reset input buffer's 'ignoreBytes' field
      
          If a client sends a request larger than maxBigRequestSize, the server is
          supposed to ignore it.
      
          Before commit cf88363d, the server would simply disconnect the client.  After
          that commit, it attempts to gracefully ignore the request by remembering how
          long the client specified the request to be, and ignoring that many bytes.
          However, if a client sends a BigReq header with a large size and disconnects
          before actually sending the rest of the specified request, the server will
          reuse the ConnectionInput buffer without resetting the ignoreBytes field.  This
          makes the server ignore new X clients' requests.
      
          This fixes that behavior by resetting the ignoreBytes field when putting the
          ConnectionInput buffer back on the FreeInputs list.
      Signed-off-by: 's avatarRobert Morell <rmorell@nvidia.com>
      Reviewed-by: 's avatarPeter Hutterer <peter.hutterer@who-t.net>
      Signed-off-by: 's avatarPeter Hutterer <peter.hutterer@who-t.net>
      
       commit c80c41767eb101e9dbd8393d8cca7764b4e248a4
       Author: Aaron Plattner <aplattner@nvidia.com>
       Date:   Mon Oct 25 22:01:32 2010 -0700
      
          os: Fix BigReq ignoring when another request is pending
      
          Commit cf88363db0ebb42df7cc286b85d30d7898aea840 fixed the handling of
          BigReq requests that are way too large and handles the case where the
          read() syscall returns a short read.  However, it neglected to handle
          the case where it returns a long read, which happens when the client
          has another request in the queue after the bogus large one.
      
          Handle the long read case by subtracting the smaller of 'needed' and
          'gotnow' from oci->ignoreBytes.  If needed < gotnow, simply subtract
          the two, leaving gotnow equal to the number of extra bytes read.
          Since the code immediately following the (oci->ignoreBytes > 0) block
          tries to handle the next request, advance oci->bufptr immediately
          instead of setting oci->lenLastReq and letting the next call to
          ReadRequestFromClient do it.
      
          Fixes the XTS pChangeKeyboardMapping-3 test.
      
                   CASES TESTS  PASS UNSUP UNTST NOTIU  WARN   FIP  FAIL UNRES  UNIN ABORT
          -Xproto    122   389   367     2    19     0     0     0     1     0     0     0
          +Xproto    122   389   368     2    19     0     0     0     0     0     0     0
      Signed-off-by: 's avatarAaron Plattner <aplattner@nvidia.com>
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      
       commit cf88363db0ebb42df7cc286b85d30d7898aea840
       Author: Aaron Plattner <aplattner@nvidia.com>
       Date:   Fri Aug 27 10:20:29 2010 -0700
      
          os: Return BadLength instead of disconnecting BigReq clients (#4565)
      
          If a client sends a big request that's too big (i.e. bigger than
          maxBigRequestSize << 2 bytes), the server just disconnects it.  This makes the
          client receive SIGPIPE the next time it tries to send something.
      
          The X Test Suite sends requests that are too big when the test specifies the
          TOO_LONG test type.  When the client receives SIGPIPE, XTS marks it as
          UNRESOLVED, which counts as a failure.
      
          Instead, remember how long the request is supposed to be and then return that
          size.  Dispatch() checks the length and sends BadLength to the client.  Then,
          whenever oci->ignoreBytes is nonzero, ignore the data read instead of trying to
          process it as a request.
      Signed-off-by: 's avatarAaron Plattner <aplattner@nvidia.com>
      Reviewed-by: 's avatarKeith Packard <keithp@keithp.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      2ecd2a00
    • Peter Harris's avatar
      Fix overflow of ConnectionOutput->size and ->count · cbc2d300
      Peter Harris authored
       commit 4b0d0df34f10a88c10cb23dd50087b59f5c4fece
       Author: Peter Harris <pharris@opentext.com>
       Date:   Mon Nov 17 14:31:24 2014 -0500
      
          Fix overflow of ConnectionOutput->size and ->count
      
          When (long) is larger than (int), and when realloc succeeds with sizes
          larger than INT_MAX, ConnectionOutput->size and ConnectionOutput->count
          overflow and become negative.
      
          When ConnectionOutput->count is negative, InsertIOV does not actually
          insert an IOV, and FlushClient goes into an infinite loop of writev(fd,
          iov, 0) [an empty list].
      
          Avoid this situation by killing the client when it has more than INT_MAX
          unread bytes of data.
      Signed-off-by: 's avatarPeter Harris <pharris@opentext.com>
      Reviewed-by: 's avatarKeith Packard <keithp@keithp.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      cbc2d300
    • Michel Dänzer's avatar
      dix: Pass ClientPtr to FlushCallback · 65b6a62b
      Michel Dänzer authored
       Backported X.org commits:
      
       commit b380f3ac51f40ffefcde7d3db5c4c149f274246d
       Author: Michel Dänzer <michel.daenzer@amd.com>
       Date:   Tue Aug 2 17:53:01 2016 +0900
      
          dix: Pass ClientPtr to FlushCallback
      
          This change has two effects:
      
          1. Only calls FlushCallbacks when we're actually flushing data to a
             client. The unnecessary FlushCallback calls could cause significant
             performance degradation with compositing, which is significantly
             reduced even without any driver changes.
      
          2. By passing the ClientPtr to FlushCallbacks, drivers can completely
             eliminate unnecessary flushing of GPU commands by keeping track of
             whether we're flushing any XDamageNotify events to the client for
             which the corresponding rendering commands haven't been flushed to
             the GPU yet.
      Reviewed-by: 's avatarAdam Jackson <ajax@redha.com>
      Signed-off-by: 's avatarMichel Dänzer <michel.daenzer@amd.com>
      
       commit c65f610e12f9df168d5639534ed3c2bd40afffc8
       Author: Kristian Høgsberg <krh@bitplanet.net>
       Date:   Thu Jul 29 18:52:35 2010 -0400
      
          Always call the flush callback chain when we flush client buffers
      
          We were missing the callback in a couple of places.  Drivers may use
          the flush callback to submit batched up rendering before events (for
          example, damage events) are sent out, to ensure that the rendering
          has been queued when the client receives the event.
      Signed-off-by: 's avatarKristian Høgsberg <krh@bitplanet.net>
      Reviewed-by: 's avatarKeith Packard <keithp@keithp.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      65b6a62b
  3. 19 Mar, 2017 5 commits
    • Keith Packard's avatar
      Xserver/os/io.c: Bail out early from FlushClient if nothing needs to be written. · af7c3750
      Keith Packard authored
       Found in X.org commit:
      
       commit d5bf6f95f31037bd49b11348b500c3c13b7e0c99
       Author: Keith Packard <keithp@keithp.com>
       Date:   Thu Oct 4 14:42:37 2012 -0700
      
          Fix FlushClient to write extraBuf when provided (regression fix)
      
          In commit:
      
              commit 092c57ab173c8b71056f6feb3b9d04d063a46579
              Author: Adam Jackson <ajax@redhat.com>
              Date:   Fri Jun 17 14:03:01 2011 -0400
      
                  os: Hide the Connection{In,Out}put implementation details
      Reviewed-by: 's avatarDaniel Stone <daniel@fooishbar.org>
      Signed-off-by: 's avatarAdam Jackson <ajax@redhat.com>
      
          the check for an empty output buffer was moved from one calling
          location into the FlushClient implementation itself. However, this
          neglected the possibility that additional data, in the form of
          'extraBuf' would be passed to FlushClient from other code paths. If the
          output buffer happened to be empty at that time, the extra data would
          never be written to the client.
      
          This is fixed by checking the total data to be written, which includes
          both pending and extra data, instead of just the pending data.
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Reviewed-by: 's avatarJulien Cristau <jcristau@debian.org>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      af7c3750
    • Chris Wilson's avatar
      os: Immediately queue initial WriteToClient · 645b757d
      Chris Wilson authored
       Backported from X.org:
      
       commit 9bf46610a9d20962854016032de4567974e87957
       Author: Chris Wilson <chris@chris-wilson.co.uk>
       Date:   Fri Jun 21 22:58:31 2013 +0100
      
          os: Immediately queue initial WriteToClient
      
          If we immediately put the WriteToClient() buffer into the socket's write
          queue, not only do we benefit from sending the response back to client
          earlier, but we also avoid the overhead of copying the data into our own
          staging buffer and causing extra work in the next select(). The write is
          effectively free as typically we may only send one reply per client per
          select() call, so the cost of the FlushClient() is the same.
      
          shmget10:   26400 -> 110000
          getimage10: 25000 -> 108000
      
          shmget500:   3160 -> 13500
          getimage500: 1000 -> 1010
      
          The knock-on effect is that on a mostly idle composited desktop, the CPU
          overhead is dominated by the memmove in WriteToClient, which is in turn
          eliminated by this patch.
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarChris Wilson <chris@chris-wilson.co.uk>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      645b757d
    • Mike Gabriel's avatar
      os/xdmcp: Remove dead 'restart' code · 07464670
      Mike Gabriel authored
       Completing the below X.org commit:
      
       commit a3a40291330bad10401fe2bcdbc097ce742b026a
       Author: Keith Packard <keithp@keithp.com>
       Date:   Mon Sep 21 07:16:16 2015 +0100
      
          os/xdmcp: Remove dead 'restart' code
      
          The X server used to wait for the user to hit a key or move the mouse
          before restarting the session after a keepalive failure. This,
          presumably, was to avoid having the X server continuously spew XDMCP
          protocol on the network while the XDM server was dead.
      
          Switching into this state was removed from the server some time before
          XFree86 4.3.99.16, so the remaining bits of code have been dead for
          over a decade, and no-one ever noticed.
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      07464670
    • Mike Gabriel's avatar
      b7c389b9
    • Ulrich Sibiller's avatar
      Keystroke.c: ignore CapsLock and NumLock most of the time · 7065e0bf
      Ulrich Sibiller authored
      CapsLock and NumLock will only be taken into account for keystrokes
      that explicitly require them. This is implemented for convenience and
      fixes ArcticaProject/nx-libs#397
      7065e0bf
  4. 17 Mar, 2017 5 commits
  5. 15 Mar, 2017 3 commits
    • Keith Packard's avatar
      os: Add NotifyFd interfaces · 86110d6e
      Keith Packard authored
       Backported from X.org:
      
       commit 0c41b7af4ab0c8d22b88f201293f59524d1e7317
       Author: Keith Packard <keithp@keithp.com>
       Date:   Wed Nov 11 22:02:02 2015 -0800
      
          os: Add NotifyFd interfaces
      
          This provides a callback-based interface to monitor file
          descriptors beyond the usual client and device interfaces.
      
          Modules within the server using file descriptors for reading and/or
          writing can call
      
              Bool SetNotifyFd(int fd, NotifyFdProcPtr notify_fd, int mask, void *data);
      
          mask can be any combination of X_NOTIFY_READ and X_NOTIFY_WRITE.
      
          When 'fd' becomes readable or writable, the notify_fd function will be
          called with the 'fd', the ready conditions and 'data' values as arguments,
      
          When the module no longer needs to monitor the fd, it will call
      
              void RemoveNotifyFd(int fd);
      
          RemoveNotifyFd may be called from the notify function.
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      86110d6e
    • Mike Gabriel's avatar
    • Keith Packard's avatar
      os/xdmcp: Just send XDMCP keepalive packets once every three minute · 9f000842
      Keith Packard authored
       Backported from X.org:
      
       commit db1089eafc1c5371fa0030202de588d2e2b4f8e5
       Author: Keith Packard <keithp@keithp.com>
       Date:   Mon Sep 21 07:16:17 2015 +0100
      
          os/xdmcp: Just send XDMCP keepalive packets once every three minutes
      
          There was a complicated scheme to increase the time between keepalives
          from 3 minutes up to as much as 24 hours in an attempt to reduce
          network traffic from idle X terminals. X terminals receiving X
          traffic, or receiving user input would use the 3 minute value; X
          terminals without any network traffic would use a longer value.
      
          However, this was actually broken -- any activity in the X server,
          either client requests or user input, would end up resetting the
          keepalive timeout, so a user mashing on the keyboard would never
          discover that the XDMCP master had disappeared and have the session
          terminated, which was precisely the design goal of the XDMCP keepalive
          mechanism.
      
          Instead of attempting to fix this, accept the cost of a pair of XDMCP
          packets once every three minutes and just perform keepalives
          regularly.
      
          This will also make reworking the block and wakeup handler APIs to
          eliminate select masks easier.
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      9f000842
  6. 13 Mar, 2017 7 commits