diff options
Diffstat (limited to 'kernel/sched/isolation.c')
| -rw-r--r-- | kernel/sched/isolation.c | 21 | 
1 files changed, 19 insertions, 2 deletions
diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c index 008d6ac2342b..808244f3ddd9 100644 --- a/kernel/sched/isolation.c +++ b/kernel/sched/isolation.c @@ -149,6 +149,9 @@ __setup("nohz_full=", housekeeping_nohz_full_setup);  static int __init housekeeping_isolcpus_setup(char *str)  {  	unsigned int flags = 0; +	bool illegal = false; +	char *par; +	int len;  	while (isalpha(*str)) {  		if (!strncmp(str, "nohz,", 5)) { @@ -169,8 +172,22 @@ static int __init housekeeping_isolcpus_setup(char *str)  			continue;  		} -		pr_warn("isolcpus: Error, unknown flag\n"); -		return 0; +		/* +		 * Skip unknown sub-parameter and validate that it is not +		 * containing an invalid character. +		 */ +		for (par = str, len = 0; *str && *str != ','; str++, len++) { +			if (!isalpha(*str) && *str != '_') +				illegal = true; +		} + +		if (illegal) { +			pr_warn("isolcpus: Invalid flag %.*s\n", len, par); +			return 0; +		} + +		pr_info("isolcpus: Skipped unknown flag %.*s\n", len, par); +		str++;  	}  	/* Default behaviour for isolcpus without flags */  |