diff options
Diffstat (limited to 'kernel/timer.c')
-rw-r--r-- | kernel/timer.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/kernel/timer.c b/kernel/timer.c index a297ffcf888e..6ec7e7e0db43 100644 --- a/kernel/timer.c +++ b/kernel/timer.c | |||
@@ -861,7 +861,13 @@ EXPORT_SYMBOL(mod_timer); | |||
861 | * | 861 | * |
862 | * mod_timer_pinned() is a way to update the expire field of an | 862 | * mod_timer_pinned() is a way to update the expire field of an |
863 | * active timer (if the timer is inactive it will be activated) | 863 | * active timer (if the timer is inactive it will be activated) |
864 | * and not allow the timer to be migrated to a different CPU. | 864 | * and to ensure that the timer is scheduled on the current CPU. |
865 | * | ||
866 | * Note that this does not prevent the timer from being migrated | ||
867 | * when the current CPU goes offline. If this is a problem for | ||
868 | * you, use CPU-hotplug notifiers to handle it correctly, for | ||
869 | * example, cancelling the timer when the corresponding CPU goes | ||
870 | * offline. | ||
865 | * | 871 | * |
866 | * mod_timer_pinned(timer, expires) is equivalent to: | 872 | * mod_timer_pinned(timer, expires) is equivalent to: |
867 | * | 873 | * |
@@ -1102,7 +1108,9 @@ static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long), | |||
1102 | * warnings as well as problems when looking into | 1108 | * warnings as well as problems when looking into |
1103 | * timer->lockdep_map, make a copy and use that here. | 1109 | * timer->lockdep_map, make a copy and use that here. |
1104 | */ | 1110 | */ |
1105 | struct lockdep_map lockdep_map = timer->lockdep_map; | 1111 | struct lockdep_map lockdep_map; |
1112 | |||
1113 | lockdep_copy_map(&lockdep_map, &timer->lockdep_map); | ||
1106 | #endif | 1114 | #endif |
1107 | /* | 1115 | /* |
1108 | * Couple the lock chain with the lock chain at | 1116 | * Couple the lock chain with the lock chain at |
@@ -1427,25 +1435,25 @@ SYSCALL_DEFINE0(getppid) | |||
1427 | SYSCALL_DEFINE0(getuid) | 1435 | SYSCALL_DEFINE0(getuid) |
1428 | { | 1436 | { |
1429 | /* Only we change this so SMP safe */ | 1437 | /* Only we change this so SMP safe */ |
1430 | return current_uid(); | 1438 | return from_kuid_munged(current_user_ns(), current_uid()); |
1431 | } | 1439 | } |
1432 | 1440 | ||
1433 | SYSCALL_DEFINE0(geteuid) | 1441 | SYSCALL_DEFINE0(geteuid) |
1434 | { | 1442 | { |
1435 | /* Only we change this so SMP safe */ | 1443 | /* Only we change this so SMP safe */ |
1436 | return current_euid(); | 1444 | return from_kuid_munged(current_user_ns(), current_euid()); |
1437 | } | 1445 | } |
1438 | 1446 | ||
1439 | SYSCALL_DEFINE0(getgid) | 1447 | SYSCALL_DEFINE0(getgid) |
1440 | { | 1448 | { |
1441 | /* Only we change this so SMP safe */ | 1449 | /* Only we change this so SMP safe */ |
1442 | return current_gid(); | 1450 | return from_kgid_munged(current_user_ns(), current_gid()); |
1443 | } | 1451 | } |
1444 | 1452 | ||
1445 | SYSCALL_DEFINE0(getegid) | 1453 | SYSCALL_DEFINE0(getegid) |
1446 | { | 1454 | { |
1447 | /* Only we change this so SMP safe */ | 1455 | /* Only we change this so SMP safe */ |
1448 | return current_egid(); | 1456 | return from_kgid_munged(current_user_ns(), current_egid()); |
1449 | } | 1457 | } |
1450 | 1458 | ||
1451 | #endif | 1459 | #endif |