|
@@ -17,6 +17,11 @@
|
|
|
*
|
|
|
* Added support for the policy capability bitmap
|
|
|
*
|
|
|
+ * Update: Mellanox Techonologies
|
|
|
+ *
|
|
|
+ * Added Infiniband support
|
|
|
+ *
|
|
|
+ * Copyright (C) 2016 Mellanox Techonologies
|
|
|
* Copyright (C) 2007 Hewlett-Packard Development Company, L.P.
|
|
|
* Copyright (C) 2004-2005 Trusted Computer Solutions, Inc.
|
|
|
* Copyright (C) 2003 - 2004 Tresys Technology, LLC
|
|
@@ -76,81 +81,86 @@ static struct policydb_compat_info policydb_compat[] = {
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_BASE,
|
|
|
.sym_num = SYM_NUM - 3,
|
|
|
- .ocon_num = OCON_NUM - 1,
|
|
|
+ .ocon_num = OCON_NUM - 3,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_BOOL,
|
|
|
.sym_num = SYM_NUM - 2,
|
|
|
- .ocon_num = OCON_NUM - 1,
|
|
|
+ .ocon_num = OCON_NUM - 3,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_IPV6,
|
|
|
.sym_num = SYM_NUM - 2,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_NLCLASS,
|
|
|
.sym_num = SYM_NUM - 2,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_MLS,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_AVTAB,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_RANGETRANS,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_POLCAP,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_PERMISSIVE,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_BOUNDARY,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_FILENAME_TRANS,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_ROLETRANS,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_NEW_OBJECT_DEFAULTS,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_DEFAULT_TYPE,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_CONSTRAINT_NAMES,
|
|
|
.sym_num = SYM_NUM,
|
|
|
- .ocon_num = OCON_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
},
|
|
|
{
|
|
|
.version = POLICYDB_VERSION_XPERMS_IOCTL,
|
|
|
.sym_num = SYM_NUM,
|
|
|
+ .ocon_num = OCON_NUM - 2,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .version = POLICYDB_VERSION_INFINIBAND,
|
|
|
+ .sym_num = SYM_NUM,
|
|
|
.ocon_num = OCON_NUM,
|
|
|
},
|
|
|
};
|
|
@@ -2206,6 +2216,51 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
|
|
|
goto out;
|
|
|
break;
|
|
|
}
|
|
|
+ case OCON_IBPKEY:
|
|
|
+ rc = next_entry(nodebuf, fp, sizeof(u32) * 4);
|
|
|
+ if (rc)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ c->u.ibpkey.subnet_prefix = be64_to_cpu(*((__be64 *)nodebuf));
|
|
|
+
|
|
|
+ if (nodebuf[2] > 0xffff ||
|
|
|
+ nodebuf[3] > 0xffff) {
|
|
|
+ rc = -EINVAL;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
+ c->u.ibpkey.low_pkey = le32_to_cpu(nodebuf[2]);
|
|
|
+ c->u.ibpkey.high_pkey = le32_to_cpu(nodebuf[3]);
|
|
|
+
|
|
|
+ rc = context_read_and_validate(&c->context[0],
|
|
|
+ p,
|
|
|
+ fp);
|
|
|
+ if (rc)
|
|
|
+ goto out;
|
|
|
+ break;
|
|
|
+ case OCON_IBENDPORT:
|
|
|
+ rc = next_entry(buf, fp, sizeof(u32) * 2);
|
|
|
+ if (rc)
|
|
|
+ goto out;
|
|
|
+ len = le32_to_cpu(buf[0]);
|
|
|
+
|
|
|
+ rc = str_read(&c->u.ibendport.dev_name, GFP_KERNEL, fp, len);
|
|
|
+ if (rc)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ if (buf[1] > 0xff || buf[1] == 0) {
|
|
|
+ rc = -EINVAL;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
+ c->u.ibendport.port = le32_to_cpu(buf[1]);
|
|
|
+
|
|
|
+ rc = context_read_and_validate(&c->context[0],
|
|
|
+ p,
|
|
|
+ fp);
|
|
|
+ if (rc)
|
|
|
+ goto out;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -3135,6 +3190,33 @@ static int ocontext_write(struct policydb *p, struct policydb_compat_info *info,
|
|
|
if (rc)
|
|
|
return rc;
|
|
|
break;
|
|
|
+ case OCON_IBPKEY:
|
|
|
+ *((__be64 *)nodebuf) = cpu_to_be64(c->u.ibpkey.subnet_prefix);
|
|
|
+
|
|
|
+ nodebuf[2] = cpu_to_le32(c->u.ibpkey.low_pkey);
|
|
|
+ nodebuf[3] = cpu_to_le32(c->u.ibpkey.high_pkey);
|
|
|
+
|
|
|
+ rc = put_entry(nodebuf, sizeof(u32), 4, fp);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+ rc = context_write(p, &c->context[0], fp);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+ break;
|
|
|
+ case OCON_IBENDPORT:
|
|
|
+ len = strlen(c->u.ibendport.dev_name);
|
|
|
+ buf[0] = cpu_to_le32(len);
|
|
|
+ buf[1] = cpu_to_le32(c->u.ibendport.port);
|
|
|
+ rc = put_entry(buf, sizeof(u32), 2, fp);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+ rc = put_entry(c->u.ibendport.dev_name, 1, len, fp);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+ rc = context_write(p, &c->context[0], fp);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
}
|