Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 27820
b: refs/heads/master
c: dea8013
h: refs/heads/master
v: v3
  • Loading branch information
KaiGai Kohei committed May 13, 2006
1 parent c8a9a6b commit f276bf8
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 21 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5a14959c0700cd389d9e7ba312e15c8e85255e1f
refs/heads/master: dea80134dc4d54df52c0c59b0ba2bb5aa999bf30
41 changes: 21 additions & 20 deletions trunk/fs/jffs2/acl.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,11 @@ static int jffs2_acl_count(size_t size)
}
}

static struct posix_acl *jffs2_acl_from_medium(const void *value, size_t size)
static struct posix_acl *jffs2_acl_from_medium(void *value, size_t size)
{
const char *end = (char *)value + size;
void *end = value + size;
struct jffs2_acl_header *header = value;
struct jffs2_acl_entry *entry;
struct posix_acl *acl;
uint32_t ver;
int i, count;
Expand All @@ -59,13 +61,13 @@ static struct posix_acl *jffs2_acl_from_medium(const void *value, size_t size)
return NULL;
if (size < sizeof(struct jffs2_acl_header))
return ERR_PTR(-EINVAL);
ver = je32_to_cpu(((struct jffs2_acl_header *)value)->a_version);
ver = je32_to_cpu(header->a_version);
if (ver != JFFS2_ACL_VERSION) {
JFFS2_WARNING("Invalid ACL version. (=%u)\n", ver);
return ERR_PTR(-EINVAL);
}

value = (char *)value + sizeof(struct jffs2_acl_header);
value += sizeof(struct jffs2_acl_header);
count = jffs2_acl_count(size);
if (count < 0)
return ERR_PTR(-EINVAL);
Expand All @@ -77,8 +79,8 @@ static struct posix_acl *jffs2_acl_from_medium(const void *value, size_t size)
return ERR_PTR(-ENOMEM);

for (i=0; i < count; i++) {
struct jffs2_acl_entry *entry = (struct jffs2_acl_entry *)value;
if ((char *)value + sizeof(struct jffs2_acl_entry_short) > end)
entry = value;
if (value + sizeof(struct jffs2_acl_entry_short) > end)
goto fail;
acl->a_entries[i].e_tag = je16_to_cpu(entry->e_tag);
acl->a_entries[i].e_perm = je16_to_cpu(entry->e_perm);
Expand All @@ -87,14 +89,14 @@ static struct posix_acl *jffs2_acl_from_medium(const void *value, size_t size)
case ACL_GROUP_OBJ:
case ACL_MASK:
case ACL_OTHER:
value = (char *)value + sizeof(struct jffs2_acl_entry_short);
value += sizeof(struct jffs2_acl_entry_short);
acl->a_entries[i].e_id = ACL_UNDEFINED_ID;
break;

case ACL_USER:
case ACL_GROUP:
value = (char *)value + sizeof(struct jffs2_acl_entry);
if ((char *)value > end)
value += sizeof(struct jffs2_acl_entry);
if (value > end)
goto fail;
acl->a_entries[i].e_id = je32_to_cpu(entry->e_id);
break;
Expand All @@ -113,20 +115,19 @@ static struct posix_acl *jffs2_acl_from_medium(const void *value, size_t size)

static void *jffs2_acl_to_medium(const struct posix_acl *acl, size_t *size)
{
struct jffs2_acl_header *jffs2_acl;
char *e;
struct jffs2_acl_header *header;
struct jffs2_acl_entry *entry;
void *e;
size_t i;

*size = jffs2_acl_size(acl->a_count);
jffs2_acl = kmalloc(sizeof(struct jffs2_acl_header)
+ acl->a_count * sizeof(struct jffs2_acl_entry),
GFP_KERNEL);
if (!jffs2_acl)
header = kmalloc(sizeof(*header) + acl->a_count * sizeof(*entry), GFP_KERNEL);
if (!header)
return ERR_PTR(-ENOMEM);
jffs2_acl->a_version = cpu_to_je32(JFFS2_ACL_VERSION);
e = (char *)jffs2_acl + sizeof(struct jffs2_acl_header);
header->a_version = cpu_to_je32(JFFS2_ACL_VERSION);
e = header + 1;
for (i=0; i < acl->a_count; i++) {
struct jffs2_acl_entry *entry = (struct jffs2_acl_entry *)e;
entry = e;
entry->e_tag = cpu_to_je16(acl->a_entries[i].e_tag);
entry->e_perm = cpu_to_je16(acl->a_entries[i].e_perm);
switch(acl->a_entries[i].e_tag) {
Expand All @@ -147,9 +148,9 @@ static void *jffs2_acl_to_medium(const struct posix_acl *acl, size_t *size)
goto fail;
}
}
return (char *)jffs2_acl;
return header;
fail:
kfree(jffs2_acl);
kfree(header);
return ERR_PTR(-EINVAL);
}

Expand Down

0 comments on commit f276bf8

Please sign in to comment.