diff options
Diffstat (limited to 'kernel/sys.c')
-rw-r--r-- | kernel/sys.c | 10 |
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 | } |
200 | out_unlock: | 201 | out_unlock: |
201 | read_unlock(&tasklist_lock); | 202 | read_unlock(&tasklist_lock); |
203 | rcu_read_unlock(); | ||
202 | out: | 204 | out: |
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; |