diff options
author | John Johansen <john.johansen@canonical.com> | 2017-09-06 17:57:59 -0400 |
---|---|---|
committer | John Johansen <john.johansen@canonical.com> | 2018-02-09 14:30:01 -0500 |
commit | 6e0654d20ed9679cbf75a0ff7cd786e364f7f09a (patch) | |
tree | 9c15e28e85b9cc66984e3a6fdb7101a2ae2b0a58 | |
parent | cf65fabc2a2c8c12031678d86a2bd4a660865011 (diff) |
apparmor: use the dfa to do label parse string splitting
The current split scheme is actually wrong in that it splits
///&
where that is invalid and should fail. Use the dfa to do a proper
bounded split without having to worry about getting the string
processing right in code.
Signed-off-by: John Johansen <john.johansen@canonical.com>
Acked-by: Seth Arnold <seth.arnold@canonical.com>
-rw-r--r-- | security/apparmor/include/label.h | 25 | ||||
-rw-r--r-- | security/apparmor/include/match.h | 1 | ||||
-rw-r--r-- | security/apparmor/label.c | 12 | ||||
-rw-r--r-- | security/apparmor/match.c | 29 | ||||
-rw-r--r-- | security/apparmor/stacksplitdfa.in | 114 |
5 files changed, 170 insertions, 11 deletions
diff --git a/security/apparmor/include/label.h b/security/apparmor/include/label.h index af22dcbbcb8a..80e9ba9d172c 100644 --- a/security/apparmor/include/label.h +++ b/security/apparmor/include/label.h | |||
@@ -330,6 +330,31 @@ void aa_label_printk(struct aa_label *label, gfp_t gfp); | |||
330 | struct aa_label *aa_label_parse(struct aa_label *base, const char *str, | 330 | struct aa_label *aa_label_parse(struct aa_label *base, const char *str, |
331 | gfp_t gfp, bool create, bool force_stack); | 331 | gfp_t gfp, bool create, bool force_stack); |
332 | 332 | ||
333 | static inline const char *aa_label_strn_split(const char *str, int n) | ||
334 | { | ||
335 | const char *pos; | ||
336 | unsigned int state; | ||
337 | |||
338 | state = aa_dfa_matchn_until(stacksplitdfa, DFA_START, str, n, &pos); | ||
339 | if (!ACCEPT_TABLE(stacksplitdfa)[state]) | ||
340 | return NULL; | ||
341 | |||
342 | return pos - 3; | ||
343 | } | ||
344 | |||
345 | static inline const char *aa_label_str_split(const char *str) | ||
346 | { | ||
347 | const char *pos; | ||
348 | unsigned int state; | ||
349 | |||
350 | state = aa_dfa_match_until(stacksplitdfa, DFA_START, str, &pos); | ||
351 | if (!ACCEPT_TABLE(stacksplitdfa)[state]) | ||
352 | return NULL; | ||
353 | |||
354 | return pos - 3; | ||
355 | } | ||
356 | |||
357 | |||
333 | 358 | ||
334 | struct aa_perms; | 359 | struct aa_perms; |
335 | int aa_label_match(struct aa_profile *profile, struct aa_label *label, | 360 | int aa_label_match(struct aa_profile *profile, struct aa_label *label, |
diff --git a/security/apparmor/include/match.h b/security/apparmor/include/match.h index 72b9b89670e6..cd8aeab6ac57 100644 --- a/security/apparmor/include/match.h +++ b/security/apparmor/include/match.h | |||
@@ -101,6 +101,7 @@ struct aa_dfa { | |||
101 | }; | 101 | }; |
102 | 102 | ||
103 | extern struct aa_dfa *nulldfa; | 103 | extern struct aa_dfa *nulldfa; |
104 | extern struct aa_dfa *stacksplitdfa; | ||
104 | 105 | ||
105 | #define byte_to_byte(X) (X) | 106 | #define byte_to_byte(X) (X) |
106 | 107 | ||
diff --git a/security/apparmor/label.c b/security/apparmor/label.c index 324fe5c60f87..31e2f701d971 100644 --- a/security/apparmor/label.c +++ b/security/apparmor/label.c | |||
@@ -1815,7 +1815,9 @@ static int label_count_str_entries(const char *str) | |||
1815 | 1815 | ||
1816 | AA_BUG(!str); | 1816 | AA_BUG(!str); |
1817 | 1817 | ||
1818 | for (split = strstr(str, "//&"); split; split = strstr(str, "//&")) { | 1818 | for (split = aa_label_str_split(str); |
1819 | split; | ||
1820 | split = aa_label_str_split(str)) { | ||
1819 | count++; | 1821 | count++; |
1820 | str = split + 3; | 1822 | str = split + 3; |
1821 | } | 1823 | } |
@@ -1859,7 +1861,7 @@ struct aa_label *aa_label_parse(struct aa_label *base, const char *str, | |||
1859 | DEFINE_VEC(profile, vec); | 1861 | DEFINE_VEC(profile, vec); |
1860 | struct aa_label *label, *currbase = base; | 1862 | struct aa_label *label, *currbase = base; |
1861 | int i, len, stack = 0, error; | 1863 | int i, len, stack = 0, error; |
1862 | char *split; | 1864 | const char *split; |
1863 | 1865 | ||
1864 | AA_BUG(!base); | 1866 | AA_BUG(!base); |
1865 | AA_BUG(!str); | 1867 | AA_BUG(!str); |
@@ -1883,7 +1885,8 @@ struct aa_label *aa_label_parse(struct aa_label *base, const char *str, | |||
1883 | for (i = 0; i < stack; i++) | 1885 | for (i = 0; i < stack; i++) |
1884 | vec[i] = aa_get_profile(base->vec[i]); | 1886 | vec[i] = aa_get_profile(base->vec[i]); |
1885 | 1887 | ||
1886 | for (split = strstr(str, "//&"), i = stack; split && i < len; i++) { | 1888 | for (split = aa_label_str_split(str), i = stack; |
1889 | split && i < len; i++) { | ||
1887 | vec[i] = fqlookupn_profile(base, currbase, str, split - str); | 1890 | vec[i] = fqlookupn_profile(base, currbase, str, split - str); |
1888 | if (!vec[i]) | 1891 | if (!vec[i]) |
1889 | goto fail; | 1892 | goto fail; |
@@ -1894,7 +1897,7 @@ struct aa_label *aa_label_parse(struct aa_label *base, const char *str, | |||
1894 | if (vec[i]->ns != labels_ns(currbase)) | 1897 | if (vec[i]->ns != labels_ns(currbase)) |
1895 | currbase = &vec[i]->label; | 1898 | currbase = &vec[i]->label; |
1896 | str = split + 3; | 1899 | str = split + 3; |
1897 | split = strstr(str, "//&"); | 1900 | split = aa_label_str_split(str); |
1898 | } | 1901 | } |
1899 | /* last element doesn't have a split */ | 1902 | /* last element doesn't have a split */ |
1900 | if (i < len) { | 1903 | if (i < len) { |
@@ -1930,7 +1933,6 @@ fail: | |||
1930 | goto out; | 1933 | goto out; |
1931 | } | 1934 | } |
1932 | 1935 | ||
1933 | |||
1934 | /** | 1936 | /** |
1935 | * aa_labelset_destroy - remove all labels from the label set | 1937 | * aa_labelset_destroy - remove all labels from the label set |
1936 | * @ls: label set to cleanup (NOT NULL) | 1938 | * @ls: label set to cleanup (NOT NULL) |
diff --git a/security/apparmor/match.c b/security/apparmor/match.c index 6c6dc1a22f9a..5d95caeddebc 100644 --- a/security/apparmor/match.c +++ b/security/apparmor/match.c | |||
@@ -30,6 +30,11 @@ static char nulldfa_src[] = { | |||
30 | }; | 30 | }; |
31 | struct aa_dfa *nulldfa; | 31 | struct aa_dfa *nulldfa; |
32 | 32 | ||
33 | static char stacksplitdfa_src[] = { | ||
34 | #include "stacksplitdfa.in" | ||
35 | }; | ||
36 | struct aa_dfa *stacksplitdfa; | ||
37 | |||
33 | int aa_setup_dfa_engine(void) | 38 | int aa_setup_dfa_engine(void) |
34 | { | 39 | { |
35 | int error; | 40 | int error; |
@@ -37,19 +42,31 @@ int aa_setup_dfa_engine(void) | |||
37 | nulldfa = aa_dfa_unpack(nulldfa_src, sizeof(nulldfa_src), | 42 | nulldfa = aa_dfa_unpack(nulldfa_src, sizeof(nulldfa_src), |
38 | TO_ACCEPT1_FLAG(YYTD_DATA32) | | 43 | TO_ACCEPT1_FLAG(YYTD_DATA32) | |
39 | TO_ACCEPT2_FLAG(YYTD_DATA32)); | 44 | TO_ACCEPT2_FLAG(YYTD_DATA32)); |
40 | if (!IS_ERR(nulldfa)) | 45 | if (IS_ERR(nulldfa)) { |
41 | return 0; | 46 | error = PTR_ERR(nulldfa); |
47 | nulldfa = NULL; | ||
48 | return error; | ||
49 | } | ||
42 | 50 | ||
43 | error = PTR_ERR(nulldfa); | 51 | stacksplitdfa = aa_dfa_unpack(stacksplitdfa_src, |
44 | nulldfa = NULL; | 52 | sizeof(stacksplitdfa_src), |
53 | TO_ACCEPT1_FLAG(YYTD_DATA32) | | ||
54 | TO_ACCEPT2_FLAG(YYTD_DATA32)); | ||
55 | if (IS_ERR(stacksplitdfa)) { | ||
56 | aa_put_dfa(nulldfa); | ||
57 | nulldfa = NULL; | ||
58 | error = PTR_ERR(stacksplitdfa); | ||
59 | stacksplitdfa = NULL; | ||
60 | return error; | ||
61 | } | ||
45 | 62 | ||
46 | return error; | 63 | return 0; |
47 | } | 64 | } |
48 | 65 | ||
49 | void aa_teardown_dfa_engine(void) | 66 | void aa_teardown_dfa_engine(void) |
50 | { | 67 | { |
68 | aa_put_dfa(stacksplitdfa); | ||
51 | aa_put_dfa(nulldfa); | 69 | aa_put_dfa(nulldfa); |
52 | nulldfa = NULL; | ||
53 | } | 70 | } |
54 | 71 | ||
55 | /** | 72 | /** |
diff --git a/security/apparmor/stacksplitdfa.in b/security/apparmor/stacksplitdfa.in new file mode 100644 index 000000000000..4bddd10b62a9 --- /dev/null +++ b/security/apparmor/stacksplitdfa.in | |||
@@ -0,0 +1,114 @@ | |||
1 | /* 0x1 [^\000]*[^/\000]//& */ 0x1B, 0x5E, 0x78, 0x3D, 0x00, 0x00, | ||
2 | 0x00, 0x18, 0x00, 0x00, 0x04, 0xD8, 0x00, 0x00, 0x6E, 0x6F, 0x74, | ||
3 | 0x66, 0x6C, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, | ||
4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, | ||
5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, | ||
7 | 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, | ||
8 | 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
10 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
11 | 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, | ||
12 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | ||
13 | 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, | ||
14 | 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, | ||
15 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, | ||
16 | 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x08, 0x00, | ||
17 | 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, | ||
18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
19 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
20 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
21 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
22 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
23 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
24 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
25 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, | ||
26 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, | ||
27 | 0x04, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
29 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
31 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
32 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
33 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
34 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
35 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
36 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
37 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
38 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
39 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
40 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
41 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
42 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
43 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
44 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
45 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
46 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
47 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
48 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
49 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
50 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
51 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
52 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
53 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
54 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
55 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
56 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
57 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
58 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
59 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
60 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
61 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
62 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
63 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
64 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
65 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, | ||
66 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, | ||
67 | 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, | ||
68 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
69 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
70 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
71 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
72 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
73 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
74 | 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
75 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, | ||
76 | 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
77 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
78 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
79 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
80 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
81 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
82 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
83 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
84 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
85 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
86 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
87 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
88 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
89 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
90 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
91 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
92 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
93 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
94 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
95 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
96 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
97 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
98 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
99 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
100 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
101 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
102 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
103 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
104 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
105 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
106 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
107 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
108 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
109 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
110 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
111 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
112 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
113 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
114 | 0x00, 0x00 | ||