From: Stephen Smalley <sds@tycho.nsa.gov>
To: Andrew Gunnerson <andrewgunnerson@gmail.com>, selinux@tycho.nsa.gov
Subject: Re: "SELinux: ebitmap: truncated map" after editing with libsepol
Date: Wed, 17 Dec 2014 09:04:59 -0500 [thread overview]
Message-ID: <54918D8B.1020607@tycho.nsa.gov> (raw)
In-Reply-To: <54918CF3.4060701@tycho.nsa.gov>
On 12/17/2014 09:02 AM, Stephen Smalley wrote:
> On 12/17/2014 04:30 AM, Andrew Gunnerson wrote:
>> Hello all,
>>
>> I have a very simple test program to help with debugging my Android
>> dual booting project. It reads the current policy from
>> /sys/fs/selinux/policy,
>> changes a single type to be permissive, and then loads the new policy
>> by writing it to /sys/fs/selinux/load. The problem is, after editing the
>> policy with sepol, it fails to load and the kernel prints the following
>> message in dmesg: "SELinux: ebitmap: truncated map".
>>
>> The program reads and writes the policy file using the standard fopen
>> and policydb_read/policydb_write calls. I then set a few types to be
>> permissive using the following loop:
>>
>> ...
>> char *name;
>> int is_permissive;
>> char **types = (null terminated char* array)
>> char **type;
>> ...
>> for (unsigned int i = 0; i < pdb->p_types.nprim - 1; i++) {
>> name = pdb->p_type_val_to_name[i];
>> is_permissive = ebitmap_get_bit(&pdb->permissive_map, i + 1);
>>
>> if (!is_permissive) {
>> for (type = types; *type; type++) {
>> if (strcmp(*type, name) == 0) {
>> ebitmap_set_bit(&pdb->permissive_map, i + 1, 1);
>> break;
>> }
>> }
>> }
>> }
>> ...
>>
>> I've been trying to debug this for many hours, but I can't seem to figure
>> out why this is happening. Is there a simple mistake I'm overlooking or
>> am I approaching this in a completely wrong way?
>>
>> Thanks in advance! Any help is greatly appreciated!
>>
>> Andrew Gunnerson
>>
>>
>> PS: This is running on Android 5.0 with libsepol 2.4-rc4 and kernel
>> 3.4.0-g88fbc66.
>
> The implementation of /sys/fs/selinux/load requires you to write the
> entire policy in a single write(2) call, so you can't use stdio methods
> for writing the policy image. policydb_write() the image to memory and
> then call security_load_policy() on that memory region.
You can use policydb_to_image() to write a policydb to a memory region,
obtaining a (data, len) pair describing the region, and then call
security_load_policy() on that pair.
> Also, you can see a working example of a program that does this kind of
> thing (but on files rather than directly to /sys/fs/selinux/load) in
> sepolicy-inject,
> https://bitbucket.org/joshua_brindle/sepolicy-inject
>
> Any particular reason you are building a pre-release upstream libsepol
> rather than the one included in AOSP (external/libsepol)? Admittedly,
> that is only built for the host, not the device, presently, so you'd at
> least need to change that.
>
prev parent reply other threads:[~2014-12-17 14:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-17 9:30 "SELinux: ebitmap: truncated map" after editing with libsepol Andrew Gunnerson
2014-12-17 14:02 ` Stephen Smalley
2014-12-17 14:04 ` Stephen Smalley [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54918D8B.1020607@tycho.nsa.gov \
--to=sds@tycho.nsa.gov \
--cc=andrewgunnerson@gmail.com \
--cc=selinux@tycho.nsa.gov \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.