|
@@ -744,7 +744,8 @@ int policydb_context_isvalid(struct policydb *p, struct context *c)
|
|
*/
|
|
*/
|
|
static int mls_read_range_helper(struct mls_range *r, void *fp)
|
|
static int mls_read_range_helper(struct mls_range *r, void *fp)
|
|
{
|
|
{
|
|
- u32 buf[2], items;
|
|
|
|
|
|
+ __le32 buf[2];
|
|
|
|
+ u32 items;
|
|
int rc;
|
|
int rc;
|
|
|
|
|
|
rc = next_entry(buf, fp, sizeof(u32));
|
|
rc = next_entry(buf, fp, sizeof(u32));
|
|
@@ -805,7 +806,7 @@ static int context_read_and_validate(struct context *c,
|
|
struct policydb *p,
|
|
struct policydb *p,
|
|
void *fp)
|
|
void *fp)
|
|
{
|
|
{
|
|
- u32 buf[3];
|
|
|
|
|
|
+ __le32 buf[3];
|
|
int rc;
|
|
int rc;
|
|
|
|
|
|
rc = next_entry(buf, fp, sizeof buf);
|
|
rc = next_entry(buf, fp, sizeof buf);
|
|
@@ -845,7 +846,8 @@ static int perm_read(struct policydb *p, struct hashtab *h, void *fp)
|
|
char *key = NULL;
|
|
char *key = NULL;
|
|
struct perm_datum *perdatum;
|
|
struct perm_datum *perdatum;
|
|
int rc;
|
|
int rc;
|
|
- u32 buf[2], len;
|
|
|
|
|
|
+ __le32 buf[2];
|
|
|
|
+ u32 len;
|
|
|
|
|
|
perdatum = kmalloc(sizeof(*perdatum), GFP_KERNEL);
|
|
perdatum = kmalloc(sizeof(*perdatum), GFP_KERNEL);
|
|
if (!perdatum) {
|
|
if (!perdatum) {
|
|
@@ -885,7 +887,8 @@ static int common_read(struct policydb *p, struct hashtab *h, void *fp)
|
|
{
|
|
{
|
|
char *key = NULL;
|
|
char *key = NULL;
|
|
struct common_datum *comdatum;
|
|
struct common_datum *comdatum;
|
|
- u32 buf[4], len, nel;
|
|
|
|
|
|
+ __le32 buf[4];
|
|
|
|
+ u32 len, nel;
|
|
int i, rc;
|
|
int i, rc;
|
|
|
|
|
|
comdatum = kmalloc(sizeof(*comdatum), GFP_KERNEL);
|
|
comdatum = kmalloc(sizeof(*comdatum), GFP_KERNEL);
|
|
@@ -939,7 +942,8 @@ static int read_cons_helper(struct constraint_node **nodep, int ncons,
|
|
{
|
|
{
|
|
struct constraint_node *c, *lc;
|
|
struct constraint_node *c, *lc;
|
|
struct constraint_expr *e, *le;
|
|
struct constraint_expr *e, *le;
|
|
- u32 buf[3], nexpr;
|
|
|
|
|
|
+ __le32 buf[3];
|
|
|
|
+ u32 nexpr;
|
|
int rc, i, j, depth;
|
|
int rc, i, j, depth;
|
|
|
|
|
|
lc = NULL;
|
|
lc = NULL;
|
|
@@ -1023,7 +1027,8 @@ static int class_read(struct policydb *p, struct hashtab *h, void *fp)
|
|
{
|
|
{
|
|
char *key = NULL;
|
|
char *key = NULL;
|
|
struct class_datum *cladatum;
|
|
struct class_datum *cladatum;
|
|
- u32 buf[6], len, len2, ncons, nel;
|
|
|
|
|
|
+ __le32 buf[6];
|
|
|
|
+ u32 len, len2, ncons, nel;
|
|
int i, rc;
|
|
int i, rc;
|
|
|
|
|
|
cladatum = kmalloc(sizeof(*cladatum), GFP_KERNEL);
|
|
cladatum = kmalloc(sizeof(*cladatum), GFP_KERNEL);
|
|
@@ -1117,7 +1122,8 @@ static int role_read(struct policydb *p, struct hashtab *h, void *fp)
|
|
char *key = NULL;
|
|
char *key = NULL;
|
|
struct role_datum *role;
|
|
struct role_datum *role;
|
|
int rc;
|
|
int rc;
|
|
- u32 buf[2], len;
|
|
|
|
|
|
+ __le32 buf[2];
|
|
|
|
+ u32 len;
|
|
|
|
|
|
role = kmalloc(sizeof(*role), GFP_KERNEL);
|
|
role = kmalloc(sizeof(*role), GFP_KERNEL);
|
|
if (!role) {
|
|
if (!role) {
|
|
@@ -1177,7 +1183,8 @@ static int type_read(struct policydb *p, struct hashtab *h, void *fp)
|
|
char *key = NULL;
|
|
char *key = NULL;
|
|
struct type_datum *typdatum;
|
|
struct type_datum *typdatum;
|
|
int rc;
|
|
int rc;
|
|
- u32 buf[3], len;
|
|
|
|
|
|
+ __le32 buf[3];
|
|
|
|
+ u32 len;
|
|
|
|
|
|
typdatum = kmalloc(sizeof(*typdatum),GFP_KERNEL);
|
|
typdatum = kmalloc(sizeof(*typdatum),GFP_KERNEL);
|
|
if (!typdatum) {
|
|
if (!typdatum) {
|
|
@@ -1221,7 +1228,7 @@ bad:
|
|
*/
|
|
*/
|
|
static int mls_read_level(struct mls_level *lp, void *fp)
|
|
static int mls_read_level(struct mls_level *lp, void *fp)
|
|
{
|
|
{
|
|
- u32 buf[1];
|
|
|
|
|
|
+ __le32 buf[1];
|
|
int rc;
|
|
int rc;
|
|
|
|
|
|
memset(lp, 0, sizeof(*lp));
|
|
memset(lp, 0, sizeof(*lp));
|
|
@@ -1249,7 +1256,8 @@ static int user_read(struct policydb *p, struct hashtab *h, void *fp)
|
|
char *key = NULL;
|
|
char *key = NULL;
|
|
struct user_datum *usrdatum;
|
|
struct user_datum *usrdatum;
|
|
int rc;
|
|
int rc;
|
|
- u32 buf[2], len;
|
|
|
|
|
|
+ __le32 buf[2];
|
|
|
|
+ u32 len;
|
|
|
|
|
|
usrdatum = kmalloc(sizeof(*usrdatum), GFP_KERNEL);
|
|
usrdatum = kmalloc(sizeof(*usrdatum), GFP_KERNEL);
|
|
if (!usrdatum) {
|
|
if (!usrdatum) {
|
|
@@ -1303,7 +1311,8 @@ static int sens_read(struct policydb *p, struct hashtab *h, void *fp)
|
|
char *key = NULL;
|
|
char *key = NULL;
|
|
struct level_datum *levdatum;
|
|
struct level_datum *levdatum;
|
|
int rc;
|
|
int rc;
|
|
- u32 buf[2], len;
|
|
|
|
|
|
+ __le32 buf[2];
|
|
|
|
+ u32 len;
|
|
|
|
|
|
levdatum = kmalloc(sizeof(*levdatum), GFP_ATOMIC);
|
|
levdatum = kmalloc(sizeof(*levdatum), GFP_ATOMIC);
|
|
if (!levdatum) {
|
|
if (!levdatum) {
|
|
@@ -1354,7 +1363,8 @@ static int cat_read(struct policydb *p, struct hashtab *h, void *fp)
|
|
char *key = NULL;
|
|
char *key = NULL;
|
|
struct cat_datum *catdatum;
|
|
struct cat_datum *catdatum;
|
|
int rc;
|
|
int rc;
|
|
- u32 buf[3], len;
|
|
|
|
|
|
+ __le32 buf[3];
|
|
|
|
+ u32 len;
|
|
|
|
|
|
catdatum = kmalloc(sizeof(*catdatum), GFP_ATOMIC);
|
|
catdatum = kmalloc(sizeof(*catdatum), GFP_ATOMIC);
|
|
if (!catdatum) {
|
|
if (!catdatum) {
|
|
@@ -1417,7 +1427,8 @@ int policydb_read(struct policydb *p, void *fp)
|
|
struct ocontext *l, *c, *newc;
|
|
struct ocontext *l, *c, *newc;
|
|
struct genfs *genfs_p, *genfs, *newgenfs;
|
|
struct genfs *genfs_p, *genfs, *newgenfs;
|
|
int i, j, rc;
|
|
int i, j, rc;
|
|
- u32 buf[8], len, len2, config, nprim, nel, nel2;
|
|
|
|
|
|
+ __le32 buf[8];
|
|
|
|
+ u32 len, len2, config, nprim, nel, nel2;
|
|
char *policydb_str;
|
|
char *policydb_str;
|
|
struct policydb_compat_info *info;
|
|
struct policydb_compat_info *info;
|
|
struct range_trans *rt, *lrt;
|
|
struct range_trans *rt, *lrt;
|
|
@@ -1433,17 +1444,14 @@ int policydb_read(struct policydb *p, void *fp)
|
|
if (rc < 0)
|
|
if (rc < 0)
|
|
goto bad;
|
|
goto bad;
|
|
|
|
|
|
- for (i = 0; i < 2; i++)
|
|
|
|
- buf[i] = le32_to_cpu(buf[i]);
|
|
|
|
-
|
|
|
|
- if (buf[0] != POLICYDB_MAGIC) {
|
|
|
|
|
|
+ if (le32_to_cpu(buf[0]) != POLICYDB_MAGIC) {
|
|
printk(KERN_ERR "security: policydb magic number 0x%x does "
|
|
printk(KERN_ERR "security: policydb magic number 0x%x does "
|
|
"not match expected magic number 0x%x\n",
|
|
"not match expected magic number 0x%x\n",
|
|
- buf[0], POLICYDB_MAGIC);
|
|
|
|
|
|
+ le32_to_cpu(buf[0]), POLICYDB_MAGIC);
|
|
goto bad;
|
|
goto bad;
|
|
}
|
|
}
|
|
|
|
|
|
- len = buf[1];
|
|
|
|
|
|
+ len = le32_to_cpu(buf[1]);
|
|
if (len != strlen(POLICYDB_STRING)) {
|
|
if (len != strlen(POLICYDB_STRING)) {
|
|
printk(KERN_ERR "security: policydb string length %d does not "
|
|
printk(KERN_ERR "security: policydb string length %d does not "
|
|
"match expected length %Zu\n",
|
|
"match expected length %Zu\n",
|
|
@@ -1478,19 +1486,17 @@ int policydb_read(struct policydb *p, void *fp)
|
|
rc = next_entry(buf, fp, sizeof(u32)*4);
|
|
rc = next_entry(buf, fp, sizeof(u32)*4);
|
|
if (rc < 0)
|
|
if (rc < 0)
|
|
goto bad;
|
|
goto bad;
|
|
- for (i = 0; i < 4; i++)
|
|
|
|
- buf[i] = le32_to_cpu(buf[i]);
|
|
|
|
|
|
|
|
- p->policyvers = buf[0];
|
|
|
|
|
|
+ p->policyvers = le32_to_cpu(buf[0]);
|
|
if (p->policyvers < POLICYDB_VERSION_MIN ||
|
|
if (p->policyvers < POLICYDB_VERSION_MIN ||
|
|
p->policyvers > POLICYDB_VERSION_MAX) {
|
|
p->policyvers > POLICYDB_VERSION_MAX) {
|
|
printk(KERN_ERR "security: policydb version %d does not match "
|
|
printk(KERN_ERR "security: policydb version %d does not match "
|
|
"my version range %d-%d\n",
|
|
"my version range %d-%d\n",
|
|
- buf[0], POLICYDB_VERSION_MIN, POLICYDB_VERSION_MAX);
|
|
|
|
|
|
+ le32_to_cpu(buf[0]), POLICYDB_VERSION_MIN, POLICYDB_VERSION_MAX);
|
|
goto bad;
|
|
goto bad;
|
|
}
|
|
}
|
|
|
|
|
|
- if ((buf[1] & POLICYDB_CONFIG_MLS)) {
|
|
|
|
|
|
+ if ((le32_to_cpu(buf[1]) & POLICYDB_CONFIG_MLS)) {
|
|
if (ss_initialized && !selinux_mls_enabled) {
|
|
if (ss_initialized && !selinux_mls_enabled) {
|
|
printk(KERN_ERR "Cannot switch between non-MLS and MLS "
|
|
printk(KERN_ERR "Cannot switch between non-MLS and MLS "
|
|
"policies\n");
|
|
"policies\n");
|
|
@@ -1519,9 +1525,11 @@ int policydb_read(struct policydb *p, void *fp)
|
|
goto bad;
|
|
goto bad;
|
|
}
|
|
}
|
|
|
|
|
|
- if (buf[2] != info->sym_num || buf[3] != info->ocon_num) {
|
|
|
|
|
|
+ if (le32_to_cpu(buf[2]) != info->sym_num ||
|
|
|
|
+ le32_to_cpu(buf[3]) != info->ocon_num) {
|
|
printk(KERN_ERR "security: policydb table sizes (%d,%d) do "
|
|
printk(KERN_ERR "security: policydb table sizes (%d,%d) do "
|
|
- "not match mine (%d,%d)\n", buf[2], buf[3],
|
|
|
|
|
|
+ "not match mine (%d,%d)\n", le32_to_cpu(buf[2]),
|
|
|
|
+ le32_to_cpu(buf[3]),
|
|
info->sym_num, info->ocon_num);
|
|
info->sym_num, info->ocon_num);
|
|
goto bad;
|
|
goto bad;
|
|
}
|
|
}
|