selinux: provide __le variables explicitly
authorNicholas Mc Guire <hofrat@osadl.org>
Wed, 8 May 2019 06:21:17 +0000 (08:21 +0200)
committerPaul Moore <paul@paul-moore.com>
Tue, 21 May 2019 19:49:21 +0000 (15:49 -0400)
While the endiannes is being handled properly sparse was unable to verify
this due to type inconsistency. So introduce an additional __le32
respectively _le64 variable to be passed to le32/64_to_cpu() to allow
sparse to verify proper typing. Note that this patch does not change
the generated binary on little-endian systems - on 32bit powerpc it
does change the binary.

Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org>
Signed-off-by: Paul Moore <paul@paul-moore.com>
security/selinux/ss/ebitmap.c

index 8f624f8..09929fc 100644 (file)
@@ -347,7 +347,9 @@ int ebitmap_read(struct ebitmap *e, void *fp)
 {
        struct ebitmap_node *n = NULL;
        u32 mapunit, count, startbit, index;
+       __le32 ebitmap_start;
        u64 map;
+       __le64 mapbits;
        __le32 buf[3];
        int rc, i;
 
@@ -381,12 +383,12 @@ int ebitmap_read(struct ebitmap *e, void *fp)
                goto bad;
 
        for (i = 0; i < count; i++) {
-               rc = next_entry(&startbit, fp, sizeof(u32));
+               rc = next_entry(&ebitmap_start, fp, sizeof(u32));
                if (rc < 0) {
                        pr_err("SELinux: ebitmap: truncated map\n");
                        goto bad;
                }
-               startbit = le32_to_cpu(startbit);
+               startbit = le32_to_cpu(ebitmap_start);
 
                if (startbit & (mapunit - 1)) {
                        pr_err("SELinux: ebitmap start bit (%d) is "
@@ -423,12 +425,12 @@ int ebitmap_read(struct ebitmap *e, void *fp)
                        goto bad;
                }
 
-               rc = next_entry(&map, fp, sizeof(u64));
+               rc = next_entry(&mapbits, fp, sizeof(u64));
                if (rc < 0) {
                        pr_err("SELinux: ebitmap: truncated map\n");
                        goto bad;
                }
-               map = le64_to_cpu(map);
+               map = le64_to_cpu(mapbits);
 
                index = (startbit - n->startbit) / EBITMAP_UNIT_SIZE;
                while (map) {