diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-01-31 17:16:13 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-01-31 17:16:13 -0500 |
| commit | 2cfa1cd3da14814a1e9ec6a4fce8612637d3ee3d (patch) | |
| tree | a3d5f2dcb3fd5db19e48fe9c7e0b7c96db8c1f72 /security/selinux/ss | |
| parent | 3dbc4f548519f9882676843b4fcdb4e61668baf8 (diff) | |
| parent | 4b14752ec4e0d87126e636384cf37c8dd9df157c (diff) | |
Merge tag 'selinux-pr-20180130' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux
Pull selinux updates from Paul Moore:
"A small pull request this time, just three patches, and one of these
is just a comment update (swap the FSF physical address for a URL).
The other two patches are small bug fixes found by szybot/syzkaller;
they individual patch descriptions should tell you all you ever wanted
to know"
* tag 'selinux-pr-20180130' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux:
selinux: skip bounded transition processing if the policy isn't loaded
selinux: ensure the context is NUL terminated in security_context_to_sid_core()
security: replace FSF address with web source in license notices
Diffstat (limited to 'security/selinux/ss')
| -rw-r--r-- | security/selinux/ss/services.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index 33cfe5d3d6cb..8900ea5cbabf 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c | |||
| @@ -867,6 +867,9 @@ int security_bounded_transition(u32 old_sid, u32 new_sid) | |||
| 867 | int index; | 867 | int index; |
| 868 | int rc; | 868 | int rc; |
| 869 | 869 | ||
| 870 | if (!ss_initialized) | ||
| 871 | return 0; | ||
| 872 | |||
| 870 | read_lock(&policy_rwlock); | 873 | read_lock(&policy_rwlock); |
| 871 | 874 | ||
| 872 | rc = -EINVAL; | 875 | rc = -EINVAL; |
| @@ -1413,27 +1416,25 @@ static int security_context_to_sid_core(const char *scontext, u32 scontext_len, | |||
| 1413 | if (!scontext_len) | 1416 | if (!scontext_len) |
| 1414 | return -EINVAL; | 1417 | return -EINVAL; |
| 1415 | 1418 | ||
| 1419 | /* Copy the string to allow changes and ensure a NUL terminator */ | ||
| 1420 | scontext2 = kmemdup_nul(scontext, scontext_len, gfp_flags); | ||
| 1421 | if (!scontext2) | ||
| 1422 | return -ENOMEM; | ||
| 1423 | |||
| 1416 | if (!ss_initialized) { | 1424 | if (!ss_initialized) { |
| 1417 | int i; | 1425 | int i; |
| 1418 | 1426 | ||
| 1419 | for (i = 1; i < SECINITSID_NUM; i++) { | 1427 | for (i = 1; i < SECINITSID_NUM; i++) { |
| 1420 | if (!strcmp(initial_sid_to_string[i], scontext)) { | 1428 | if (!strcmp(initial_sid_to_string[i], scontext2)) { |
| 1421 | *sid = i; | 1429 | *sid = i; |
| 1422 | return 0; | 1430 | goto out; |
| 1423 | } | 1431 | } |
| 1424 | } | 1432 | } |
| 1425 | *sid = SECINITSID_KERNEL; | 1433 | *sid = SECINITSID_KERNEL; |
| 1426 | return 0; | 1434 | goto out; |
| 1427 | } | 1435 | } |
| 1428 | *sid = SECSID_NULL; | 1436 | *sid = SECSID_NULL; |
| 1429 | 1437 | ||
| 1430 | /* Copy the string so that we can modify the copy as we parse it. */ | ||
| 1431 | scontext2 = kmalloc(scontext_len + 1, gfp_flags); | ||
| 1432 | if (!scontext2) | ||
| 1433 | return -ENOMEM; | ||
| 1434 | memcpy(scontext2, scontext, scontext_len); | ||
| 1435 | scontext2[scontext_len] = 0; | ||
| 1436 | |||
| 1437 | if (force) { | 1438 | if (force) { |
| 1438 | /* Save another copy for storing in uninterpreted form */ | 1439 | /* Save another copy for storing in uninterpreted form */ |
| 1439 | rc = -ENOMEM; | 1440 | rc = -ENOMEM; |
