[PATCH] Cygwin: setpriority, sched_setparam: add missing process access right
Christian Franke
Christian.Franke@t-online.de
Fri Nov 29 16:12:56 GMT 2024
Regression, sorry!
--
Regards,
Christian
-------------- next part --------------
From fab7d866fa995a360dc1b68f95662a7a24172aeb Mon Sep 17 00:00:00 2001
From: Christian Franke <christian.franke@t-online.de>
Date: Fri, 29 Nov 2024 17:10:25 +0100
Subject: [PATCH] Cygwin: setpriority, sched_setparam: add missing process
access right
set_and_check_winprio() also requires PROCESS_QUERY_LIMITED_INFORMATION.
Fixes: 153b51ee08ef ("Cygwin: setpriority, sched_setparam: fail if Windows sets a lower priority")
Signed-off-by: Christian Franke <christian.franke@t-online.de>
---
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 e3bf35cf7..ebe401b93 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 b8067d547..61d5e7be4 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 60350b690..d4fba632c 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
--
2.45.1
More information about the Cygwin-patches
mailing list