Commit Graph

12316 Commits

Author SHA1 Message Date
Corinna Vinschen a2ae31951d Cygwin: devices: drop MAX_CONSOLES and fix FH_CONS_MAX
FH_CONS_MAX should refelect the fact that we allow 128 consoles, even if
it's unused.

Suggested-by: Achim Gratz <Stromeko@nexgo.de>
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-10-14 10:54:04 -04:00
Corinna Vinschen e55f6ad713 Cygwin: fix process parent/child relationship after execve
Commit 5a0f2c00aa "Cygwin: fork/exec: fix child process permissions"
removed the PROCESS_DUP_HANDLE handle permission of the parent process
handle in the child to avoid a security problem.

It turned out that this broke the following scenario: If a process forks
and then the parent execs, the child loses the ability to register the
parent's death.  To wit, after the parent died the child process does
not set its own PPID to 1 anymore.

The current exec mechanism copies required handle values (handles to
keep contact to the child processes) into the child_info for the
about-to-be-exec'ed process.  The exec'ed process is supposed to
duplicate these handles.  This fails, given that we don't allow the
exec'ed process PROCESS_DUP_HANDLE access to the exec'ing process since
commit 5a0f2c00aa.

The fix is to avoid the DuplicateHandle calls in the exec'ed process.

This patch sets the affected handles to "inheritable" in the exec'ing
process at exec time.  The exec'ed process just copies the handle values
and resets handle inheritance to "non-inheritable".  The exec'ing
process doesn't have to reset handle inheritance, it exits after setting
up the exec'ed process anyway.

Testcase: $ ssh-agent /bin/sleep 3

ssh-agent forks and the parent exec's sleep.  After sleep exits, `ps'
should show ssh-agent to have PPID 1, and eventually ssh-agent exits.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-10-14 10:54:04 -04:00
Anton Lavrentiev via cygwin-patches 2bec29526b Cygwin: getpriority() consistent with process priority
https://cygwin.com/ml/cygwin/2019-08/msg00122.html
2020-10-14 10:54:03 -04:00
Achim Gratz a8fb9ff53a Cygwin: Provide more COM devices
Provide for 128 COM devices since Windows likes to create lots of these
over time (one per identifiable device and USB port).
2020-10-14 10:54:03 -04:00
Ken Brown 418dd3f508 Cygwin: spawnvp, spawnvpe: fail if executable is not in $PATH
Call find_exec with the FE_NNF flag to enforce a NULL return when the
executable isn't found in $PATH.  Convert NULL to "".  This aligns
spawnvp and spawnvpe with execvp and execvpe.
2020-10-14 10:54:03 -04:00
Takashi Yano 5c02c7f241 Cygwin: pty: Change the timing of clear screen. 2020-10-14 10:54:03 -04:00
Takashi Yano 643b960c40 Cygwin: pty: Avoid detach console in the process running as service. 2020-10-14 10:54:03 -04:00
Ken Brown 1e8370c1c1 Cygwin: mkdir and rmdir: treat drive names specially
If the directory name has the form 'x:' followed by one or more
slashes or backslashes, and if there's at least one backslash, assume
that the user is referring to 'x:\', the root directory of drive x,
and don't strip the backslash.

Previously all trailing slashes and backslashes were stripped, and the
name was treated as a relative file name containing a literal colon.

Addresses https://cygwin.com/ml/cygwin/2019-08/msg00334.html.
2020-10-14 10:54:03 -04:00
Ken Brown faf0c0f8b0 Cygwin: document recent changes to format_proc_cpuinfo 2020-10-14 10:54:03 -04:00
Brian Inglis e73d74d4f9 fhandler_proc.cc(format_proc_cpuinfo): or model extension bits
or model extension bits into model high bits instead of adding
arithmetically like family extension.
2020-10-14 10:54:02 -04:00
Brian Inglis 792c4257bf fhandler_proc.cc(format_proc_cpuinfo): comment flags not reported
Comment out flags not reported by Linux in cpuinfo, although some
flags may not be used at all by Linux.
2020-10-14 10:54:02 -04:00
Brian Inglis f4381eaf1c fhandler_proc.cc(format_proc_cpuinfo): add feature flags
Add 99 feature flags including AVX512 extensions, AES, SHA with 20
cpuid calls.
2020-10-14 10:54:02 -04:00
Brian Inglis dcb5d25fde fhandler_proc.cc(format_proc_cpuinfo): use feature test print macro
Add feature test print macro that makes feature, bit, and flag text
comparison and checking easier.  Handle as common former Intel only
feature flags also supported on AMD.  Change order and some flag names
to agree with current Linux.
2020-10-14 10:54:02 -04:00
Brian Inglis 169b9e093f fhandler_proc.cc(format_proc_cpuinfo): add microcode
Add microcode from Windows registry Update Revision REG_BINARY.
2020-10-14 10:54:02 -04:00
Brian Inglis 9fcee9bb1e fhandler_proc.cc(format_proc_cpuinfo): add bogomips
Add bogomips which has been cpu MHz*2 since Pentium MMX.
2020-10-14 10:54:02 -04:00
Brian Inglis 996295780b fhandler_proc.cc(format_proc_cpuinfo): round cpu MHz
Round cpu MHz to correct Windows and match Linux cpuinfo.
2020-10-14 10:54:02 -04:00
Brian Inglis 9f73e24847 fhandler_proc.cc(format_proc_cpuinfo): fix AMD physical cores count
Fix AMD physical cores count documented as core_info low byte + 1.
2020-10-14 10:54:02 -04:00
Brian Inglis 6234028f99 fhandler_proc.cc(format_proc_cpuinfo): fix cpuid level count
Fix cpuid level count as number of non-zero leafs excluding sub-leafs.
2020-10-14 10:54:02 -04:00
Brian Inglis 148a282868 fhandler_proc.cc(format_proc_cpuinfo): fix cache size
Fix cache size return code handling and make AMD/Intel code common.
2020-10-14 10:54:02 -04:00
Takashi Yano ca4bce2094 Cygwin: Fix signal handling issue introduced by PTY related change.
- After commit 4186409101, there is a
  regression in signal handling reported in
  https://www.cygwin.com/ml/cygwin/2019-10/msg00010.html. This patch
  fixes the issue.
2020-10-14 10:54:02 -04:00
Ken Brown 632f2bbbfc Document the last bug fix 2020-10-14 10:54:02 -04:00
Ken Brown 2df029168f Cygwin: normalize_win32_path: improve error checking
If the source path starts with the Win32 long path prefix '\\?\' or
the NT object directory prefix '\??\', require the prefix to be
followed by 'UNC\' or '<drive letter>:\'.  Otherwise return EINVAL.

This fixes the assertion failure in symlink_info::check that was
reported here:

  https://cygwin.com/ml/cygwin/2019-09/msg00228.html

That assertion failure was caused by normalize_win32_path returning a
path with no backslashes when the source path was '\\?\DRIVE'.
2020-10-14 10:54:02 -04:00
Takashi Yano 0479adc860 Cygwin: pty: Fix PTY so that cygwin setup shows help with -h option.
- After commit 169d65a577, cygwin
  setup fails to show help message when -h option is specified, as
  reported in https://cygwin.com/ml/cygwin/2019-09/msg00248.html.
  This patch fixes the problem.
2020-10-14 10:54:02 -04:00
Ken Brown 18cb14020e Document the last change 2020-10-14 10:54:01 -04:00
Ken Brown 0b56018163 Cygwin: rmdir: fail if last component is a symlink, as on Linux
If the last component of the directory name is a symlink followed by a
slash, rmdir now fails, following Linux but not POSIX, even if the
symlink resolves to an existing empty directory.

mkdir was similarly changed in 2009 in commit
52dba6a5c4.  Modify a comment to clarify
the purpose of that commit.

Addresses https://cygwin.com/ml/cygwin/2019-09/msg00221.html.
2020-10-14 10:54:01 -04:00
Ken Brown e0d56b3ec1 Cygwin: remove old cruft from path_conv::check
Prior to commit b0717aae, path_conv::check had the following code:

      if (strncmp (path, "\\\\.\\", 4))
        {
          /* Windows ignores trailing dots and spaces in the last path
             component, and ignores exactly one trailing dot in inner
             path components. */
          char *tail = NULL;
          [...]
          if (!tail || tail == path)
            /* nothing */;
          else if (tail[-1] != '\\')
            {
              *tail = '\0';
          [...]
        }

Commit b0717aae0 intended to disable this code, but it inadvertently
disabled only part of it.  In particular, the declaration of the local
tail variable was in the disabled code, but the following remained:

          if (!tail || tail == path)
            /* nothing */;
          else if (tail[-1] != '\\')
            {
              *tail = '\0';
          [...]
        }

[A later commit removed the disabled code.]

The tail variable here points into a string different from path,
causing that string to be truncated under some circumstances.  See

  https://cygwin.com/ml/cygwin/2019-09/msg00001.html

for more details.

This commit fixes the problem by removing the leftover code
that was intended to be removed in b0717aae.
2020-10-14 10:54:01 -04:00
Takashi Yano a8264931e4 Cygwin: Fix incorrect TTY for non-cygwin process.
- After commit d4045fdbef, the TTY
  displayed by ps command is incorrect if the process is non-cygwin
  process. This patch fixes this issue.
2020-10-14 10:54:01 -04:00
Takashi Yano 0269c1d8fa Cygwin: console: Make console input work in GDB and strace.
- After commit 2232498c71, console
  input cause error in GDB or strace. This patch fixes this issue.
2020-10-14 10:54:01 -04:00
Takashi Yano dac0c6227c Cygwin: pty: Add missing guard when PTY is in the legacy mode. 2020-10-14 10:54:01 -04:00
Takashi Yano 7fdd3874d3 Cygwin: pty: Add charset conversion for console apps in legacy PTY. 2020-10-14 10:54:01 -04:00
Takashi Yano 82d338d78c Cygwin: pty: Unify the charset conversion codes into a function. 2020-10-14 10:54:01 -04:00
Takashi Yano f7e74231cd Cygwin: pty: Make GDB work again on pty. 2020-10-14 10:54:01 -04:00
Takashi Yano dc80badc50 Cygwin: pty: Avoid potential segfault in PTY code when ppid = 1. 2020-10-14 10:54:01 -04:00
Takashi Yano 5764f3dd50 Cygwin: console: Revive Win7 compatibility.
- The commit fca4cda7a4 broke Win7
  compatibility. This patch fixes the issue.
2020-10-14 10:54:01 -04:00
Ken Brown 1daa31008a Cygwin: document last change 2020-10-14 10:54:01 -04:00
Achim Gratz 7513fee1bb winsup/cygwin/times.cc (times): follow Linux and allow for a NULL buf argument
Adresses the problem reported here:

  https://cygwin.com/ml/cygwin/2019-09/msg00141.html
2020-10-14 10:54:01 -04:00
Takashi Yano 9103de7028 Cygwin: pty: Use autoload feature for pseudo console system calls.
- The autoload feature is used rather than GetModuleHandle(),
  GetProcAddress() for CreatePseudoConsole(), ResizePseudoConsole()
  and ClosePseudoConsole().
2020-10-14 10:54:01 -04:00
Takashi Yano 55f0eb2e84 Cygwin: pty: Correct typos that do not fit the coding style. 2020-10-14 10:54:00 -04:00
Takashi Yano b23705f60b Cygwin: pty: Change the timing of clearing screen.
- The code which clears screen is moved from reset_switch_to_pcon()
  to fixup_after_exec() because it seems not too early even at this
  timing.
2020-10-14 10:54:00 -04:00
Takashi Yano 53b381dec9 Cygwin: pty: Use system NLS function instead of PTY's own one.
- Since calling system __loadlocale() caused execution error,
  PTY used its own NLS function. The cause of the error has been
  found, the corresponding code has been rewritten using system
  function.
2020-10-14 10:54:00 -04:00
Takashi Yano 36c814d0fd Cygwin: pty: Fix bad file descriptor error in some environment.
- The bad file descriptor problem reported in:
  https://cygwin.com/ml/cygwin-patches/2019-q3/msg00104.html
  was recurring. Fixed again.
2020-10-14 10:54:00 -04:00
Mark Geisert 52593b8619 Cygwin: fix CPU_SET macro visibility
The CPU_SET macros defined in Cygwin's include/sys/cpuset.h must not
be visible in an application's namespace unless _GNU_SOURCE has been
#defined.  Internally this means wrapping them in #if __GNU_VISIBLE.
2020-10-14 10:54:00 -04:00
Takashi Yano 991511fbda Cygwin: console: Fix read() in non-canonical mode.
- In non-canonical mode, cygwin console returned only one character
  even if several keys are typed before read() called. This patch
  fixes this behaviour.
2020-10-14 10:54:00 -04:00
Takashi Yano 527b44af0d Cygwin: pty: Switch input and output pipes individually.
- Previously, input and output pipes were switched together between
  the traditional pty and the pseudo console. However, for example,
  if stdin is redirected to another device, it is better to leave
  input pipe traditional pty side even for non-cygwin program. This
  patch realizes such behaviour.
2020-10-14 10:54:00 -04:00
Takashi Yano 7eedc9b1a0 Cygwin: pty: Prevent the helper process from exiting by Ctrl-C. 2020-10-14 10:54:00 -04:00
Takashi Yano 0d1678f52d Cygwin: pty: Fix screen alternation while pseudo console switching.
- If screen alternated while pseudo console switching, it sometimes
  failed. This might happen when the output of the non-cygwin program
  is piped to less. This patch fixes this issue.
2020-10-14 10:54:00 -04:00
Takashi Yano a0e1fe0ba1 Cygwin: pty: Fix the behaviour of Ctrl-C in the pseudo console mode.
- When the I/O pipe is switched to the pseudo console side, the
  behaviour of Ctrl-C was unstable. This rarely happens, however,
  for example, shell sometimes crashes by Ctrl-C in that situation.
  Furthermore, Ctrl-C was ignored if output of non-cygwin program
  is redirected to pipe. This patch fixes these issues.
2020-10-14 10:54:00 -04:00
Takashi Yano 381b74f6b4 Cygwin: pty: Make SetConsoleCursorPosition() to be hooked.
- Win32 API SetConsoleCursorPosition() injects ANSI escape sequence
  to pseudo console. Therefore, it should be added to the API list
  to be hooked.
2020-10-14 10:54:00 -04:00
Takashi Yano b38e10fdbe Cygwin: pty: Make sure to show system error messages
- Forcibly attach to pseudo console in advance so that the error
  messages by system_printf() are displayed to screen reliably.
  This is needed when stdout is redirected to another pty. In this
  case, process has two ptys opened. However, process can attach
  to only one console. So it is necessary to change console attached.
2020-10-14 10:54:00 -04:00
Takashi Yano 421f80d23d Cygwin: pty: Fix potential state mismatch regarding pseudo console.
- PTY with pseudo console support sitll has problem which potentially
  cause state mismatch between state variable and real console state.
  This patch fixes this issue.
2020-10-14 10:54:00 -04:00