[PATCH] Cygwin: setpriority, sched_setparam: add missing process access right

Christian Franke Christian.Franke@t-online.de
Mon Dec 2 16:14:59 GMT 2024


Corinna Vinschen wrote:
> On Nov 29 17:12, Christian Franke wrote:
>> Regression, sorry!
> Shit happens *shrug*
>
>> 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;
> The commit message doesn't explain this part of the patch.  What does it
> fix?

Same patch with additional message line is attached.

-------------- next part --------------
From e8f34a43b0f7b171e3a7225d7e325e65cfb61dbc Mon Sep 17 00:00:00 2001
From: Christian Franke <christian.franke@t-online.de>
Date: Mon, 2 Dec 2024 17:07:18 +0100
Subject: [PATCH] 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 <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