Received: by 10.213.65.68 with SMTP id h4csp2113911imn; Sun, 8 Apr 2018 20:04:00 -0700 (PDT) X-Google-Smtp-Source: AIpwx49MqDMLg9vW3JYjHtCwamO0o7NPrBpFAghnRznKj/MPf1qbokvx2a3+E/pTUzZ02/VhOSqo X-Received: by 10.101.102.69 with SMTP id z5mr23767747pgv.438.1523243040533; Sun, 08 Apr 2018 20:04:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523243040; cv=none; d=google.com; s=arc-20160816; b=WWmctqU6EbDCsxoJLh4QJJlbDDWUeTPJiJ//vhz4FjDouHOt/8rYyUGsx8cuFwTl+Z OOyuye8fvsHGMZMXUDaJdSL2lxXaa1yMTCZCv03CYvTPQE+lFTyKjG3ofhR5sL43R1Y0 5FXqpNH+bfh/D3XuNtat9dzNr66A6GWIKCUBL00fD3OEvGBUmxXW6ovrYiSME5z58W+i HlPGOYBWOeOZkfMTv7aNyJgiITX2dGOPhZ7S+wmq2xpFsRsSN6aJrVZeIQtsSUnRAGMm 678532BTYo5HtavmiwWvCZ/oL1i7tSAeONPwbQguGlUXbLYaJN0upGa4l786skxvh0dQ Fdhg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=9FfuBHu4NjUMmuSxo5vAeMYV6iMiW0w78li3yUp9zjQ=; b=nfeMWafI9Yns07aug8OtyqICvrqss2m3zGDRokoRkMiYjd6k43qfzfL3Wk1CYgVEI6 99d5cwBRRlCEsxIznDl9Qmf5+XRvEyLITr1SwNmScvY/DW+v4ofkJQi/UH57QSFo7bjW D9UrepCyWbLzcFH4pCOQIwR/NIFMYMrHSE70sCi3ZqyRA9UrjYZR3OySvK9Tu9icqzQi HxccdPUWwN0bf28x2aSHXeDrgSSnFNeBC5FGyADi5NItPdJNgEwBMfzPVxXB+/+RBU0i WRNPWhzSXJ7w0dP3M4J7dBQHEVtpOZr2UxUu1o8wt2zNcZbGOhrVSsxZsowpuvvipcBm 1TUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector1 header.b=OPsUpfb7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e7-v6si13661309plk.397.2018.04.08.20.03.23; Sun, 08 Apr 2018 20:04:00 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector1 header.b=OPsUpfb7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756176AbeDIAau (ORCPT + 99 others); Sun, 8 Apr 2018 20:30:50 -0400 Received: from mail-dm3nam03on0104.outbound.protection.outlook.com ([104.47.41.104]:17478 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756118AbeDIAah (ORCPT ); Sun, 8 Apr 2018 20:30:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=9FfuBHu4NjUMmuSxo5vAeMYV6iMiW0w78li3yUp9zjQ=; b=OPsUpfb7xlexsJLUJhSY5BFLIVJOpeJcX9NX+OSl17+d5xHpDy2v2I/DeMQQVLsAfY66lBza+HECbUFMgHT0/clwIV//DkQCCJFmcQzs3vpdkUT+TRD8ywa8um+Moi+hfDsnpu/ONhDduth3n2uY5VQg+F7cXbh92whAEKXXip8= Received: from DM5PR2101MB1032.namprd21.prod.outlook.com (52.132.128.13) by DM5PR2101MB0807.namprd21.prod.outlook.com (10.167.110.154) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.696.3; Mon, 9 Apr 2018 00:30:32 +0000 Received: from DM5PR2101MB1032.namprd21.prod.outlook.com ([fe80::8109:aef0:a777:7059]) by DM5PR2101MB1032.namprd21.prod.outlook.com ([fe80::8109:aef0:a777:7059%2]) with mapi id 15.20.0696.003; Mon, 9 Apr 2018 00:30:32 +0000 From: Sasha Levin To: "stable@vger.kernel.org" , "linux-kernel@vger.kernel.org" CC: Kees Cook , Paul Lawrence , Sasha Levin Subject: [PATCH AUTOSEL for 4.9 147/293] seccomp: Adjust selftests to avoid double-join Thread-Topic: [PATCH AUTOSEL for 4.9 147/293] seccomp: Adjust selftests to avoid double-join Thread-Index: AQHTz5krlpSY+BGPCUWisNu9iWn2+w== Date: Mon, 9 Apr 2018 00:24:48 +0000 Message-ID: <20180409002239.163177-147-alexander.levin@microsoft.com> References: <20180409002239.163177-1-alexander.levin@microsoft.com> In-Reply-To: <20180409002239.163177-1-alexander.levin@microsoft.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [52.168.54.252] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;DM5PR2101MB0807;7:FxnRBJTBh+ill1zzyoZI/Uq9Byi9Ttj2lCsieO2VaYistgpg+kcmf/jjSfPzxpHwDW2n+HEWIAer4kqsSTsyo/bajCaE0D/SLDnq1tL8Bi219hQzS2sL7apPJDwFSKfexbMXgncrJTF7Pr0IIMuc2OkFTQh8KjO3qUS08uxWXtuEwncxQHfPtIi30wzHDXJh0Ylkznln3T2uKHJO09785KW+k8/1l+V2Rf1swkjkYtjCIIKIeQvbzho/eyoIK7ll;20:oxUn1ScP4urOWNI/7E02FyUJEiUo3+ZE/Vbo33SAB/OMUP89bZYdPNRx0vy9YufmBfDmNPFhP78pel+9kN+g97GsPYg7YHawYtaX9Tw6miAzOzfMtDfC+N+2Ji/FHHDbW3VJMrmrCHAvGZLTBqpg1j+ksSa/WFydxsWAZ6TWEfs= x-ms-office365-filtering-ht: Tenant X-MS-Office365-Filtering-Correlation-Id: 22c00ade-88e3-438e-5975-08d59db11aa0 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(3008032)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7193020);SRVR:DM5PR2101MB0807; x-ms-traffictypediagnostic: DM5PR2101MB0807: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alexander.Levin@microsoft.com; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(28532068793085)(89211679590171)(211936372134217)(153496737603132); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(61425038)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3231221)(944501327)(52105095)(3002001)(6055026)(61426038)(61427038)(6041310)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011);SRVR:DM5PR2101MB0807;BCL:0;PCL:0;RULEID:;SRVR:DM5PR2101MB0807; x-forefront-prvs: 0637FCE711 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(39380400002)(39860400002)(396003)(366004)(376002)(346002)(199004)(189003)(14454004)(4326008)(54906003)(25786009)(53936002)(2900100001)(1076002)(3280700002)(6486002)(186003)(2616005)(68736007)(110136005)(11346002)(10090500001)(6116002)(107886003)(3846002)(36756003)(8676002)(72206003)(22452003)(66066001)(26005)(6512007)(478600001)(3660700001)(81156014)(86362001)(81166006)(86612001)(7736002)(305945005)(8936002)(10290500003)(6436002)(105586002)(6666003)(316002)(575784001)(59450400001)(76176011)(5660300001)(476003)(106356001)(2906002)(6506007)(446003)(2501003)(99286004)(5250100002)(486006)(102836004)(97736004)(22906009)(217873001);DIR:OUT;SFP:1102;SCL:1;SRVR:DM5PR2101MB0807;H:DM5PR2101MB1032.namprd21.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: microsoft.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 3jNYrZRaLy0LniELfy7AZCk/tyc8Dir4yvxJB4gnk50dgVtlVzyS8UhaF9rwt6zh9EzTVIJ1oDrd300pSDXkuHgQauc7+WL8689AhlVVRXNZhE/FiT4Kfb8+XSVEc3K+FBgswTu4aDCp3kDdEENuSpsFXBmpqMYP8fSG7G1cyXOJxdwfyLcfnNBHDkUcq5gOZegNlyXaVBYnL6nkabWylex4GjYs7rzjLkXkqJLAMR925PgnBcsIqaKEyr8bNq8RjFhd4C5F4yrFTqZVaS2yWZS58y56fX9DyIzF8gFfC4c6XdL3hOSkeTwPF2qBv+Y3Zjta6lgbaSMxOf+S95th/Qfwc5JnMWQNQ86jo51+Iuc2FGoYK323/dsvd8ttcT2XCCTw2UVaFtW8hfqFFUrwi3X/K32vEcjVw1dC9gflSHg= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 22c00ade-88e3-438e-5975-08d59db11aa0 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2018 00:24:48.6594 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR2101MB0807 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kees Cook [ Upstream commit 93bd70e3330be45542c455dde11d8dc657ab3044 ] While glibc's pthread implementation is rather forgiving about repeat thread joining, Bionic has recently become much more strict. To deal with this, actually track which threads have been successfully joined and kill the rest at teardown. Based on a patch from Paul Lawrence. Cc: Paul Lawrence Signed-off-by: Kees Cook Signed-off-by: Sasha Levin --- tools/testing/selftests/seccomp/seccomp_bpf.c | 51 ++++++++++++++++++-----= ---- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/= selftests/seccomp/seccomp_bpf.c index f68998149351..68d0a329371f 100644 --- a/tools/testing/selftests/seccomp/seccomp_bpf.c +++ b/tools/testing/selftests/seccomp/seccomp_bpf.c @@ -1830,6 +1830,23 @@ struct tsync_sibling { struct __test_metadata *metadata; }; =20 +/* + * To avoid joining joined threads (which is not allowed by Bionic), + * make sure we both successfully join and clear the tid to skip a + * later join attempt during fixture teardown. Any remaining threads + * will be directly killed during teardown. + */ +#define PTHREAD_JOIN(tid, status) \ + do { \ + int _rc =3D pthread_join(tid, status); \ + if (_rc) { \ + TH_LOG("pthread_join of tid %u failed: %d\n", \ + (unsigned int)tid, _rc); \ + } else { \ + tid =3D 0; \ + } \ + } while (0) + FIXTURE_DATA(TSYNC) { struct sock_fprog root_prog, apply_prog; struct tsync_sibling sibling[TSYNC_SIBLINGS]; @@ -1898,14 +1915,14 @@ FIXTURE_TEARDOWN(TSYNC) =20 for ( ; sib < self->sibling_count; ++sib) { struct tsync_sibling *s =3D &self->sibling[sib]; - void *status; =20 if (!s->tid) continue; - if (pthread_kill(s->tid, 0)) { - pthread_cancel(s->tid); - pthread_join(s->tid, &status); - } + /* + * If a thread is still running, it may be stuck, so hit + * it over the head really hard. + */ + pthread_kill(s->tid, 9); } pthread_mutex_destroy(&self->mutex); pthread_cond_destroy(&self->cond); @@ -1995,9 +2012,9 @@ TEST_F(TSYNC, siblings_fail_prctl) pthread_mutex_unlock(&self->mutex); =20 /* Ensure diverging sibling failed to call prctl. */ - pthread_join(self->sibling[0].tid, &status); + PTHREAD_JOIN(self->sibling[0].tid, &status); EXPECT_EQ(SIBLING_EXIT_FAILURE, (long)status); - pthread_join(self->sibling[1].tid, &status); + PTHREAD_JOIN(self->sibling[1].tid, &status); EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status); } =20 @@ -2037,9 +2054,9 @@ TEST_F(TSYNC, two_siblings_with_ancestor) } pthread_mutex_unlock(&self->mutex); /* Ensure they are both killed and don't exit cleanly. */ - pthread_join(self->sibling[0].tid, &status); + PTHREAD_JOIN(self->sibling[0].tid, &status); EXPECT_EQ(0x0, (long)status); - pthread_join(self->sibling[1].tid, &status); + PTHREAD_JOIN(self->sibling[1].tid, &status); EXPECT_EQ(0x0, (long)status); } =20 @@ -2063,9 +2080,9 @@ TEST_F(TSYNC, two_sibling_want_nnp) pthread_mutex_unlock(&self->mutex); =20 /* Ensure they are both upset about lacking nnp. */ - pthread_join(self->sibling[0].tid, &status); + PTHREAD_JOIN(self->sibling[0].tid, &status); EXPECT_EQ(SIBLING_EXIT_NEWPRIVS, (long)status); - pthread_join(self->sibling[1].tid, &status); + PTHREAD_JOIN(self->sibling[1].tid, &status); EXPECT_EQ(SIBLING_EXIT_NEWPRIVS, (long)status); } =20 @@ -2103,9 +2120,9 @@ TEST_F(TSYNC, two_siblings_with_no_filter) pthread_mutex_unlock(&self->mutex); =20 /* Ensure they are both killed and don't exit cleanly. */ - pthread_join(self->sibling[0].tid, &status); + PTHREAD_JOIN(self->sibling[0].tid, &status); EXPECT_EQ(0x0, (long)status); - pthread_join(self->sibling[1].tid, &status); + PTHREAD_JOIN(self->sibling[1].tid, &status); EXPECT_EQ(0x0, (long)status); } =20 @@ -2148,9 +2165,9 @@ TEST_F(TSYNC, two_siblings_with_one_divergence) pthread_mutex_unlock(&self->mutex); =20 /* Ensure they are both unkilled. */ - pthread_join(self->sibling[0].tid, &status); + PTHREAD_JOIN(self->sibling[0].tid, &status); EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status); - pthread_join(self->sibling[1].tid, &status); + PTHREAD_JOIN(self->sibling[1].tid, &status); EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status); } =20 @@ -2207,7 +2224,7 @@ TEST_F(TSYNC, two_siblings_not_under_filter) TH_LOG("cond broadcast non-zero"); } pthread_mutex_unlock(&self->mutex); - pthread_join(self->sibling[sib].tid, &status); + PTHREAD_JOIN(self->sibling[sib].tid, &status); EXPECT_EQ(SIBLING_EXIT_UNKILLED, (long)status); /* Poll for actual task death. pthread_join doesn't guarantee it. */ while (!kill(self->sibling[sib].system_tid, 0)) @@ -2232,7 +2249,7 @@ TEST_F(TSYNC, two_siblings_not_under_filter) TH_LOG("cond broadcast non-zero"); } pthread_mutex_unlock(&self->mutex); - pthread_join(self->sibling[sib].tid, &status); + PTHREAD_JOIN(self->sibling[sib].tid, &status); EXPECT_EQ(0, (long)status); /* Poll for actual task death. pthread_join doesn't guarantee it. */ while (!kill(self->sibling[sib].system_tid, 0)) --=20 2.15.1