https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=a82bf559088d2b77cef355f4883b6692dcd1eb7c
commit a82bf559088d2b77cef355f4883b6692dcd1eb7c Author: Christian Franke <[email protected]> AuthorDate: Mon Dec 2 17:07:18 2024 +0100 Commit: Corinna Vinschen <[email protected]> CommitDate: Mon Dec 2 17:23:43 2024 +0100 Cygwin: setpriority, sched_setparam: add missing process access right set_and_check_winprio() also requires PROCESS_QUERY_LIMITED_INFORMATION. Also add an early check for this access right to set_and_check_winprio(). Fixes: 153b51ee08ef ("Cygwin: setpriority, sched_setparam: fail if Windows sets a lower priority") Signed-off-by: Christian Franke <[email protected]> Diff: --- winsup/cygwin/miscfuncs.cc | 2 ++ winsup/cygwin/sched.cc | 4 +++- winsup/cygwin/syscalls.cc | 5 +++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/winsup/cygwin/miscfuncs.cc b/winsup/cygwin/miscfuncs.cc index e3bf35cf7552..ebe401b93f63 100644 --- a/winsup/cygwin/miscfuncs.cc +++ b/winsup/cygwin/miscfuncs.cc @@ -190,6 +190,8 @@ bool set_and_check_winprio (HANDLE proc, DWORD prio) { DWORD prev_prio = GetPriorityClass (proc); + if (!prev_prio) + return false; if (prev_prio == prio) return true; diff --git a/winsup/cygwin/sched.cc b/winsup/cygwin/sched.cc index b8067d5470d0..61d5e7be49a3 100644 --- a/winsup/cygwin/sched.cc +++ b/winsup/cygwin/sched.cc @@ -260,7 +260,9 @@ sched_setparam (pid_t pid, const struct sched_param *param) set_errno (ESRCH); return -1; } - process = OpenProcess (PROCESS_SET_INFORMATION, FALSE, p->dwProcessId); + process = OpenProcess (PROCESS_SET_INFORMATION | + PROCESS_QUERY_LIMITED_INFORMATION, + FALSE, p->dwProcessId); if (!process) { set_errno (ESRCH); diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 60350b6904b2..d4fba632c698 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -3869,8 +3869,9 @@ setpriority (int which, id_t who, int value) continue; break; } - HANDLE proc_h = OpenProcess (PROCESS_SET_INFORMATION, FALSE, - p->dwProcessId); + HANDLE proc_h = OpenProcess (PROCESS_SET_INFORMATION | + PROCESS_QUERY_LIMITED_INFORMATION, + FALSE, p->dwProcessId); if (!proc_h) error = EPERM; else
