Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751662AbdGYRMl (ORCPT ); Tue, 25 Jul 2017 13:12:41 -0400 Received: from mail-bn3nam01on0058.outbound.protection.outlook.com ([104.47.33.58]:56224 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750974AbdGYRMi (ORCPT ); Tue, 25 Jul 2017 13:12:38 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=paul.elder@pitt.edu; From: Paul Elder To: shuahkh@osg.samsung.com, shuah@kernel.org, gregkh@linuxfoundation.org, alicef@gentoo.org, alice.ferrazzi@gmail.com Cc: Paul Elder , linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] kselftest: exec: make exec test output conform to TAP13 Date: Wed, 26 Jul 2017 02:12:09 +0900 Message-Id: <20170725171209.3580-1-paul.elder@pitt.edu> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [113.111.0.255] X-ClientProxiedBy: HK2PR04CA0021.apcprd04.prod.outlook.com (10.162.205.159) To BN3PR04MB2163.namprd04.prod.outlook.com (10.166.75.26) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f102f649-ed5e-4be9-86f0-08d4d380586f X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:BN3PR04MB2163; X-Microsoft-Exchange-Diagnostics: 1;BN3PR04MB2163;3:DcVnM1MpYj0dMi6qbLRaM/XbjlFP4Ks9dennODmIGIC9UzSIebft80ITBUwp/oz2QHWJF/nlb5N4rxj3IidAW6sW7DZ1/8qel6taiIQWlzQmBpiRZBa8pnDX/Hlej8a9rPzEyq3eyMK+M++s3ZR1mc10fsVYwxIR4HCLoCaoNZyPpx7zjKie0WUZZkRqKJ3BvOlDJIOMMVGVdfx3NNAVwnHU6JLzLs/efub7gkKtZG+5KrZDprZICsPBr8RTEwr1p6I+hwiQR+8bj4cmMtsFA9USH7KOhYfKmeGJ+ExKM8CdxCpsyeyBP3xXMeA0c7BnTFhjvVMZ3/ISAM/WUbBahGqJYb5xFoAZwpw8tt+VOi34bFLramVv4Ya846hZcfhd3lbOkKejx6Wcar7tsZKL42EO0ua++SF7ZYW4BtmgEmuLkQzt/pIqSYy0rn8StpMq0Q1qdbWz15lDw2jTsYiJVbiI5stHxg7bUKqbnvUQKdFP2VTBipJF9qnw6LTAS7k0fD9g2qjnvcMd6bjGIqU02FBza6r/Rcolo8YwyRmySbXnoLNbCMTsvRJ0IqfHf/bqU5fmqSsPDNLoNdQiHdtDz1hkyz/Gqrz4gtV7y8Mi6E/3mC9kakZPBPFG8C8ACosSUqz6e6sONWU91l0V18nLUlwVhhZvh+YhWTv8W1Rx3bOB7dIJY2Eu01QJp2zm9gzruAlIuMngT9+xEIsX/nk5afXh7SwqXv1y4Z/sQWdQWYY= X-MS-TrafficTypeDiagnostic: BN3PR04MB2163: X-Microsoft-Exchange-Diagnostics: 1;BN3PR04MB2163;25:zHOWnkUy7Jicr7OPJJvSZQxwlEaaqv6tHMwk71BMEI/MzhONp4+0IBcCR1XJD9BIFjadEfvLMQcuIqPoGnNcXbhFvcqEesCy2UemhVMan+JiqVlmc46C/QvYJ5tMNoMF1dXqzHJrCBlFuvVvfGyTBhIbyzH6MTjIh0knT/vrRUwZmvTsuZh1DsCkBFLTF7RdHNusUblRJyODHfjVMGs21b5hA8w1ZS6amhmOC92k21BQf6hN5/mH1UO/zjO64M/VlnjLajOudivH3ScxfUGx3RBcxny1LXY6BKVnZiBdxkMx+ihYd+2iCEaVbegWclTZzzLi8pF8IPX7Zslw5B4W+svycHcC3LTHjkKyypMxOjhUdIzz1wyyt7kH4ZgnSHIOtmbZY9tp5uSejLWoft4O6xFmx1IreGFuwMOYEpSGxh1TjoGeg30e+PHwTFUKRr+JiDc+0viykFSgYZJFfhALVAiPSNp1Vqgs/e4dSikwCbf3JwyeY0iOGCJ5Jg31Ug1Zi4VwvOrfJrUL5y4YSMUY3XF2Pqw1hXb33hdP9flf30b7dA/LSo/afOj9YqXDMkBphvtUtHS2wsHhABHaRG8UcESIxEeK3v7lNqQXuz6qayXGCEmCwNmExyBUBJSrNSrT1tSgcx2FT8DTAnP5TzHdsV2TsFstUMnSx0y+OENRfE8SlStlOKIx2z9Ov6p27wICcb6mqgV30PD18CwbuCvsAjfNnpoGR/BgjSWd5IvCuHHlM7d/iLRcohHX+dWTDUsAJG0yPtd3YWe1BASMNuAqEjT7MxB/e5xgMwC9AoS06+bwG1PXIFV6pkgLHOl2LUjntJ+pR6M49VerQC5a+GhW3efOmgi2d/oup+y8hhfUfRWpdNXooqQv2aA9aEcNSgBMfYsoEne+q73Ligie5S0auLFrPKk+So9kY+3dLhSBvpQ= X-Microsoft-Exchange-Diagnostics: 1;BN3PR04MB2163;31:TvhU48eesldug1Uas2LJ0puB5vn9/DcsLE87QYzIfkAeNHg7kSLxSziQ6CxG9U1n2osS9YmTtvTys8yCPqIgxDbsl7y5oJ4N4Fei4RgpPQuCmvBIR2VFsB7Xq/tR8qMwfbw2O4M0mIYEoGaUJTH7iBZ8aUANNPEntTm+ry+dYwRnkJjeapYTsdz3O/jv2BccEGh5F8NVZTOPh9/O+loJj0KU3+sjy3Bgryi6iKrqj+M1iK0Gc4H8klWqTjvXHf4mqumNnM2ARuoxTAlWOdkZH0Fq/BDkAQaeaE3AkOmlC2HwtpNDSGYok6ZNwKj5l/n6gr7hOUARRyXooE2HLx9H/raW391GJ4qrHeKyrTqzDmDpfXV7UU322zG7nZ5cAOHvBJEl7Db0xL5lhQ5uyjRLo+s/0C77L4FdRbJlskg5h7BA4wbC4csC2JkCTjX7rTgXzziS9ulreI3gXJRapTsUg+a8WO19+GwTnoX+E38xW6L5fD9GymzfB73uwBQVVTbviReJO+FrSuRHG0P4SMBLYW5MLGP5z/nxvYhaVlZPN+YAYjdh1cw88F+qbJmzfoKc0t2O3ru5Ptz782gQlc/VnOnl7yacS4zHaoZnDNV1nMk5txmHi8uWscnWJdsESdwRm7Vbn9oBX7OEFiggP9BgfOqnsRSXXU2mzuWGCZmpQ7wDYQQgpGeQIhB8xyKtiHfkcz/tMUh6H9au1koe3Zu8Rw== X-Microsoft-Exchange-Diagnostics: 1;BN3PR04MB2163;20:+BYTGkvwktZR0OGwfbzDs52YXFNOFLvt4wRrxQzHIDAsA8XJXjoYtxl9Kx7G7XCMrwD232ACYFQ7knQsmEBhmhvsDC4mrRMaZzjDirfEYZAphJrizIR40HW1HxmaZxYq93jD+obfyGNNXsf8tUhvT9jmnDA5pPoFn9DzQqUftAx0k11sG9Oi5x1SjI+S+00r8UdgmFXxhY7dEtp2OgjZKYc+QimHjBLPW2SWoRW5VwdMoeOmAz1jD9NR/MzABiEtuNxhGgISeZqYqOAqO+UQa91JfSmI/xgtpGX9CHPrjqxplmmHb2m0RFG5BnS/9RTNw3alMh5aRZbmku/wBlLEm/zN78AaK8D1gPeoAq3x14kqFxw9NnXDyJcAUx0O9AheYt3jL2KJhRHdCazUUd4WwarBNsYbvvwD9PSaykezjNd1sF3r+qeKUZIlbt63RH/g1eLI4zfAAUCe+qpKlsklmUP0LwsdGQwHLYs/a9YKG24psSxYolzpOFQ3eVzlYmd/ X-Exchange-Antispam-Report-Test: UriScan:(55037057525728); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(93006095)(93001095)(100000703101)(100105400095)(6041248)(201703131423075)(201702281529075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:BN3PR04MB2163;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:BN3PR04MB2163; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR04MB2163;4:2pkbcigXPhR8EZ92Fd+Rfy3fCy4kQllYrhNR0NZ/9c?= =?us-ascii?Q?ry0wO1UcYfHGKfHJUULpHIYm7M189+6ftF47zlSjWVMTuEcCvRYEaE/7fxtB?= =?us-ascii?Q?4BR6XJNHA7IvV2zfLUC1Cl0t0b/eCI0CKJWPZo4zXTnjs0XLN1DwXodaYHdz?= =?us-ascii?Q?iX6hW6rb6vfj9k08HWVq+GpoqX/f4pc3KBUlmpBKO0EJDcoOo5nsHGsU87Pt?= =?us-ascii?Q?Bl+bkdYRdUlZyOGO47vvbNLe7X3WENQtpq/AC1lL/NI7i1nwwffbEMDoyniX?= =?us-ascii?Q?mgh5jgtm2MdybCJuN2JjVKP6ytvTKRgP9lTMAJFoVhBmk5WnhPVm/XH0zTeG?= =?us-ascii?Q?2jrfbfykuMR7pS+/pGpWmxdEGQZp+HfyPaq5dsylJXe3v/qY89MY+08JZD1G?= =?us-ascii?Q?MYLutSdzblef+jpTtP/sMggRHW3mTlRan9cQNMzLR4a1bNDG+Rm5cOSmfqRa?= =?us-ascii?Q?EoYjDK98BU9X/ELJkd8n3RHQw4WhYqLVEm4TsKm/J3hfoZFRFjYj4Gl6nHx+?= =?us-ascii?Q?ImqHc/Y6uOtAETtZm4oKeRH+0AmVNKdN1WG9ZH1AHp5i3lLha0X6kC0vP3K8?= =?us-ascii?Q?cBOtLcMfYmXwsEHZgMbJR6YpR4+bofgqtfC7N67/Gn5dEqtGpL3C9vxVLsiy?= =?us-ascii?Q?C6OsS8jFSjIkjqAxkfFgnMuH6ERj+zxTmzGKgIzxoA9blzMFN5EPZ1RWDc8P?= =?us-ascii?Q?IPqV6ZkDOSRkdyrA219RGzbwl+PF635YEWWJi2+B9d4U9EZ/fy6gcpOudbUO?= =?us-ascii?Q?7N3z3j0gE8SjFVuVOd833RgqVALHQ7ixryCMniACqckF1ZpJZAD8n35aeDSE?= =?us-ascii?Q?bwsMWZEswZTFvT7qu6f3ydA+AcLM32WE2qYUeuLsuQhbQ0d5qp/loITrelBC?= =?us-ascii?Q?OLA5OBEvDbTYtQGDCcajymGMy9k7vX6HqqiCNViLCRBXRXHVUxd4EkTLBhNW?= =?us-ascii?Q?tbbBonuQrHljlSP7tmaBDUdKT6Jdh2SPHSasXgqQvzv2n5lNukJM/HgkBzgw?= =?us-ascii?Q?jV8ywxSwdzLfqyZlQLMHYIgGCOdjDpG69hKSgl5i9MIy13MROlwC+/DYG5Jk?= =?us-ascii?Q?ZjeMZ2+arVINFyUErLGKHHo6s4Sea0l/RNE8VVrzOJlN44NftQOSonq5vfpa?= =?us-ascii?Q?tN03dRhbeRHR6l4HBONqTGxu9a4Nke+nIpLqrEN1OKEp+tgosDE5uDob7GFf?= =?us-ascii?Q?BOoafUyn5GAhvQ+PP4HxsIx6GHFl4bsAqESln1LiwNgj2L7B7/eodOsg=3D?= =?us-ascii?Q?=3D?= X-Forefront-PRVS: 03793408BA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(7370300001)(6009001)(39400400002)(39450400003)(39840400002)(39860400002)(39410400002)(39850400002)(189002)(199003)(2906002)(97736004)(86362001)(8676002)(3846002)(88552002)(48376002)(5660300001)(7736002)(305945005)(50226002)(50466002)(5003940100001)(6116002)(6486002)(81156014)(81166006)(6666003)(69596002)(478600001)(6506006)(189998001)(36756003)(21086003)(4326008)(68736007)(7350300001)(101416001)(6306002)(75432002)(25786009)(66066001)(6512007)(1076002)(33646002)(53936002)(47776003)(42186005)(106356001)(50986999)(110136004)(38730400002)(105586002)(403724002)(7756004);DIR:OUT;SFP:1101;SCL:1;SRVR:BN3PR04MB2163;H:garnet.lan;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR04MB2163;23:RatGUYXoDR4SUQB8IThQPahdpKSDCQbU+LyMPO7Q1?= =?us-ascii?Q?KFbpTFMfURiHogA31sviLQMdWCLwerFszR6bJmcumBm9lhXwPqldR+wqqHNb?= =?us-ascii?Q?0uNiEWs5h7qm6LDXvCJfk8sgwwpYnWcF/xnUdobU9HI0rvynXnDvE0k8o9PQ?= =?us-ascii?Q?l2mf/aepwbEKqptOLpI03nPBHItKav4g9QXJt1ylPkWCnnNZKlXKhOrts62T?= =?us-ascii?Q?girOyGh7eg2aqNc8pIbdcox59D3G3+f98SzWitFw7vWhcQSyHMuKr9gwiOBI?= =?us-ascii?Q?BaAoYtRZZPScIM/Jt9Y3dcUbp5zfJ8XEJFD8S/PLuioxwy1iMXFXOMzYYeOF?= =?us-ascii?Q?760OA6maRPeyDv8syWhP5P+hjQ2PlnTC9EqdIfO81CtfwujADErGoySBnOUi?= =?us-ascii?Q?2GFO2x0MLgA7UqPrqBtIBH2zSltDwkWr0gG0zzT+YxrV/MhFZ3ur47Gg5u6B?= =?us-ascii?Q?C09ok0/kvJJu94ctBFwyGJUC2tHujhAXLOpQLVK/96UYZqazV8YUtUVlC5d1?= =?us-ascii?Q?B5CSokyYjYd6NfVenuEa4rgGMFbV/imUC0KktiUILqSjAMCPRg4U4Uh0L1VS?= =?us-ascii?Q?ONbhORvmdlC8Ne1tFWO89AwB9LY4kfp2/F4+ctmFPsV7HR2aAPTZYDQYW6WS?= =?us-ascii?Q?74WoQQHmU1HNiI95C7RaN1dqKcMwQFb1QdUsvzorwOELz9ibNudKEyzdur+6?= =?us-ascii?Q?H2Jxwt005SswRi2dfgGSEMnXt2wcVqj4U9WNtyshgpQBXcUWqsNC7cSZF57H?= =?us-ascii?Q?cGLAvsbZwH39g7Vh3PSH8b2G1+f0hQqUi0M8JnkG4olGCubJo7VJ09oPViwQ?= =?us-ascii?Q?nQB8S3oXw6hfIW2nOPGeM1UOyvNpIFbLKJVg6VXrCKZ47WcXRmq7mbtBvgYB?= =?us-ascii?Q?8aSVOuaYpa9w10nW8O3VGpcwAJgI0JHbMpxw/jbk1gyNqGeFm8WRerd1V2Ui?= =?us-ascii?Q?swBRiNCLs0nB3EmK1ttrozIRZVrHFxjAitWszYP26T1yxK3fGVBWICijc8y1?= =?us-ascii?Q?flLd0mjgAqjToLQOSKAzvAK/3WTTi+Jt3daLWp21vm42/vzzqZzch9MXZQX7?= =?us-ascii?Q?K80VJpmZzE7l6oiQnpjMex21UqHoBjtcHVVbXIF/jgRxQjtMqmMLS6T+hhJ6?= =?us-ascii?Q?fUIrIbRXj8ayRIUcwwtHpAFR1caATOtyoIveNt18G6e0dpLcUvKA8e8adcXu?= =?us-ascii?Q?5TtCluGol2G8+KKrYAdF7+NPqDXOAxnI+xjrPYB9wvJ4pG5MiSt807Ly57/9?= =?us-ascii?Q?J0S3VnS5WHsUsLPdp/d3q9xv8BYyoj3ae0obqyO605O2ykHvg6jLXTRrL4nv?= =?us-ascii?Q?KOF8JSFWU/2cqA5/tpycULAW3mGhAbXpn5594gWQATIWdcnfPNZ1JU5fNsM3?= =?us-ascii?Q?ZoQ2t7gMoEXlntCshcR82r1HdU=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR04MB2163;6:g2ng+z/jndYQlv+1znQ7e7uDFzNiUaISU96VK02D0M?= =?us-ascii?Q?t/H5i3gPk7rkxY+/GKh0XjrQtQ/NLivC8bWUxEZpsf8UBS+8Oj+lsPbkXrbP?= =?us-ascii?Q?w1bVGBh9T+AChLHsKSEySqihvVsLzg+rGqdU5igkLk3Pzg19VOa3jPrN2D2I?= =?us-ascii?Q?26mo1Qck3h4+O4RH7nDJ0xOLpJ1zwgm/NKUB01ZzIBcSGo/4YqD159tXGPab?= =?us-ascii?Q?WhXdIMaBalbH9LdH5kIezZTcjdBBTWKRxSsM4TjZrQcvEs7prIVPi9RqSoeN?= =?us-ascii?Q?Kq7HA/8PFmOZT253Sbsy8NnnZ0/SQdcgNlmqluKJcioCJAyTYSsNbapCmoS2?= =?us-ascii?Q?OE3Wm9lhq4yaknMhqzcXtXpzRBTh/ZaZRva3DIV1BBhYyoLwzfrh2USoxvCJ?= =?us-ascii?Q?Qqo6sW2S/TukfL98KadSsXdv8YC1nCgCwKnldu5FwjcAUDMK0GaTe1wNJZBY?= =?us-ascii?Q?ioDPBpPMNVKKXhLj2tuJxZQzKn0nwESIzXdVD1E/4Wxc8o6Cty1yOc96p1Iw?= =?us-ascii?Q?rK38Vab+/6aV9VGBtEvmas/D9EliSxKgNxZK7Wf0KyvBA2UvQoadBaUp5xgF?= =?us-ascii?Q?+acBJO/lXz1dxlPD4MCqZ1eqKbYYrnrdxqP8pPv/w+0/FiCP9KuJ3juuVRKc?= =?us-ascii?Q?0Pu0e0ydUNiVZlDGBROWIP6L+bRtK8dbq4zPLR6iAsM0nel8nJX4Gacra83x?= =?us-ascii?Q?Llj5f4VLNfYCDUC++1IrRWEky7mhRmjmFA3JwOH+jT8tuARwuSDcRQmbgLBW?= =?us-ascii?Q?GTIr7Kib7kf9bHYyA84oNY2T1Mn1DFY1+MJL1uTmQCR00jHdWErhzWcbzkhd?= =?us-ascii?Q?2M+gmQYmjDUV5gQQc5oGH7rb2CGuAZKutQgVNerZ711I94fxBRXF40+28AZQ?= =?us-ascii?Q?uzFJKNHClKafsl45EBgsbIFCxH4Iy1BZTBkfw9dVv/JYXAxCLRJvvoVjXln7?= =?us-ascii?Q?498gi9kLW7H+K2Hbth0EyHtwIM8tmf/b7pjMQZg5OepZpE1YXDp6LcvoStDA?= =?us-ascii?Q?U=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR04MB2163;5:jDWfK63aTDceAu2yCgiQfCPb1U5yb7G9OYyF9T8IM9trfb7bAt1fOuaaa2zfipPnQqArLVW7sL2jZ8SghPmoqGKkAC7qWuswPa4C8m32ACWFqD886IFEBwLDmSDJsOSzFdW0Fyxv2kFJKeox+/znRMOKGvCFqv+mr0U7U4/NWmMjHEqsKXwWOrvjvFZg7Yz4yvPH2k6BkRCNoDSlDk8qhTSdW624RCasfQeoSP8EwYEusOVVk++MlMJU1q4Y4HRnzE3FWnryn2AIKAPpmwwUyElvgrrYD7ASDiyO7Nr1WiUsY89kcx4UCA/HT2JEaDH6rKnk0NqgQStw3LEhgV/N4r/4Qqdy/jf6f3yJCoiQxxeXYW/vo6CFpeezcrDKrpFCvM1nNFR3pBxJawJKeWgy4BQXRCPxpmZBtLcRF1Ixe0iiOppcfwQsHWhE6AvPdjixCWL7CmcL6GVi564szsql9U98Ws+qsBK79CKWMAy05WbgQbqqSu1Mt/pCYSmygEpm;24:2AvLnuPbPMWOLh6q/b4NBP78MXMc+nFBoX7Ztj4hfQQuK0mlRGS4jEo7QRH7x9Y5oVluKQhE5pnDQX6+so5bHM7Ju39IEgqmPuziUQF/+as= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN3PR04MB2163;7:69Z2cix4vbIv8SxLalyudhIOE2sbijPcck6ui6NGXvzA7M41jmDp2D7XJU+nOb2g4FcprhwUKV9ng6jbpyn0bIGA22lUEV0SVQFrjOMCx04TmpziKZxE8BBYIiVrddBl/iyFOxzqeWis3mqe4qZNEP26G8aEaU1xuEXd+d8vb8RkXY0ajkHwzJ1vrLNY0PX5H3+SB1WtfeHeSy+5vGL3Oa+jOg/1t92+Diqw7rs3nvREhIHbGZClZzZSMnCUv6bVmm8qP2PtnUb4hv83SNdjeApub45OkrOUF5zi03/GvbJLNz77PANkkCzidpFy68BSzBDVX+jgu05k/z5yUkzwnX1FbXfVBIkVteeLcviXJfeD4MlYRUNAZEwtbkq493uZEAIEDB9cfky1MnTIdpdmCq6ErucdN27vTGiwDZZoqzdacPtivEdYLpog7oqA/g/PGSBGWmlrVeak5z62hdXEVKhuGXLQaZNhGY5ITMbpeDWw32e8rzHagxXvJOZbQHuv9sYEMZoXdMnk6vhB8qd4jEib1DBKbz0vmbUYgWGZJRQQGLdhIp6SDZVMvVSa/FPqTEM178K4QPF/u1UKtmWlpSmzVpis3wI0HreZ/gaaYW7sWwju7ofgqwFE0LvtaprcTD3QoBOeYoEF0fhmm1T6zUYxLZfp96PzPrdXuvRVxdN2JCq/UpQ4CLl0bEXGnqiAMHlPrKLMkFdfMIfdnv3GnSyVECqfrIYULCnfg624Of/QSsjSoalxDTvas1OFfzMW8NlJU3GkxLIsMqPsQF9sWKA9V3dZBdTiRoZ6Y6TCJAA= X-OriginatorOrg: pitt.edu X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jul 2017 17:12:33.1958 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR04MB2163 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 13043 Lines: 332 Convert exec test output to TAP13 format, using the ksft framework. Signed-off-by: Paul Elder --- Depends on Shuah Khan's patch: "[PATCH 2/3] selftests: kselftest framework: add API to return pass/fail/* counts" (http://www.spinics.net/lists/linux-kselftest/msg01964.html) tools/testing/selftests/exec/execveat.c | 148 +++++++++++++++++--------------- 1 file changed, 81 insertions(+), 67 deletions(-) diff --git a/tools/testing/selftests/exec/execveat.c b/tools/testing/selftests/exec/execveat.c index 8d5d1d2ee7c1..dc94c0661459 100644 --- a/tools/testing/selftests/exec/execveat.c +++ b/tools/testing/selftests/exec/execveat.c @@ -20,6 +20,8 @@ #include #include +#include "../kselftest.h" + static char longpath[2 * PATH_MAX] = ""; static char *envp[] = { "IN_TEST=yes", NULL, NULL }; static char *argv[] = { "execveat", "99", NULL }; @@ -41,23 +43,26 @@ static int _check_execveat_fail(int fd, const char *path, int flags, int expected_errno, const char *errno_str) { int rc; + char msg[512]; + snprintf(msg, 512, "Check failure of execveat(%d, '%s', %d) with %s...\n", + fd, path?:"(null)", flags, errno_str); errno = 0; - printf("Check failure of execveat(%d, '%s', %d) with %s... ", - fd, path?:"(null)", flags, errno_str); rc = execveat_(fd, path, argv, envp, flags); if (rc > 0) { - printf("[FAIL] (unexpected success from execveat(2))\n"); + ksft_test_result_fail(msg); + ksft_print_msg("unexpected success from execveat(2)\n"); return 1; } if (errno != expected_errno) { - printf("[FAIL] (expected errno %d (%s) not %d (%s)\n", + ksft_test_result_fail(msg); + ksft_print_msg("expected errno %d (%s) not %d (%s)\n", expected_errno, strerror(expected_errno), errno, strerror(errno)); return 1; } - printf("[OK]\n"); + ksft_test_result_pass(msg); return 0; } @@ -68,43 +73,48 @@ static int check_execveat_invoked_rc(int fd, const char *path, int flags, int rc; pid_t child; int pathlen = path ? strlen(path) : 0; + char msg[512]; if (pathlen > 40) - printf("Check success of execveat(%d, '%.20s...%s', %d)... ", + snprintf(msg, 512, "Check success of execveat(%d, '%.20s...%s', %d)...\n", fd, path, (path + pathlen - 20), flags); else - printf("Check success of execveat(%d, '%s', %d)... ", + snprintf(msg, 512, "Check success of execveat(%d, '%s', %d)...\n", fd, path?:"(null)", flags); child = fork(); if (child < 0) { - printf("[FAIL] (fork() failed)\n"); + ksft_test_result_fail(msg); + ksft_print_msg("fork() failed\n"); return 1; } if (child == 0) { /* Child: do execveat(). */ rc = execveat_(fd, path, argv, envp, flags); - printf("[FAIL]: execveat() failed, rc=%d errno=%d (%s)\n", + ksft_exit_fail_msg("execveat() failed, rc=%d errno=%d (%s)\n", rc, errno, strerror(errno)); exit(1); /* should not reach here */ } /* Parent: wait for & check child's exit status. */ rc = waitpid(child, &status, 0); if (rc != child) { - printf("[FAIL] (waitpid(%d,...) returned %d)\n", child, rc); + ksft_test_result_fail(msg); + ksft_print_msg("waitpid(%d,...) returned %d\n", child, rc); return 1; } if (!WIFEXITED(status)) { - printf("[FAIL] (child %d did not exit cleanly, status=%08x)\n", + ksft_test_result_fail(msg); + ksft_print_msg("child %d did not exit cleanly, status=%08x\n", child, status); return 1; } if ((WEXITSTATUS(status) != expected_rc) && (WEXITSTATUS(status) != expected_rc2)) { - printf("[FAIL] (child %d exited with %d not %d nor %d)\n", + ksft_test_result_fail(msg); + ksft_print_msg("child %d exited with %d not %d nor %d\n", child, WEXITSTATUS(status), expected_rc, expected_rc2); return 1; } - printf("[OK]\n"); + ksft_test_result_pass(msg); return 0; } @@ -127,7 +137,7 @@ static int open_or_die(const char *filename, int flags) int fd = open(filename, flags); if (fd < 0) { - printf("Failed to open '%s'; " + ksft_exit_fail_msg("Failed to open '%s'; " "check prerequisites are available\n", filename); exit(1); } @@ -180,11 +190,11 @@ static int check_execveat_pathmax(int dot_dfd, const char *src, int is_script) */ fd = open(longpath, O_RDONLY); if (fd > 0) { - printf("Invoke copy of '%s' via filename of length %zu:\n", + ksft_print_msg("Invoke copy of '%s' via filename of length %zu:\n", src, strlen(longpath)); fail += check_execveat(fd, "", AT_EMPTY_PATH); } else { - printf("Failed to open length %zu filename, errno=%d (%s)\n", + ksft_print_msg("Failed to open length %zu filename, errno=%d (%s)\n", strlen(longpath), errno, strerror(errno)); fail++; } @@ -210,6 +220,8 @@ static int check_execveat_pathmax(int dot_dfd, const char *src, int is_script) static int run_tests(void) { + ksft_print_header(); + int fail = 0; char *fullname = realpath("execveat", NULL); char *fullname_script = realpath("script", NULL); @@ -238,7 +250,7 @@ static int run_tests(void) errno = 0; execveat_(-1, NULL, NULL, NULL, 0); if (errno == ENOSYS) { - printf("[FAIL] ENOSYS calling execveat - no kernel support?\n"); + ksft_print_msg("[FAIL] ENOSYS calling execveat - no kernel support?\n"); return 1; } @@ -247,115 +259,115 @@ static int run_tests(void) /* Normal executable file: */ /* dfd + path */ - fail += check_execveat(subdir_dfd, "../execveat", 0); - fail += check_execveat(dot_dfd, "execveat", 0); - fail += check_execveat(dot_dfd_path, "execveat", 0); + check_execveat(subdir_dfd, "../execveat", 0); + check_execveat(dot_dfd, "execveat", 0); + check_execveat(dot_dfd_path, "execveat", 0); /* absolute path */ - fail += check_execveat(AT_FDCWD, fullname, 0); + check_execveat(AT_FDCWD, fullname, 0); /* absolute path with nonsense dfd */ - fail += check_execveat(99, fullname, 0); + check_execveat(99, fullname, 0); /* fd + no path */ - fail += check_execveat(fd, "", AT_EMPTY_PATH); + check_execveat(fd, "", AT_EMPTY_PATH); /* O_CLOEXEC fd + no path */ - fail += check_execveat(fd_cloexec, "", AT_EMPTY_PATH); + check_execveat(fd_cloexec, "", AT_EMPTY_PATH); /* O_PATH fd */ - fail += check_execveat(fd_path, "", AT_EMPTY_PATH); + check_execveat(fd_path, "", AT_EMPTY_PATH); /* Mess with executable file that's already open: */ /* fd + no path to a file that's been renamed */ rename("execveat.ephemeral", "execveat.moved"); - fail += check_execveat(fd_ephemeral, "", AT_EMPTY_PATH); + check_execveat(fd_ephemeral, "", AT_EMPTY_PATH); /* fd + no path to a file that's been deleted */ unlink("execveat.moved"); /* remove the file now fd open */ - fail += check_execveat(fd_ephemeral, "", AT_EMPTY_PATH); + check_execveat(fd_ephemeral, "", AT_EMPTY_PATH); /* Mess with executable file that's already open with O_PATH */ /* fd + no path to a file that's been deleted */ unlink("execveat.path.ephemeral"); - fail += check_execveat(fd_ephemeral_path, "", AT_EMPTY_PATH); + check_execveat(fd_ephemeral_path, "", AT_EMPTY_PATH); /* Invalid argument failures */ - fail += check_execveat_fail(fd, "", 0, ENOENT); - fail += check_execveat_fail(fd, NULL, AT_EMPTY_PATH, EFAULT); + check_execveat_fail(fd, "", 0, ENOENT); + check_execveat_fail(fd, NULL, AT_EMPTY_PATH, EFAULT); /* Symlink to executable file: */ /* dfd + path */ - fail += check_execveat(dot_dfd, "execveat.symlink", 0); - fail += check_execveat(dot_dfd_path, "execveat.symlink", 0); + check_execveat(dot_dfd, "execveat.symlink", 0); + check_execveat(dot_dfd_path, "execveat.symlink", 0); /* absolute path */ - fail += check_execveat(AT_FDCWD, fullname_symlink, 0); + check_execveat(AT_FDCWD, fullname_symlink, 0); /* fd + no path, even with AT_SYMLINK_NOFOLLOW (already followed) */ - fail += check_execveat(fd_symlink, "", AT_EMPTY_PATH); - fail += check_execveat(fd_symlink, "", + check_execveat(fd_symlink, "", AT_EMPTY_PATH); + check_execveat(fd_symlink, "", AT_EMPTY_PATH|AT_SYMLINK_NOFOLLOW); /* Symlink fails when AT_SYMLINK_NOFOLLOW set: */ /* dfd + path */ - fail += check_execveat_fail(dot_dfd, "execveat.symlink", + check_execveat_fail(dot_dfd, "execveat.symlink", AT_SYMLINK_NOFOLLOW, ELOOP); - fail += check_execveat_fail(dot_dfd_path, "execveat.symlink", + check_execveat_fail(dot_dfd_path, "execveat.symlink", AT_SYMLINK_NOFOLLOW, ELOOP); /* absolute path */ - fail += check_execveat_fail(AT_FDCWD, fullname_symlink, + check_execveat_fail(AT_FDCWD, fullname_symlink, AT_SYMLINK_NOFOLLOW, ELOOP); /* Shell script wrapping executable file: */ /* dfd + path */ - fail += check_execveat(subdir_dfd, "../script", 0); - fail += check_execveat(dot_dfd, "script", 0); - fail += check_execveat(dot_dfd_path, "script", 0); + check_execveat(subdir_dfd, "../script", 0); + check_execveat(dot_dfd, "script", 0); + check_execveat(dot_dfd_path, "script", 0); /* absolute path */ - fail += check_execveat(AT_FDCWD, fullname_script, 0); + check_execveat(AT_FDCWD, fullname_script, 0); /* fd + no path */ - fail += check_execveat(fd_script, "", AT_EMPTY_PATH); - fail += check_execveat(fd_script, "", + check_execveat(fd_script, "", AT_EMPTY_PATH); + check_execveat(fd_script, "", AT_EMPTY_PATH|AT_SYMLINK_NOFOLLOW); /* O_CLOEXEC fd fails for a script (as script file inaccessible) */ - fail += check_execveat_fail(fd_script_cloexec, "", AT_EMPTY_PATH, + check_execveat_fail(fd_script_cloexec, "", AT_EMPTY_PATH, ENOENT); - fail += check_execveat_fail(dot_dfd_cloexec, "script", 0, ENOENT); + check_execveat_fail(dot_dfd_cloexec, "script", 0, ENOENT); /* Mess with script file that's already open: */ /* fd + no path to a file that's been renamed */ rename("script.ephemeral", "script.moved"); - fail += check_execveat(fd_script_ephemeral, "", AT_EMPTY_PATH); + check_execveat(fd_script_ephemeral, "", AT_EMPTY_PATH); /* fd + no path to a file that's been deleted */ unlink("script.moved"); /* remove the file while fd open */ - fail += check_execveat(fd_script_ephemeral, "", AT_EMPTY_PATH); + check_execveat(fd_script_ephemeral, "", AT_EMPTY_PATH); /* Rename a subdirectory in the path: */ rename("subdir.ephemeral", "subdir.moved"); - fail += check_execveat(subdir_dfd_ephemeral, "../script", 0); - fail += check_execveat(subdir_dfd_ephemeral, "script", 0); + check_execveat(subdir_dfd_ephemeral, "../script", 0); + check_execveat(subdir_dfd_ephemeral, "script", 0); /* Remove the subdir and its contents */ unlink("subdir.moved/script"); unlink("subdir.moved"); /* Shell loads via deleted subdir OK because name starts with .. */ - fail += check_execveat(subdir_dfd_ephemeral, "../script", 0); - fail += check_execveat_fail(subdir_dfd_ephemeral, "script", 0, ENOENT); + check_execveat(subdir_dfd_ephemeral, "../script", 0); + check_execveat_fail(subdir_dfd_ephemeral, "script", 0, ENOENT); /* Flag values other than AT_SYMLINK_NOFOLLOW => EINVAL */ - fail += check_execveat_fail(dot_dfd, "execveat", 0xFFFF, EINVAL); + check_execveat_fail(dot_dfd, "execveat", 0xFFFF, EINVAL); /* Invalid path => ENOENT */ - fail += check_execveat_fail(dot_dfd, "no-such-file", 0, ENOENT); - fail += check_execveat_fail(dot_dfd_path, "no-such-file", 0, ENOENT); - fail += check_execveat_fail(AT_FDCWD, "no-such-file", 0, ENOENT); + check_execveat_fail(dot_dfd, "no-such-file", 0, ENOENT); + check_execveat_fail(dot_dfd_path, "no-such-file", 0, ENOENT); + check_execveat_fail(AT_FDCWD, "no-such-file", 0, ENOENT); /* Attempt to execute directory => EACCES */ fail += check_execveat_fail(dot_dfd, "", AT_EMPTY_PATH, EACCES); /* Attempt to execute non-executable => EACCES */ - fail += check_execveat_fail(dot_dfd, "Makefile", 0, EACCES); - fail += check_execveat_fail(fd_denatured, "", AT_EMPTY_PATH, EACCES); - fail += check_execveat_fail(fd_denatured_path, "", AT_EMPTY_PATH, + check_execveat_fail(dot_dfd, "Makefile", 0, EACCES); + check_execveat_fail(fd_denatured, "", AT_EMPTY_PATH, EACCES); + check_execveat_fail(fd_denatured_path, "", AT_EMPTY_PATH, EACCES); /* Attempt to execute nonsense FD => EBADF */ - fail += check_execveat_fail(99, "", AT_EMPTY_PATH, EBADF); - fail += check_execveat_fail(99, "execveat", 0, EBADF); + check_execveat_fail(99, "", AT_EMPTY_PATH, EBADF); + check_execveat_fail(99, "execveat", 0, EBADF); /* Attempt to execute relative to non-directory => ENOTDIR */ - fail += check_execveat_fail(fd, "execveat", 0, ENOTDIR); + check_execveat_fail(fd, "execveat", 0, ENOTDIR); - fail += check_execveat_pathmax(dot_dfd, "execveat", 0); - fail += check_execveat_pathmax(dot_dfd, "script", 1); - return fail; + check_execveat_pathmax(dot_dfd, "execveat", 0); + check_execveat_pathmax(dot_dfd, "script", 1); + return ksft_get_fail_cnt(); } static void prerequisites(void) @@ -405,8 +417,10 @@ int main(int argc, char **argv) if (verbose) envp[1] = "VERBOSE=1"; rc = run_tests(); - if (rc > 0) - printf("%d tests failed\n", rc); + if (rc) + ksft_exit_fail(); + else + ksft_exit_pass(); } return rc; } -- 2.11.0