diff options
-rw-r--r-- | include/net/netlabel.h | 3 | ||||
-rw-r--r-- | net/netlabel/netlabel_cipso_v4.c | 41 | ||||
-rw-r--r-- | net/netlabel/netlabel_cipso_v4.h | 6 | ||||
-rw-r--r-- | net/netlabel/netlabel_kapi.c | 3 |
4 files changed, 50 insertions, 3 deletions
diff --git a/include/net/netlabel.h b/include/net/netlabel.h index d56517ac3bae..17c442a4514e 100644 --- a/include/net/netlabel.h +++ b/include/net/netlabel.h | |||
@@ -72,7 +72,8 @@ struct cipso_v4_doi; | |||
72 | /* NetLabel NETLINK protocol version | 72 | /* NetLabel NETLINK protocol version |
73 | * 1: initial version | 73 | * 1: initial version |
74 | * 2: added static labels for unlabeled connections | 74 | * 2: added static labels for unlabeled connections |
75 | * 3: network selectors added to the NetLabel/LSM domain mapping | 75 | * 3: network selectors added to the NetLabel/LSM domain mapping and the |
76 | * CIPSO_V4_MAP_LOCAL CIPSO mapping was added | ||
76 | */ | 77 | */ |
77 | #define NETLBL_PROTO_VERSION 3 | 78 | #define NETLBL_PROTO_VERSION 3 |
78 | 79 | ||
diff --git a/net/netlabel/netlabel_cipso_v4.c b/net/netlabel/netlabel_cipso_v4.c index db83a67cbc75..fff32b70efa9 100644 --- a/net/netlabel/netlabel_cipso_v4.c +++ b/net/netlabel/netlabel_cipso_v4.c | |||
@@ -365,6 +365,43 @@ add_pass_failure: | |||
365 | } | 365 | } |
366 | 366 | ||
367 | /** | 367 | /** |
368 | * netlbl_cipsov4_add_local - Adds a CIPSO V4 DOI definition | ||
369 | * @info: the Generic NETLINK info block | ||
370 | * | ||
371 | * Description: | ||
372 | * Create a new CIPSO_V4_MAP_LOCAL DOI definition based on the given ADD | ||
373 | * message and add it to the CIPSO V4 engine. Return zero on success and | ||
374 | * non-zero on error. | ||
375 | * | ||
376 | */ | ||
377 | static int netlbl_cipsov4_add_local(struct genl_info *info) | ||
378 | { | ||
379 | int ret_val; | ||
380 | struct cipso_v4_doi *doi_def = NULL; | ||
381 | |||
382 | if (!info->attrs[NLBL_CIPSOV4_A_TAGLST]) | ||
383 | return -EINVAL; | ||
384 | |||
385 | doi_def = kmalloc(sizeof(*doi_def), GFP_KERNEL); | ||
386 | if (doi_def == NULL) | ||
387 | return -ENOMEM; | ||
388 | doi_def->type = CIPSO_V4_MAP_LOCAL; | ||
389 | |||
390 | ret_val = netlbl_cipsov4_add_common(info, doi_def); | ||
391 | if (ret_val != 0) | ||
392 | goto add_local_failure; | ||
393 | |||
394 | ret_val = cipso_v4_doi_add(doi_def); | ||
395 | if (ret_val != 0) | ||
396 | goto add_local_failure; | ||
397 | return 0; | ||
398 | |||
399 | add_local_failure: | ||
400 | cipso_v4_doi_free(doi_def); | ||
401 | return ret_val; | ||
402 | } | ||
403 | |||
404 | /** | ||
368 | * netlbl_cipsov4_add - Handle an ADD message | 405 | * netlbl_cipsov4_add - Handle an ADD message |
369 | * @skb: the NETLINK buffer | 406 | * @skb: the NETLINK buffer |
370 | * @info: the Generic NETLINK info block | 407 | * @info: the Generic NETLINK info block |
@@ -401,6 +438,10 @@ static int netlbl_cipsov4_add(struct sk_buff *skb, struct genl_info *info) | |||
401 | type_str = "pass"; | 438 | type_str = "pass"; |
402 | ret_val = netlbl_cipsov4_add_pass(info); | 439 | ret_val = netlbl_cipsov4_add_pass(info); |
403 | break; | 440 | break; |
441 | case CIPSO_V4_MAP_LOCAL: | ||
442 | type_str = "local"; | ||
443 | ret_val = netlbl_cipsov4_add_local(info); | ||
444 | break; | ||
404 | } | 445 | } |
405 | if (ret_val == 0) | 446 | if (ret_val == 0) |
406 | atomic_inc(&netlabel_mgmt_protocount); | 447 | atomic_inc(&netlabel_mgmt_protocount); |
diff --git a/net/netlabel/netlabel_cipso_v4.h b/net/netlabel/netlabel_cipso_v4.h index fb3957f1d69a..c8a4079261f0 100644 --- a/net/netlabel/netlabel_cipso_v4.h +++ b/net/netlabel/netlabel_cipso_v4.h | |||
@@ -50,7 +50,8 @@ | |||
50 | * NLBL_CIPSOV4_A_MLSLVLLST | 50 | * NLBL_CIPSOV4_A_MLSLVLLST |
51 | * NLBL_CIPSOV4_A_MLSCATLST | 51 | * NLBL_CIPSOV4_A_MLSCATLST |
52 | * | 52 | * |
53 | * If using CIPSO_V4_MAP_PASS no additional attributes are required. | 53 | * If using CIPSO_V4_MAP_PASS or CIPSO_V4_MAP_LOCAL no additional attributes |
54 | * are required. | ||
54 | * | 55 | * |
55 | * o REMOVE: | 56 | * o REMOVE: |
56 | * Sent by an application to remove a specific DOI mapping table from the | 57 | * Sent by an application to remove a specific DOI mapping table from the |
@@ -81,7 +82,8 @@ | |||
81 | * NLBL_CIPSOV4_A_MLSLVLLST | 82 | * NLBL_CIPSOV4_A_MLSLVLLST |
82 | * NLBL_CIPSOV4_A_MLSCATLST | 83 | * NLBL_CIPSOV4_A_MLSCATLST |
83 | * | 84 | * |
84 | * If using CIPSO_V4_MAP_PASS no additional attributes are required. | 85 | * If using CIPSO_V4_MAP_PASS or CIPSO_V4_MAP_LOCAL no additional attributes |
86 | * are required. | ||
85 | * | 87 | * |
86 | * o LISTALL: | 88 | * o LISTALL: |
87 | * This message is sent by an application to list the valid DOIs on the | 89 | * This message is sent by an application to list the valid DOIs on the |
diff --git a/net/netlabel/netlabel_kapi.c b/net/netlabel/netlabel_kapi.c index 8435b15c3f7d..b32eceb3ab0d 100644 --- a/net/netlabel/netlabel_kapi.c +++ b/net/netlabel/netlabel_kapi.c | |||
@@ -163,6 +163,9 @@ cfg_cipsov4_add_map_return: | |||
163 | case CIPSO_V4_MAP_PASS: | 163 | case CIPSO_V4_MAP_PASS: |
164 | type_str = "pass"; | 164 | type_str = "pass"; |
165 | break; | 165 | break; |
166 | case CIPSO_V4_MAP_LOCAL: | ||
167 | type_str = "local"; | ||
168 | break; | ||
166 | default: | 169 | default: |
167 | type_str = "(unknown)"; | 170 | type_str = "(unknown)"; |
168 | } | 171 | } |