Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp3992937ybi; Fri, 19 Jul 2019 12:45:47 -0700 (PDT) X-Google-Smtp-Source: APXvYqyxD8G2N0sfChTtxj0AApBLELnPXh3O0M0za1rUvySnMwMlUcnE57p1sqsF5zCBAc8uOOgM X-Received: by 2002:a63:d002:: with SMTP id z2mr57335960pgf.364.1563565546947; Fri, 19 Jul 2019 12:45:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563565546; cv=none; d=google.com; s=arc-20160816; b=yxLkvU+pZu08bbe2zQDKLzCuag8MarQRrydViRZLM/0Is9TmUX/tDNIHimzPdN4Mp/ 7c/S883WdPp0F22Pri71k7FD3vIqyu9VTNC5G1Aps3f+iqLYhWRA8g6vYGI8mH0pP+8e hTpgP5NnSlgJlEAyzICbdCvPkIrGum2G3CQifF7RRmBztMXDGXgOkKg5WUZY35jAiHak W1Wow3CA1FwPmq+tgoXq1aQbb8IfUF0Ni2fBOz2+SNXOuDmL04F35BqIJ92YjA8YuTBi S/DyJBU9hF3r6PLSGD3Pk2nUui33pju0y81qwvoFT9TbxEada/P88xsdpWKsdXUxhKpL 879g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=apOirA2hWPW71sWOOEQUqGCfpaFXf8vZNuHznjNoz+s=; b=dxxQEgr79ZOay40htS+XIrPU8Vb7EAzQfLPvh2fp0A9lyOBymZVLULMQMT3GmpXUZ/ OpOG/pjLHhWP/Fbp2KnZVlnldRjOkmTYw4yfLF96jxAs2kPOOjO6WRPJyo9Mz9rO76Ui hEHiJKTbLZSsPgkzsSRiHq+2o9UxhqlfmI1HLjfIF6na9+1UmStZvXNr/FKhdGAYDcyX 1QsSWGKQVBuW+gIdvehGmuNx0TL+PcVf84M9BQqEFxOA7A1YGlLnW33OKFdinkGDAN8r 2rATxCQ+99OCUcxDKn4KMxumucPhOPWOwnjw0kPBOXx5gW2eSr/xRh3Ukew2cPaADj8l c5+Q== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u18si1092359plq.311.2019.07.19.12.45.31; Fri, 19 Jul 2019 12:45:46 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731824AbfGSQpY (ORCPT + 99 others); Fri, 19 Jul 2019 12:45:24 -0400 Received: from mx1.mailbox.org ([80.241.60.212]:37738 "EHLO mx1.mailbox.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728449AbfGSQpX (ORCPT ); Fri, 19 Jul 2019 12:45:23 -0400 Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:105:465:1:1:0]) (using TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)) (No client certificate requested) by mx1.mailbox.org (Postfix) with ESMTPS id DE6D9508C7; Fri, 19 Jul 2019 18:45:18 +0200 (CEST) X-Virus-Scanned: amavisd-new at heinlein-support.de Received: from smtp1.mailbox.org ([80.241.60.240]) by spamfilter03.heinlein-hosting.de (spamfilter03.heinlein-hosting.de [80.241.56.117]) (amavisd-new, port 10030) with ESMTP id MrUOAH9npTX8; Fri, 19 Jul 2019 18:45:08 +0200 (CEST) From: Aleksa Sarai To: Al Viro , Jeff Layton , "J. Bruce Fields" , Arnd Bergmann , David Howells , Shuah Khan , Shuah Khan Cc: Aleksa Sarai , Eric Biederman , Andy Lutomirski , Andrew Morton , Alexei Starovoitov , Kees Cook , Jann Horn , Christian Brauner , Tycho Andersen , David Drysdale , Chanho Min , Oleg Nesterov , Aleksa Sarai , Linus Torvalds , containers@lists.linux-foundation.org, linux-alpha@vger.kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-fsdevel@vger.kernel.org, linux-ia64@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, linux-xtensa@linux-xtensa.org, sparclinux@vger.kernel.org Subject: [PATCH v10 8/9] kselftest: save-and-restore errno to allow for %m formatting Date: Sat, 20 Jul 2019 02:42:24 +1000 Message-Id: <20190719164225.27083-9-cyphar@cyphar.com> In-Reply-To: <20190719164225.27083-1-cyphar@cyphar.com> References: <20190719164225.27083-1-cyphar@cyphar.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Previously, using "%m" in a ksft_* format string can result in strange output because the errno value wasn't saved before calling other libc functions. The solution is to simply save and restore the errno before we format the user-supplied format string. Signed-off-by: Aleksa Sarai --- tools/testing/selftests/kselftest.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/testing/selftests/kselftest.h b/tools/testing/selftests/kselftest.h index ec15c4f6af55..0ac49d91a260 100644 --- a/tools/testing/selftests/kselftest.h +++ b/tools/testing/selftests/kselftest.h @@ -10,6 +10,7 @@ #ifndef __KSELFTEST_H #define __KSELFTEST_H +#include #include #include #include @@ -81,58 +82,68 @@ static inline void ksft_print_cnts(void) static inline void ksft_print_msg(const char *msg, ...) { + int saved_errno = errno; va_list args; va_start(args, msg); printf("# "); + errno = saved_errno; vprintf(msg, args); va_end(args); } static inline void ksft_test_result_pass(const char *msg, ...) { + int saved_errno = errno; va_list args; ksft_cnt.ksft_pass++; va_start(args, msg); printf("ok %d ", ksft_test_num()); + errno = saved_errno; vprintf(msg, args); va_end(args); } static inline void ksft_test_result_fail(const char *msg, ...) { + int saved_errno = errno; va_list args; ksft_cnt.ksft_fail++; va_start(args, msg); printf("not ok %d ", ksft_test_num()); + errno = saved_errno; vprintf(msg, args); va_end(args); } static inline void ksft_test_result_skip(const char *msg, ...) { + int saved_errno = errno; va_list args; ksft_cnt.ksft_xskip++; va_start(args, msg); printf("not ok %d # SKIP ", ksft_test_num()); + errno = saved_errno; vprintf(msg, args); va_end(args); } static inline void ksft_test_result_error(const char *msg, ...) { + int saved_errno = errno; va_list args; ksft_cnt.ksft_error++; va_start(args, msg); printf("not ok %d # error ", ksft_test_num()); + errno = saved_errno; vprintf(msg, args); va_end(args); } @@ -152,10 +163,12 @@ static inline int ksft_exit_fail(void) static inline int ksft_exit_fail_msg(const char *msg, ...) { + int saved_errno = errno; va_list args; va_start(args, msg); printf("Bail out! "); + errno = saved_errno; vprintf(msg, args); va_end(args); @@ -178,10 +191,12 @@ static inline int ksft_exit_xpass(void) static inline int ksft_exit_skip(const char *msg, ...) { if (msg) { + int saved_errno = errno; va_list args; va_start(args, msg); printf("not ok %d # SKIP ", 1 + ksft_test_num()); + errno = saved_errno; vprintf(msg, args); va_end(args); } else { -- 2.22.0