vserver 1.9.5.x5
[linux-2.6.git] / security / selinux / ss / ebitmap.c
index 98be57f..ad34294 100644 (file)
@@ -17,7 +17,7 @@ int ebitmap_or(struct ebitmap *dst, struct ebitmap *e1, struct ebitmap *e2)
 
        n1 = e1->node;
        n2 = e2->node;
-       prev = 0;
+       prev = NULL;
        while (n1 || n2) {
                new = kmalloc(sizeof(*new), GFP_ATOMIC);
                if (!new) {
@@ -40,7 +40,7 @@ int ebitmap_or(struct ebitmap *dst, struct ebitmap *e1, struct ebitmap *e2)
                        n2 = n2->next;
                }
 
-               new->next = 0;
+               new->next = NULL;
                if (prev)
                        prev->next = new;
                else
@@ -80,7 +80,7 @@ int ebitmap_cpy(struct ebitmap *dst, struct ebitmap *src)
 
        ebitmap_init(dst);
        n = src->node;
-       prev = 0;
+       prev = NULL;
        while (n) {
                new = kmalloc(sizeof(*new), GFP_ATOMIC);
                if (!new) {
@@ -90,7 +90,7 @@ int ebitmap_cpy(struct ebitmap *dst, struct ebitmap *src)
                memset(new, 0, sizeof(*new));
                new->startbit = n->startbit;
                new->map = n->map;
-               new->next = 0;
+               new->next = NULL;
                if (prev)
                        prev->next = new;
                else
@@ -155,7 +155,7 @@ int ebitmap_set_bit(struct ebitmap *e, unsigned long bit, int value)
 {
        struct ebitmap_node *n, *prev, *new;
 
-       prev = 0;
+       prev = NULL;
        n = e->node;
        while (n && n->startbit <= bit) {
                if ((n->startbit + MAPSIZE) > bit) {
@@ -231,21 +231,21 @@ void ebitmap_destroy(struct ebitmap *e)
        }
 
        e->highbit = 0;
-       e->node = 0;
+       e->node = NULL;
        return;
 }
 
 int ebitmap_read(struct ebitmap *e, void *fp)
 {
-       int rc = -EINVAL;
+       int rc;
        struct ebitmap_node *n, *l;
-       u32 *buf, mapsize, count, i;
+       u32 buf[3], mapsize, count, i;
        u64 map;
 
        ebitmap_init(e);
 
-       buf = next_entry(fp, sizeof(u32)*3);
-       if (!buf)
+       rc = next_entry(buf, fp, sizeof buf);
+       if (rc < 0)
                goto out;
 
        mapsize = le32_to_cpu(buf[0]);
@@ -256,7 +256,7 @@ int ebitmap_read(struct ebitmap *e, void *fp)
                printk(KERN_ERR "security: ebitmap: map size %u does not "
                       "match my size %Zd (high bit was %d)\n", mapsize,
                       MAPSIZE, e->highbit);
-               goto out;
+               goto bad;
        }
        if (!e->highbit) {
                e->node = NULL;
@@ -269,8 +269,8 @@ int ebitmap_read(struct ebitmap *e, void *fp)
        }
        l = NULL;
        for (i = 0; i < count; i++) {
-               buf = next_entry(fp, sizeof(u32));
-               if (!buf) {
+               rc = next_entry(buf, fp, sizeof(u32));
+               if (rc < 0) {
                        printk(KERN_ERR "security: ebitmap: truncated map\n");
                        goto bad;
                }
@@ -296,12 +296,11 @@ int ebitmap_read(struct ebitmap *e, void *fp)
                               n->startbit, (e->highbit - MAPSIZE));
                        goto bad_free;
                }
-               buf = next_entry(fp, sizeof(u64));
-               if (!buf) {
+               rc = next_entry(&map, fp, sizeof(u64));
+               if (rc < 0) {
                        printk(KERN_ERR "security: ebitmap: truncated map\n");
                        goto bad_free;
                }
-               memcpy(&map, buf, sizeof(u64));
                n->map = le64_to_cpu(map);
 
                if (!n->map) {
@@ -330,6 +329,8 @@ out:
 bad_free:
        kfree(n);
 bad:
+       if (!rc)
+               rc = -EINVAL;
        ebitmap_destroy(e);
        goto out;
 }