From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1423512AbbEOCaQ (ORCPT ); Thu, 14 May 2015 22:30:16 -0400 Received: from mx1.polytechnique.org ([129.104.30.34]:37671 "EHLO mx1.polytechnique.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1423492AbbEOCaL (ORCPT ); Thu, 14 May 2015 22:30:11 -0400 From: Nicolas Iooss To: Alexander Viro , linux-fsdevel@vger.kernel.org, Andrew Morton , "Eric W. Biederman" Cc: linux-kernel@vger.kernel.org, Linux Containers , Nicolas Iooss Subject: [PATCH v2 2/2] coredump: add __printf attribute to cn_*printf functions Date: Fri, 15 May 2015 10:29:35 +0800 Message-Id: <1431656975-3563-2-git-send-email-nicolas.iooss_linux@m4x.org> X-Mailer: git-send-email 2.4.0 In-Reply-To: <1431656975-3563-1-git-send-email-nicolas.iooss_linux@m4x.org> References: <554A0684.2000400@m4x.org> <1431656975-3563-1-git-send-email-nicolas.iooss_linux@m4x.org> X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Fri May 15 04:30:10 2015 +0200 (CEST)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.000001, queueID=4950C1408EF19 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This allows detecting improper format string at build time, like: fs/coredump.c:225:5: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'int' [-Wformat=] err = cn_printf(cn, "%ld", cprm->siginfo->si_signo); ^ As si_signo is always an int, the format should be %d here. Signed-off-by: Nicolas Iooss --- fs/coredump.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/fs/coredump.c b/fs/coredump.c index 833a57bc856c..e52e0064feac 100644 --- a/fs/coredump.c +++ b/fs/coredump.c @@ -70,7 +70,8 @@ static int expand_corename(struct core_name *cn, int size) return 0; } -static int cn_vprintf(struct core_name *cn, const char *fmt, va_list arg) +static __printf(2, 0) int cn_vprintf(struct core_name *cn, const char *fmt, + va_list arg) { int free, need; va_list arg_copy; @@ -93,7 +94,7 @@ again: return -ENOMEM; } -static int cn_printf(struct core_name *cn, const char *fmt, ...) +static __printf(2, 3) int cn_printf(struct core_name *cn, const char *fmt, ...) { va_list arg; int ret; @@ -105,7 +106,8 @@ static int cn_printf(struct core_name *cn, const char *fmt, ...) return ret; } -static int cn_esc_printf(struct core_name *cn, const char *fmt, ...) +static __printf(2, 3) +int cn_esc_printf(struct core_name *cn, const char *fmt, ...) { int cur = cn->used; va_list arg; @@ -225,7 +227,8 @@ static int format_corename(struct core_name *cn, struct coredump_params *cprm) break; /* signal that caused the coredump */ case 's': - err = cn_printf(cn, "%ld", cprm->siginfo->si_signo); + err = cn_printf(cn, "%d", + cprm->siginfo->si_signo); break; /* UNIX time of coredump */ case 't': { -- 2.4.0