@@ -280,6 +280,12 @@ static void timens_put(struct ns_common *ns)
280
280
put_time_ns (to_time_ns (ns ));
281
281
}
282
282
283
+ static void timens_commit (struct task_struct * tsk , struct time_namespace * ns )
284
+ {
285
+ timens_set_vvar_page (tsk , ns );
286
+ vdso_join_timens (tsk , ns );
287
+ }
288
+
283
289
static int timens_install (struct nsset * nsset , struct ns_common * new )
284
290
{
285
291
struct nsproxy * nsproxy = nsset -> nsproxy ;
@@ -292,9 +298,8 @@ static int timens_install(struct nsset *nsset, struct ns_common *new)
292
298
!ns_capable (nsset -> cred -> user_ns , CAP_SYS_ADMIN ))
293
299
return - EPERM ;
294
300
295
- timens_set_vvar_page (current , ns );
296
301
297
- vdso_join_timens (current , ns );
302
+ timens_commit (current , ns );
298
303
299
304
get_time_ns (ns );
300
305
put_time_ns (nsproxy -> time_ns );
@@ -315,14 +320,12 @@ int timens_on_fork(struct nsproxy *nsproxy, struct task_struct *tsk)
315
320
if (nsproxy -> time_ns == nsproxy -> time_ns_for_children )
316
321
return 0 ;
317
322
318
- timens_set_vvar_page (tsk , ns );
319
-
320
- vdso_join_timens (tsk , ns );
321
-
322
323
get_time_ns (ns );
323
324
put_time_ns (nsproxy -> time_ns );
324
325
nsproxy -> time_ns = ns ;
325
326
327
+ timens_commit (tsk , ns );
328
+
326
329
return 0 ;
327
330
}
328
331
0 commit comments