aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sys.c')
-rw-r--r--kernel/sys.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/kernel/sys.c b/kernel/sys.c
index 585d6cd10040..26a6b73a6b85 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -162,6 +162,7 @@ SYSCALL_DEFINE3(setpriority, int, which, int, who, int, niceval)
162 if (niceval > 19) 162 if (niceval > 19)
163 niceval = 19; 163 niceval = 19;
164 164
165 rcu_read_lock();
165 read_lock(&tasklist_lock); 166 read_lock(&tasklist_lock);
166 switch (which) { 167 switch (which) {
167 case PRIO_PROCESS: 168 case PRIO_PROCESS:
@@ -189,16 +190,17 @@ SYSCALL_DEFINE3(setpriority, int, which, int, who, int, niceval)
189 !(user = find_user(who))) 190 !(user = find_user(who)))
190 goto out_unlock; /* No processes for this user */ 191 goto out_unlock; /* No processes for this user */
191 192
192 do_each_thread(g, p) 193 do_each_thread(g, p) {
193 if (__task_cred(p)->uid == who) 194 if (__task_cred(p)->uid == who)
194 error = set_one_prio(p, niceval, error); 195 error = set_one_prio(p, niceval, error);
195 while_each_thread(g, p); 196 } while_each_thread(g, p);
196 if (who != cred->uid) 197 if (who != cred->uid)
197 free_uid(user); /* For find_user() */ 198 free_uid(user); /* For find_user() */
198 break; 199 break;
199 } 200 }
200out_unlock: 201out_unlock:
201 read_unlock(&tasklist_lock); 202 read_unlock(&tasklist_lock);
203 rcu_read_unlock();
202out: 204out:
203 return error; 205 return error;
204} 206}
@@ -252,13 +254,13 @@ SYSCALL_DEFINE2(getpriority, int, which, int, who)
252 !(user = find_user(who))) 254 !(user = find_user(who)))
253 goto out_unlock; /* No processes for this user */ 255 goto out_unlock; /* No processes for this user */
254 256
255 do_each_thread(g, p) 257 do_each_thread(g, p) {
256 if (__task_cred(p)->uid == who) { 258 if (__task_cred(p)->uid == who) {
257 niceval = 20 - task_nice(p); 259 niceval = 20 - task_nice(p);
258 if (niceval > retval) 260 if (niceval > retval)
259 retval = niceval; 261 retval = niceval;
260 } 262 }
261 while_each_thread(g, p); 263 } while_each_thread(g, p);
262 if (who != cred->uid) 264 if (who != cred->uid)
263 free_uid(user); /* for find_user() */ 265 free_uid(user); /* for find_user() */
264 break; 266 break;