Skip to content

Commit

Permalink
selinux: fix undefined return of cond_evaluate_expr
Browse files Browse the repository at this point in the history
clang static analysis reports an undefined return

security/selinux/ss/conditional.c:79:2: warning: Undefined or garbage value returned to caller [core.uninitialized.UndefReturn]
        return s[0];
        ^~~~~~~~~~~

static int cond_evaluate_expr( ...
{
	u32 i;
	int s[COND_EXPR_MAXDEPTH];

	for (i = 0; i < expr->len; i++)
	  ...

	return s[0];

When expr->len is 0, the loop which sets s[0] never runs.

So return -1 if the loop never runs.

Cc: [email protected]
Signed-off-by: Tom Rix <[email protected]>
Acked-by: Stephen Smalley <[email protected]>
Signed-off-by: Paul Moore <[email protected]>
  • Loading branch information
Tom Rix authored and pcmoore committed Jun 17, 2020
1 parent aa449a7 commit 8231b0b
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions security/selinux/ss/conditional.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ static int cond_evaluate_expr(struct policydb *p, struct cond_expr *expr)
int s[COND_EXPR_MAXDEPTH];
int sp = -1;

if (expr->len == 0)
return -1;

for (i = 0; i < expr->len; i++) {
struct cond_expr_node *node = &expr->nodes[i];

Expand Down

0 comments on commit 8231b0b

Please sign in to comment.