aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-07-05 14:26:35 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-07-05 14:26:35 -0400
commite24dd9ee5399747b71c1d982a484fc7601795f31 (patch)
tree14fcec8728916092a9f6dbeb0f2b8d5c5a4e5c9a /tools
parent7391786a64dcfe9c609a1f8e2204c1abf42ded23 (diff)
parentc4758fa59285fe4dbfeab4364a6957936d040fbf (diff)
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security
Pull security layer updates from James Morris: - a major update for AppArmor. From JJ: * several bug fixes and cleanups * the patch to add symlink support to securityfs that was floated on the list earlier and the apparmorfs changes that make use of securityfs symlinks * it introduces the domain labeling base code that Ubuntu has been carrying for several years, with several cleanups applied. And it converts the current mediation over to using the domain labeling base, which brings domain stacking support with it. This finally will bring the base upstream code in line with Ubuntu and provide a base to upstream the new feature work that Ubuntu carries. * This does _not_ contain any of the newer apparmor mediation features/controls (mount, signals, network, keys, ...) that Ubuntu is currently carrying, all of which will be RFC'd on top of this. - Notable also is the Infiniband work in SELinux, and the new file:map permission. From Paul: "While we're down to 21 patches for v4.13 (it was 31 for v4.12), the diffstat jumps up tremendously with over 2k of line changes. Almost all of these changes are the SELinux/IB work done by Daniel Jurgens; some other noteworthy changes include a NFS v4.2 labeling fix, a new file:map permission, and reporting of policy capabilities on policy load" There's also now genfscon labeling support for tracefs, which was lost in v4.1 with the separation from debugfs. - Smack incorporates a safer socket check in file_receive, and adds a cap_capable call in privilege check. - TPM as usual has a bunch of fixes and enhancements. - Multiple calls to security_add_hooks() can now be made for the same LSM, to allow LSMs to have hook declarations across multiple files. - IMA now supports different "ima_appraise=" modes (eg. log, fix) from the boot command line. * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (126 commits) apparmor: put back designators in struct initialisers seccomp: Switch from atomic_t to recount_t seccomp: Adjust selftests to avoid double-join seccomp: Clean up core dump logic IMA: update IMA policy documentation to include pcr= option ima: Log the same audit cause whenever a file has no signature ima: Simplify policy_func_show. integrity: Small code improvements ima: fix get_binary_runtime_size() ima: use ima_parse_buf() to parse template data ima: use ima_parse_buf() to parse measurements headers ima: introduce ima_parse_buf() ima: Add cgroups2 to the defaults list ima: use memdup_user_nul ima: fix up #endif comments IMA: Correct Kconfig dependencies for hash selection ima: define is_ima_appraise_enabled() ima: define Kconfig IMA_APPRAISE_BOOTPARAM option ima: define a set of appraisal rules requiring file signatures ima: extend the "ima_policy" boot command line to support multiple policies ...
Diffstat (limited to 'tools')
-rw-r--r--tools/testing/selftests/seccomp/seccomp_bpf.c51
1 files changed, 34 insertions, 17 deletions
diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c
index 03f1fa495d74..00a928b833d0 100644
--- a/tools/testing/selftests/seccomp/seccomp_bpf.c
+++ b/tools/testing/selftests/seccomp/seccomp_bpf.c
@@ -1822,6 +1822,23 @@ struct tsync_sibling {
1822 struct __test_metadata *metadata; 1822 struct __test_metadata *metadata;
1823}; 1823};
1824 1824
1825/*
1826 * To avoid joining joined threads (which is not allowed by Bionic),
1827 * make sure we both successfully join and clear the tid to skip a
1828 * later join attempt during fixture teardown. Any remaining threads
1829 * will be directly killed during teardown.
1830 */
1831#define PTHREAD_JOIN(tid, status) \
1832 do { \
1833 int _rc = pthread_join(tid, status); \
1834 if (_rc) { \
1835 TH_LOG("pthread_join of tid %u failed: %d\n", \
1836 (unsigned int)tid, _rc); \
1837 } else { \
1838 tid = 0; \
1839 } \
1840 } while (0)
1841
1825FIXTURE_DATA(TSYNC) { 1842FIXTURE_DATA(TSYNC) {
1826 struct sock_fprog root_prog, apply_prog; 1843 struct sock_fprog root_prog, apply_prog;
1827 struct tsync_sibling sibling[TSYNC_SIBLINGS]; 1844 struct tsync_sibling sibling[TSYNC_SIBLINGS];
@@ -1890,14 +1907,14 @@ FIXTURE_TEARDOWN(TSYNC)
1890 1907
1891 for ( ; sib < self->sibling_count; ++sib) { 1908 for ( ; sib < self->sibling_count; ++sib) {
1892 struct tsync_sibling *s = &self->sibling[sib]; 1909 struct tsync_sibling *s = &self->sibling[sib];
1893 void *status;
1894 1910
1895 if (!s->tid) 1911 if (!s->tid)
1896 continue; 1912 continue;
1897 if (pthread_kill(s->tid, 0)) { 1913 /*
1898 pthread_cancel(s->tid); 1914 * If a thread is still running, it may be stuck, so hit
1899 pthread_join(s->tid, &status); 1915 * it over the head really hard.
1900 } 1916 */
1917 pthread_kill(s->tid, 9);
1901 } 1918 }
1902 pthread_mutex_destroy(&self->mutex); 1919 pthread_mutex_destroy(&self->mutex);
1903 pthread_cond_destroy(&self->cond); 1920 pthread_cond_destroy(&self->cond);
@@ -1987,9 +2004,9 @@ TEST_F(TSYNC, siblings_fail_prctl)
1987 pthread_mutex_unlock(&self->mutex); 2004 pthread_mutex_unlock(&self->mutex);
1988 2005
1989 /* Ensure diverging sibling failed to call prctl. */ 2006 /* Ensure diverging sibling failed to call prctl. */
1990 pthread_join(self->sibling[0].tid, &status); 2007 PTHREAD_JOIN(self->sibling[0].tid, &status);
1991 EXPECT_EQ(SIBLING_EXIT_FAILURE, (long)status); 2008 EXPECT_EQ(SIBLING_EXIT_FAILURE, (long)status);
1992 pthread_join(self->sibling[1].tid, &status); 2009 PTHREAD_JOIN(self->sibling[1].tid, &status);
1993 EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status); 2010 EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status);
1994} 2011}
1995 2012
@@ -2029,9 +2046,9 @@ TEST_F(TSYNC, two_siblings_with_ancestor)
2029 } 2046 }
2030 pthread_mutex_unlock(&self->mutex); 2047 pthread_mutex_unlock(&self->mutex);
2031 /* Ensure they are both killed and don't exit cleanly. */ 2048 /* Ensure they are both killed and don't exit cleanly. */
2032 pthread_join(self->sibling[0].tid, &status); 2049 PTHREAD_JOIN(self->sibling[0].tid, &status);
2033 EXPECT_EQ(0x0, (long)status); 2050 EXPECT_EQ(0x0, (long)status);
2034 pthread_join(self->sibling[1].tid, &status); 2051 PTHREAD_JOIN(self->sibling[1].tid, &status);
2035 EXPECT_EQ(0x0, (long)status); 2052 EXPECT_EQ(0x0, (long)status);
2036} 2053}
2037 2054
@@ -2055,9 +2072,9 @@ TEST_F(TSYNC, two_sibling_want_nnp)
2055 pthread_mutex_unlock(&self->mutex); 2072 pthread_mutex_unlock(&self->mutex);
2056 2073
2057 /* Ensure they are both upset about lacking nnp. */ 2074 /* Ensure they are both upset about lacking nnp. */
2058 pthread_join(self->sibling[0].tid, &status); 2075 PTHREAD_JOIN(self->sibling[0].tid, &status);
2059 EXPECT_EQ(SIBLING_EXIT_NEWPRIVS, (long)status); 2076 EXPECT_EQ(SIBLING_EXIT_NEWPRIVS, (long)status);
2060 pthread_join(self->sibling[1].tid, &status); 2077 PTHREAD_JOIN(self->sibling[1].tid, &status);
2061 EXPECT_EQ(SIBLING_EXIT_NEWPRIVS, (long)status); 2078 EXPECT_EQ(SIBLING_EXIT_NEWPRIVS, (long)status);
2062} 2079}
2063 2080
@@ -2095,9 +2112,9 @@ TEST_F(TSYNC, two_siblings_with_no_filter)
2095 pthread_mutex_unlock(&self->mutex); 2112 pthread_mutex_unlock(&self->mutex);
2096 2113
2097 /* Ensure they are both killed and don't exit cleanly. */ 2114 /* Ensure they are both killed and don't exit cleanly. */
2098 pthread_join(self->sibling[0].tid, &status); 2115 PTHREAD_JOIN(self->sibling[0].tid, &status);
2099 EXPECT_EQ(0x0, (long)status); 2116 EXPECT_EQ(0x0, (long)status);
2100 pthread_join(self->sibling[1].tid, &status); 2117 PTHREAD_JOIN(self->sibling[1].tid, &status);
2101 EXPECT_EQ(0x0, (long)status); 2118 EXPECT_EQ(0x0, (long)status);
2102} 2119}
2103 2120
@@ -2140,9 +2157,9 @@ TEST_F(TSYNC, two_siblings_with_one_divergence)
2140 pthread_mutex_unlock(&self->mutex); 2157 pthread_mutex_unlock(&self->mutex);
2141 2158
2142 /* Ensure they are both unkilled. */ 2159 /* Ensure they are both unkilled. */
2143 pthread_join(self->sibling[0].tid, &status); 2160 PTHREAD_JOIN(self->sibling[0].tid, &status);
2144 EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status); 2161 EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status);
2145 pthread_join(self->sibling[1].tid, &status); 2162 PTHREAD_JOIN(self->sibling[1].tid, &status);
2146 EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status); 2163 EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status);
2147} 2164}
2148 2165
@@ -2199,7 +2216,7 @@ TEST_F(TSYNC, two_siblings_not_under_filter)
2199 TH_LOG("cond broadcast non-zero"); 2216 TH_LOG("cond broadcast non-zero");
2200 } 2217 }
2201 pthread_mutex_unlock(&self->mutex); 2218 pthread_mutex_unlock(&self->mutex);
2202 pthread_join(self->sibling[sib].tid, &status); 2219 PTHREAD_JOIN(self->sibling[sib].tid, &status);
2203 EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status); 2220 EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status);
2204 /* Poll for actual task death. pthread_join doesn't guarantee it. */ 2221 /* Poll for actual task death. pthread_join doesn't guarantee it. */
2205 while (!kill(self->sibling[sib].system_tid, 0)) 2222 while (!kill(self->sibling[sib].system_tid, 0))
@@ -2224,7 +2241,7 @@ TEST_F(TSYNC, two_siblings_not_under_filter)
2224 TH_LOG("cond broadcast non-zero"); 2241 TH_LOG("cond broadcast non-zero");
2225 } 2242 }
2226 pthread_mutex_unlock(&self->mutex); 2243 pthread_mutex_unlock(&self->mutex);
2227 pthread_join(self->sibling[sib].tid, &status); 2244 PTHREAD_JOIN(self->sibling[sib].tid, &status);
2228 EXPECT_EQ(0, (long)status); 2245 EXPECT_EQ(0, (long)status);
2229 /* Poll for actual task death. pthread_join doesn't guarantee it. */ 2246 /* Poll for actual task death. pthread_join doesn't guarantee it. */
2230 while (!kill(self->sibling[sib].system_tid, 0)) 2247 while (!kill(self->sibling[sib].system_tid, 0))