Commit 1b6baaba authored by Harshit Mogalapalli's avatar Harshit Mogalapalli Committed by Chen Ridong
Browse files

cgroup/cpuset: Cleanup signedness issue in cpu_exclusive_check()

mainline inclusion
from mainline-v6.7-rc1
commit 783a8334ec1cadefbb992ca2adbb459b0ee0f9f7
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I93ZFV
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=783a8334ec1cadefbb992ca2adbb459b0ee0f9f7



----------------------------------------------------------------------

Smatch complains about returning negative error codes from a type
bool function.

kernel/cgroup/cpuset.c:705 cpu_exclusive_check() warn:
	signedness bug returning '(-22)'

The code works correctly, but it is confusing.  The current behavior is
that cpu_exclusive_check() returns true if it's *NOT* exclusive.  Rename
it to cpusets_are_exclusive() and reverse the returns so it returns true
if it is exclusive and false if it's not.  Update both callers as well.

Reported-by: default avatarkernel test robot <lkp@intel.com>
Reported-by: default avatarDan Carpenter <error27@gmail.com>
Closes: https://lore.kernel.org/r/202309201706.2LhKdM6o-lkp@intel.com/


Signed-off-by: default avatarHarshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Reviewed-by: default avatarKamalesh Babulal <kamalesh.babulal@oracle.com>
Acked-by: default avatarWaiman Long <longman@redhat.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarChen Ridong <chenridong@huawei.com>
parent 573b00ca
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -757,18 +757,18 @@ static inline struct cpumask *fetch_xcpus(struct cpuset *cs)
}

/*
 * cpu_exclusive_check() - check if two cpusets are exclusive
 * cpusets_are_exclusive() - check if two cpusets are exclusive
 *
 * Return 0 if exclusive, -EINVAL if not
 * Return true if exclusive, false if not
 */
static inline bool cpu_exclusive_check(struct cpuset *cs1, struct cpuset *cs2)
static inline bool cpusets_are_exclusive(struct cpuset *cs1, struct cpuset *cs2)
{
	struct cpumask *xcpus1 = fetch_xcpus(cs1);
	struct cpumask *xcpus2 = fetch_xcpus(cs2);

	if (cpumask_intersects(xcpus1, xcpus2))
		return -EINVAL;
	return 0;
		return false;
	return true;
}

/*
@@ -877,7 +877,7 @@ static int validate_change(struct cpuset *cur, struct cpuset *trial)
	cpuset_for_each_child(c, css, par) {
		if ((is_cpu_exclusive(trial) || is_cpu_exclusive(c)) &&
		    c != cur) {
			if (cpu_exclusive_check(trial, c))
			if (!cpusets_are_exclusive(trial, c))
				goto out;
		}
		if ((is_mem_exclusive(trial) || is_mem_exclusive(c)) &&
@@ -1982,7 +1982,7 @@ static int update_parent_effective_cpumask(struct cpuset *cs, int cmd,
			cpuset_for_each_child(child, css, parent) {
				if (child == cs)
					continue;
				if (cpu_exclusive_check(cs, child)) {
				if (!cpusets_are_exclusive(cs, child)) {
					exclusive = false;
					break;
				}