apparmor: support v7 transition format compatible with label_parse
Signed-off-by: John Johansen <john.johansen@canonical.com>
This commit is contained in:
		
							parent
							
								
									064dc9472f
								
							
						
					
					
						commit
						5379a33120
					
				| @ -2103,6 +2103,8 @@ static struct aa_sfs_entry aa_sfs_entry_domain[] = { | ||||
| 
 | ||||
| static struct aa_sfs_entry aa_sfs_entry_versions[] = { | ||||
| 	AA_SFS_FILE_BOOLEAN("v5",	1), | ||||
| 	AA_SFS_FILE_BOOLEAN("v6",	1), | ||||
| 	AA_SFS_FILE_BOOLEAN("v7",	1), | ||||
| 	{ } | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -466,7 +466,7 @@ static bool unpack_trans_table(struct aa_ext *e, struct aa_profile *profile) | ||||
| 		profile->file.trans.size = size; | ||||
| 		for (i = 0; i < size; i++) { | ||||
| 			char *str; | ||||
| 			int c, j, size2 = unpack_strdup(e, &str, NULL); | ||||
| 			int c, j, pos, size2 = unpack_strdup(e, &str, NULL); | ||||
| 			/* unpack_strdup verifies that the last character is
 | ||||
| 			 * null termination byte. | ||||
| 			 */ | ||||
| @ -478,19 +478,25 @@ static bool unpack_trans_table(struct aa_ext *e, struct aa_profile *profile) | ||||
| 				goto fail; | ||||
| 
 | ||||
| 			/* count internal #  of internal \0 */ | ||||
| 			for (c = j = 0; j < size2 - 2; j++) { | ||||
| 				if (!str[j]) | ||||
| 			for (c = j = 0; j < size2 - 1; j++) { | ||||
| 				if (!str[j]) { | ||||
| 					pos = j; | ||||
| 					c++; | ||||
| 				} | ||||
| 			} | ||||
| 			if (*str == ':') { | ||||
| 				/* first character after : must be valid */ | ||||
| 				if (!str[1]) | ||||
| 					goto fail; | ||||
| 				/* beginning with : requires an embedded \0,
 | ||||
| 				 * verify that exactly 1 internal \0 exists | ||||
| 				 * trailing \0 already verified by unpack_strdup | ||||
| 				 * | ||||
| 				 * convert \0 back to : for label_parse | ||||
| 				 */ | ||||
| 				if (c != 1) | ||||
| 					goto fail; | ||||
| 				/* first character after : must be valid */ | ||||
| 				if (!str[1]) | ||||
| 				if (c == 1) | ||||
| 					str[pos] = ':'; | ||||
| 				else if (c > 1) | ||||
| 					goto fail; | ||||
| 			} else if (c) | ||||
| 				/* fail - all other cases with embedded \0 */ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user