diff options
Diffstat (limited to 'fs/proc/base.c')
| -rw-r--r-- | fs/proc/base.c | 19 | 
1 files changed, 14 insertions, 5 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c index d86c0afc8a85..617db4e0faa0 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -551,8 +551,17 @@ static int proc_oom_score(struct seq_file *m, struct pid_namespace *ns,  {  	unsigned long totalpages = totalram_pages() + total_swap_pages;  	unsigned long points = 0; +	long badness; + +	badness = oom_badness(task, totalpages); +	/* +	 * Special case OOM_SCORE_ADJ_MIN for all others scale the +	 * badness value into [0, 2000] range which we have been +	 * exporting for a long time so userspace might depend on it. +	 */ +	if (badness != LONG_MIN) +		points = (1000 + badness * 1000 / (long)totalpages) * 2 / 3; -	points = oom_badness(task, totalpages) * 1000 / totalpages;  	seq_printf(m, "%lu\n", points);  	return 0; @@ -2189,16 +2198,16 @@ struct map_files_info {  };  /* - * Only allow CAP_SYS_ADMIN to follow the links, due to concerns about how the - * symlinks may be used to bypass permissions on ancestor directories in the - * path to the file in question. + * Only allow CAP_SYS_ADMIN and CAP_CHECKPOINT_RESTORE to follow the links, due + * to concerns about how the symlinks may be used to bypass permissions on + * ancestor directories in the path to the file in question.   */  static const char *  proc_map_files_get_link(struct dentry *dentry,  			struct inode *inode,  		        struct delayed_call *done)  { -	if (!capable(CAP_SYS_ADMIN)) +	if (!checkpoint_restore_ns_capable(&init_user_ns))  		return ERR_PTR(-EPERM);  	return proc_pid_get_link(dentry, inode, done);  |