| .. | .. | 
|---|
| 92 | 92 | #include <linux/user_namespace.h> | 
|---|
| 93 | 93 | #include <linux/fs_struct.h> | 
|---|
| 94 | 94 |  | 
|---|
| 95 |  | -#include <asm/pgtable.h> | 
|---|
| 96 | 95 | #include <asm/processor.h> | 
|---|
| 97 | 96 | #include "internal.h" | 
|---|
| 98 | 97 |  | 
|---|
| .. | .. | 
|---|
| 248 | 247 | seq_putc(m, '\n'); | 
|---|
| 249 | 248 | } | 
|---|
| 250 | 249 |  | 
|---|
| 251 |  | -static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign, | 
|---|
| 252 |  | -				    sigset_t *catch) | 
|---|
|  | 250 | +static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *sigign, | 
|---|
|  | 251 | +				    sigset_t *sigcatch) | 
|---|
| 253 | 252 | { | 
|---|
| 254 | 253 | struct k_sigaction *k; | 
|---|
| 255 | 254 | int i; | 
|---|
| .. | .. | 
|---|
| 257 | 256 | k = p->sighand->action; | 
|---|
| 258 | 257 | for (i = 1; i <= _NSIG; ++i, ++k) { | 
|---|
| 259 | 258 | if (k->sa.sa_handler == SIG_IGN) | 
|---|
| 260 |  | -			sigaddset(ign, i); | 
|---|
|  | 259 | +			sigaddset(sigign, i); | 
|---|
| 261 | 260 | else if (k->sa.sa_handler != SIG_DFL) | 
|---|
| 262 |  | -			sigaddset(catch, i); | 
|---|
|  | 261 | +			sigaddset(sigcatch, i); | 
|---|
| 263 | 262 | } | 
|---|
| 264 | 263 | } | 
|---|
| 265 | 264 |  | 
|---|
| .. | .. | 
|---|
| 342 | 341 | seq_put_decimal_ull(m, "NoNewPrivs:\t", task_no_new_privs(p)); | 
|---|
| 343 | 342 | #ifdef CONFIG_SECCOMP | 
|---|
| 344 | 343 | seq_put_decimal_ull(m, "\nSeccomp:\t", p->seccomp.mode); | 
|---|
|  | 344 | +#ifdef CONFIG_SECCOMP_FILTER | 
|---|
|  | 345 | +	seq_put_decimal_ull(m, "\nSeccomp_filters:\t", | 
|---|
|  | 346 | +			    atomic_read(&p->seccomp.filter_count)); | 
|---|
| 345 | 347 | #endif | 
|---|
| 346 |  | -	seq_printf(m, "\nSpeculation_Store_Bypass:\t"); | 
|---|
|  | 348 | +#endif | 
|---|
|  | 349 | +	seq_puts(m, "\nSpeculation_Store_Bypass:\t"); | 
|---|
| 347 | 350 | switch (arch_prctl_spec_ctrl_get(p, PR_SPEC_STORE_BYPASS)) { | 
|---|
| 348 | 351 | case -EINVAL: | 
|---|
| 349 |  | -		seq_printf(m, "unknown"); | 
|---|
|  | 352 | +		seq_puts(m, "unknown"); | 
|---|
| 350 | 353 | break; | 
|---|
| 351 | 354 | case PR_SPEC_NOT_AFFECTED: | 
|---|
| 352 |  | -		seq_printf(m, "not vulnerable"); | 
|---|
|  | 355 | +		seq_puts(m, "not vulnerable"); | 
|---|
| 353 | 356 | break; | 
|---|
| 354 | 357 | case PR_SPEC_PRCTL | PR_SPEC_FORCE_DISABLE: | 
|---|
| 355 |  | -		seq_printf(m, "thread force mitigated"); | 
|---|
|  | 358 | +		seq_puts(m, "thread force mitigated"); | 
|---|
| 356 | 359 | break; | 
|---|
| 357 | 360 | case PR_SPEC_PRCTL | PR_SPEC_DISABLE: | 
|---|
| 358 |  | -		seq_printf(m, "thread mitigated"); | 
|---|
|  | 361 | +		seq_puts(m, "thread mitigated"); | 
|---|
| 359 | 362 | break; | 
|---|
| 360 | 363 | case PR_SPEC_PRCTL | PR_SPEC_ENABLE: | 
|---|
| 361 |  | -		seq_printf(m, "thread vulnerable"); | 
|---|
|  | 364 | +		seq_puts(m, "thread vulnerable"); | 
|---|
| 362 | 365 | break; | 
|---|
| 363 | 366 | case PR_SPEC_DISABLE: | 
|---|
| 364 |  | -		seq_printf(m, "globally mitigated"); | 
|---|
|  | 367 | +		seq_puts(m, "globally mitigated"); | 
|---|
| 365 | 368 | break; | 
|---|
| 366 | 369 | default: | 
|---|
| 367 |  | -		seq_printf(m, "vulnerable"); | 
|---|
|  | 370 | +		seq_puts(m, "vulnerable"); | 
|---|
| 368 | 371 | break; | 
|---|
| 369 | 372 | } | 
|---|
| 370 | 373 | seq_putc(m, '\n'); | 
|---|
| .. | .. | 
|---|
| 381 | 384 | static void task_cpus_allowed(struct seq_file *m, struct task_struct *task) | 
|---|
| 382 | 385 | { | 
|---|
| 383 | 386 | seq_printf(m, "Cpus_allowed:\t%*pb\n", | 
|---|
| 384 |  | -		   cpumask_pr_args(&task->cpus_allowed)); | 
|---|
|  | 387 | +		   cpumask_pr_args(&task->cpus_mask)); | 
|---|
| 385 | 388 | seq_printf(m, "Cpus_allowed_list:\t%*pbl\n", | 
|---|
| 386 |  | -		   cpumask_pr_args(&task->cpus_allowed)); | 
|---|
|  | 389 | +		   cpumask_pr_args(&task->cpus_mask)); | 
|---|
| 387 | 390 | } | 
|---|
| 388 | 391 |  | 
|---|
| 389 | 392 | static inline void task_core_dumping(struct seq_file *m, struct mm_struct *mm) | 
|---|
| 390 | 393 | { | 
|---|
| 391 | 394 | seq_put_decimal_ull(m, "CoreDumping:\t", !!mm->core_state); | 
|---|
| 392 | 395 | seq_putc(m, '\n'); | 
|---|
|  | 396 | +} | 
|---|
|  | 397 | + | 
|---|
|  | 398 | +static inline void task_thp_status(struct seq_file *m, struct mm_struct *mm) | 
|---|
|  | 399 | +{ | 
|---|
|  | 400 | +	bool thp_enabled = IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE); | 
|---|
|  | 401 | + | 
|---|
|  | 402 | +	if (thp_enabled) | 
|---|
|  | 403 | +		thp_enabled = !test_bit(MMF_DISABLE_THP, &mm->flags); | 
|---|
|  | 404 | +	seq_printf(m, "THP_enabled:\t%d\n", thp_enabled); | 
|---|
| 393 | 405 | } | 
|---|
| 394 | 406 |  | 
|---|
| 395 | 407 | int proc_pid_status(struct seq_file *m, struct pid_namespace *ns, | 
|---|
| .. | .. | 
|---|
| 406 | 418 | if (mm) { | 
|---|
| 407 | 419 | task_mem(m, mm); | 
|---|
| 408 | 420 | task_core_dumping(m, mm); | 
|---|
|  | 421 | +		task_thp_status(m, mm); | 
|---|
| 409 | 422 | mmput(mm); | 
|---|
| 410 | 423 | } | 
|---|
| 411 | 424 | task_sig(m, task); | 
|---|
| .. | .. | 
|---|
| 523 | 536 | nice = task_nice(task); | 
|---|
| 524 | 537 |  | 
|---|
| 525 | 538 | /* convert nsec -> ticks */ | 
|---|
| 526 |  | -	start_time = nsec_to_clock_t(task->real_start_time); | 
|---|
|  | 539 | +	start_time = nsec_to_clock_t(task->start_boottime); | 
|---|
| 527 | 540 |  | 
|---|
| 528 | 541 | seq_put_decimal_ull(m, "", pid_nr_ns(pid, ns)); | 
|---|
| 529 | 542 | seq_puts(m, " ("); | 
|---|
| .. | .. | 
|---|
| 625 | 638 | int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns, | 
|---|
| 626 | 639 | struct pid *pid, struct task_struct *task) | 
|---|
| 627 | 640 | { | 
|---|
| 628 |  | -	unsigned long size = 0, resident = 0, shared = 0, text = 0, data = 0; | 
|---|
| 629 | 641 | struct mm_struct *mm = get_task_mm(task); | 
|---|
| 630 | 642 |  | 
|---|
| 631 | 643 | if (mm) { | 
|---|
|  | 644 | +		unsigned long size; | 
|---|
|  | 645 | +		unsigned long resident = 0; | 
|---|
|  | 646 | +		unsigned long shared = 0; | 
|---|
|  | 647 | +		unsigned long text = 0; | 
|---|
|  | 648 | +		unsigned long data = 0; | 
|---|
|  | 649 | + | 
|---|
| 632 | 650 | size = task_statm(mm, &shared, &text, &data, &resident); | 
|---|
| 633 | 651 | mmput(mm); | 
|---|
| 634 |  | -	} | 
|---|
| 635 |  | -	/* | 
|---|
| 636 |  | -	 * For quick read, open code by putting numbers directly | 
|---|
| 637 |  | -	 * expected format is | 
|---|
| 638 |  | -	 * seq_printf(m, "%lu %lu %lu %lu 0 %lu 0\n", | 
|---|
| 639 |  | -	 *               size, resident, shared, text, data); | 
|---|
| 640 |  | -	 */ | 
|---|
| 641 |  | -	seq_put_decimal_ull(m, "", size); | 
|---|
| 642 |  | -	seq_put_decimal_ull(m, " ", resident); | 
|---|
| 643 |  | -	seq_put_decimal_ull(m, " ", shared); | 
|---|
| 644 |  | -	seq_put_decimal_ull(m, " ", text); | 
|---|
| 645 |  | -	seq_put_decimal_ull(m, " ", 0); | 
|---|
| 646 |  | -	seq_put_decimal_ull(m, " ", data); | 
|---|
| 647 |  | -	seq_put_decimal_ull(m, " ", 0); | 
|---|
| 648 |  | -	seq_putc(m, '\n'); | 
|---|
| 649 | 652 |  | 
|---|
|  | 653 | +		/* | 
|---|
|  | 654 | +		 * For quick read, open code by putting numbers directly | 
|---|
|  | 655 | +		 * expected format is | 
|---|
|  | 656 | +		 * seq_printf(m, "%lu %lu %lu %lu 0 %lu 0\n", | 
|---|
|  | 657 | +		 *               size, resident, shared, text, data); | 
|---|
|  | 658 | +		 */ | 
|---|
|  | 659 | +		seq_put_decimal_ull(m, "", size); | 
|---|
|  | 660 | +		seq_put_decimal_ull(m, " ", resident); | 
|---|
|  | 661 | +		seq_put_decimal_ull(m, " ", shared); | 
|---|
|  | 662 | +		seq_put_decimal_ull(m, " ", text); | 
|---|
|  | 663 | +		seq_put_decimal_ull(m, " ", 0); | 
|---|
|  | 664 | +		seq_put_decimal_ull(m, " ", data); | 
|---|
|  | 665 | +		seq_put_decimal_ull(m, " ", 0); | 
|---|
|  | 666 | +		seq_putc(m, '\n'); | 
|---|
|  | 667 | +	} else { | 
|---|
|  | 668 | +		seq_write(m, "0 0 0 0 0 0 0\n", 14); | 
|---|
|  | 669 | +	} | 
|---|
| 650 | 670 | return 0; | 
|---|
| 651 | 671 | } | 
|---|
| 652 | 672 |  | 
|---|
| .. | .. | 
|---|
| 711 | 731 | { | 
|---|
| 712 | 732 | struct inode *inode = file_inode(seq->file); | 
|---|
| 713 | 733 |  | 
|---|
| 714 |  | -	seq_printf(seq, "%d ", pid_nr_ns(v, proc_pid_ns(inode))); | 
|---|
|  | 734 | +	seq_printf(seq, "%d ", pid_nr_ns(v, proc_pid_ns(inode->i_sb))); | 
|---|
| 715 | 735 | return 0; | 
|---|
| 716 | 736 | } | 
|---|
| 717 | 737 |  | 
|---|