Commit ab3a7c2f authored by Michael Klein's avatar Michael Klein
Browse files

drop privileges before changing process priority or sending signals

- replaces uid check from d18e9a48
parent 42b08f22
...@@ -513,16 +513,15 @@ void Process_toggleTag(Process* this) { ...@@ -513,16 +513,15 @@ void Process_toggleTag(Process* this) {
} }
bool Process_setPriority(Process* this, int priority) { bool Process_setPriority(Process* this, int priority) {
if ( Process_getuid == 0 || Process_getuid == (int) this->st_uid ) { uid_t euid = geteuid();
int old_prio = getpriority(PRIO_PROCESS, this->pid); seteuid(getuid());
int err = setpriority(PRIO_PROCESS, this->pid, priority); int old_prio = getpriority(PRIO_PROCESS, this->pid);
if (err == 0 && old_prio != getpriority(PRIO_PROCESS, this->pid)) { int err = setpriority(PRIO_PROCESS, this->pid, priority);
this->nice = priority; seteuid(euid);
} if (err == 0 && old_prio != getpriority(PRIO_PROCESS, this->pid)) {
return (err == 0); this->nice = priority;
} }
else return (err == 0);
return false;
} }
bool Process_changePriorityBy(Process* this, size_t delta) { bool Process_changePriorityBy(Process* this, size_t delta) {
...@@ -530,8 +529,10 @@ bool Process_changePriorityBy(Process* this, size_t delta) { ...@@ -530,8 +529,10 @@ bool Process_changePriorityBy(Process* this, size_t delta) {
} }
void Process_sendSignal(Process* this, size_t sgn) { void Process_sendSignal(Process* this, size_t sgn) {
if ( Process_getuid == 0 || Process_getuid == (int) this->st_uid ) uid_t euid = geteuid();
kill(this->pid, (int) sgn); seteuid(getuid());
kill(this->pid, (int) sgn);
seteuid(euid);
} }
long Process_pidCompare(const void* v1, const void* v2) { long Process_pidCompare(const void* v1, const void* v2) {
......
...@@ -158,6 +158,8 @@ typedef struct ProcessClass_ { ...@@ -158,6 +158,8 @@ typedef struct ProcessClass_ {
#define ONE_DECIMAL_M (ONE_DECIMAL_K * ONE_DECIMAL_K) #define ONE_DECIMAL_M (ONE_DECIMAL_K * ONE_DECIMAL_K)
#define ONE_DECIMAL_G (ONE_DECIMAL_M * ONE_DECIMAL_K) #define ONE_DECIMAL_G (ONE_DECIMAL_M * ONE_DECIMAL_K)
extern char Process_pidFormat[20];
void Process_setupColumnWidths(); void Process_setupColumnWidths();
void Process_humanNumber(RichString* str, unsigned long number, bool coloring); void Process_humanNumber(RichString* str, unsigned long number, bool coloring);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment