|
@@ -867,6 +867,9 @@ int security_bounded_transition(u32 old_sid, u32 new_sid)
|
|
|
int index;
|
|
|
int rc;
|
|
|
|
|
|
+ if (!ss_initialized)
|
|
|
+ return 0;
|
|
|
+
|
|
|
read_lock(&policy_rwlock);
|
|
|
|
|
|
rc = -EINVAL;
|
|
@@ -1413,27 +1416,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;
|