Skip to content

Commit

Permalink
selinux: ensure the context is NUL terminated in security_context_to_…
Browse files Browse the repository at this point in the history
…sid_core()

The syzbot/syzkaller automated tests found a problem in
security_context_to_sid_core() during early boot (before we load the
SELinux policy) where we could potentially feed context strings without
NUL terminators into the strcmp() function.

We already guard against this during normal operation (after the SELinux
policy has been loaded) by making a copy of the context strings and
explicitly adding a NUL terminator to the end.  The patch extends this
protection to the early boot case (no loaded policy) by moving the context
copy earlier in security_context_to_sid_core().

Reported-by: syzbot <[email protected]>
Signed-off-by: Paul Moore <[email protected]>
Reviewed-By: William Roberts <[email protected]>
  • Loading branch information
pcmoore committed Nov 28, 2017
1 parent 4f0753e commit ef28df5
Showing 1 changed file with 8 additions and 10 deletions.
18 changes: 8 additions & 10 deletions security/selinux/ss/services.c
Original file line number Diff line number Diff line change
Expand Up @@ -1413,27 +1413,25 @@ static int security_context_to_sid_core(const char *scontext, u32 scontext_len,
if (!scontext_len)
return -EINVAL;

/* Copy the string to allow changes and ensure a NUL terminator */
scontext2 = kmemdup_nul(scontext, scontext_len, gfp_flags);
if (!scontext2)
return -ENOMEM;

if (!ss_initialized) {
int i;

for (i = 1; i < SECINITSID_NUM; i++) {
if (!strcmp(initial_sid_to_string[i], scontext)) {
if (!strcmp(initial_sid_to_string[i], scontext2)) {
*sid = i;
return 0;
goto out;
}
}
*sid = SECINITSID_KERNEL;
return 0;
goto out;
}
*sid = SECSID_NULL;

/* Copy the string so that we can modify the copy as we parse it. */
scontext2 = kmalloc(scontext_len + 1, gfp_flags);
if (!scontext2)
return -ENOMEM;
memcpy(scontext2, scontext, scontext_len);
scontext2[scontext_len] = 0;

if (force) {
/* Save another copy for storing in uninterpreted form */
rc = -ENOMEM;
Expand Down

0 comments on commit ef28df5

Please sign in to comment.