Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp2903491rwd; Fri, 9 Jun 2023 20:23:58 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5HZHC2iQKn2UyBU+hT86dgPI09BbTTvdlOgXBlzB7WJ1myCYS2LIr+sx3ZQFbgvav1Fm74 X-Received: by 2002:a17:902:934a:b0:1ae:5914:cbec with SMTP id g10-20020a170902934a00b001ae5914cbecmr742395plp.10.1686367437900; Fri, 09 Jun 2023 20:23:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686367437; cv=none; d=google.com; s=arc-20160816; b=goFTjFzDdvVPFLWEv98GAHzqY1GLzA7H6nP0y8q8ktz2hprXhiyh7Y4TImtkmzmafu otCFNAVALidUieHMbKz5EKpBELhVbj38NKLcyu9LCpBb+byR/1oTo82Fd8PYMZvjLw4I P6DfC5x7QzRQSreeSK7UWZutcG/6DcNJTDU2iOSpTuEdtieGag7AMQA8NGTljEb8l33G E7RcSkolE+rKt0ogTnPgwxIpon2ygRg1GzFlIZPsEMk2CAKu46DIi+6p166RBC/dZqeQ H0AFRTGKPb/IhXW5GYiQCPTHXx51n91xrmhmVMAeNiH9q1NGJ18TUhn2JEZL/n9ts+pi MThw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :feedback-id:dkim-signature:dkim-signature; bh=e12eRh5lyvIG/KvFdPXdCrr7zx2xKqvfBfJtwKk/UpE=; b=C3ttjxRBdtcO0xCfbey38PcAMCIZTWrN434xnoDTmpoeBupYD+43808HFSyoYYCnJu ShDWDY5emN1Wx6mIxGWmQ3uCOttl4xs+C0Kf9pzUMm9RA7oA7c+yUJFtV7MBIHyB+z9P jgjOQkTMW8QAMlT42dJMzVU2M0ZSGXKvaBxRVvr3AsUR6jSvobAfZ5SshrWrKDl9kPfC zC35UHZGqIR/1Au1xr+0UFy2XNi47A9Pj2EVtcdOy64PPSrU7+k7zIJhst6cky7XM2Ck /KYZ4uBhUTOgEQHP80TNbh26Rm21ObLlbjO1G9b+7ntgV6SWjvo8b8Oihz0mCTVe+jEh OxgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@invisiblethingslab.com header.s=fm1 header.b=AKQPI0PH; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=G9VxVZvz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w7-20020a17090aad4700b00256b0ec0fe8si131009pjv.136.2023.06.09.20.23.45; Fri, 09 Jun 2023 20:23:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@invisiblethingslab.com header.s=fm1 header.b=AKQPI0PH; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=G9VxVZvz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233015AbjFJC7m (ORCPT + 99 others); Fri, 9 Jun 2023 22:59:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53884 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232666AbjFJC7k (ORCPT ); Fri, 9 Jun 2023 22:59:40 -0400 Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77EC03AAC; Fri, 9 Jun 2023 19:59:39 -0700 (PDT) Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.nyi.internal (Postfix) with ESMTP id E44D75C01A2; Fri, 9 Jun 2023 22:59:38 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Fri, 09 Jun 2023 22:59:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= invisiblethingslab.com; h=cc:cc:content-transfer-encoding :content-type:date:date:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:sender:subject :subject:to:to; s=fm1; t=1686365978; x=1686452378; bh=e12eRh5lyv IG/KvFdPXdCrr7zx2xKqvfBfJtwKk/UpE=; b=AKQPI0PHuEOU5fmJQ9qD4WkgYQ aNoiEv1lfrVM0NCY9ewgg8yFu5cfmny1yi8ZTNrtfImDp1pGhuDRkui/TEHC5s+K /xhOVAL5AQHfiqgCeBetpDfYF+GaDlidqVKEsi6C0xbUzHx/PqDUoPV6QFq6aB0C OOg0YoA7t8x2EWeZFwRJG97M00gjgS83Yl6TlolCRF6hGmsfSTI1ujrLvHwJZL0W M+woz3GhEN1YABJ8oG7BW769tXKF258OMnnper1WHFH+X07RwCndRpFuDFfE7T+s n72DZrUVHVYow5+16yXo6hevd822TTGQ2Fdv5qHENyPTDOZPdcvDunwPJiTQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1686365978; x= 1686452378; bh=e12eRh5lyvIG/KvFdPXdCrr7zx2xKqvfBfJtwKk/UpE=; b=G 9VxVZvzIe9D+6jHeneyaWFSJNodZvgGP36tWCCmi9ous9JGq8T+LtFFMVNxNKBVP MresaRrefOqjnUcrB4yiDWx8qfazyFcNbts2DK6HNnEehk882KT2F6Zj8juL1H+F EGMd5nnB1BCD3epAfyfTbNELCE+L5PN2BYKbpdok84A3GH/TGBG0/FjPZPQbfcac IgY9AimP0eNkEX3UHJZealznt+phzF/ZWd7R3S5A0LdrA4WRjrcrpszwDQQEdYgf CHUT3mfooyG1vP/tzzRKIamZBiNqmWCfoaecQR88wlj9ZWEAdZGDmnvVnmHOsYQZ DTk3wKN7CU9rnuuMR4IcA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrgedtledgieehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvvefufffkofgjfhgggfestdekredtredttdenucfhrhhomhepffgvmhhi ucforghrihgvucfqsggvnhhouhhruceouggvmhhisehinhhvihhsihgslhgvthhhihhngh hslhgrsgdrtghomheqnecuggftrfgrthhtvghrnhepjeffjefggfeugeduvedvjeekgfeh gffhhfffjeetkeelueefffetfffhtdduheetnecuvehluhhsthgvrhfuihiivgeptdenuc frrghrrghmpehmrghilhhfrhhomhepuggvmhhisehinhhvihhsihgslhgvthhhihhnghhs lhgrsgdrtghomh X-ME-Proxy: Feedback-ID: iac594737:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 9 Jun 2023 22:59:37 -0400 (EDT) From: Demi Marie Obenour To: Dwaipayan Ray , Lukas Bulwahn , Joe Perches , Jonathan Corbet , Federico Vaga , Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , Lee Jones , Andy Lutomirski , Thomas Gleixner , Vincenzo Frascino , Petr Mladek , Steven Rostedt , Sergey Senozhatsky , Andy Shevchenko , Rasmus Villemoes Cc: Demi Marie Obenour , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org Subject: [PATCH 3/4] Add strict version of vsscanf() Date: Fri, 9 Jun 2023 22:57:58 -0400 Message-Id: <20230610025759.1813-3-demi@invisiblethingslab.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230610025759.1813-1-demi@invisiblethingslab.com> References: <20230610025759.1813-1-demi@invisiblethingslab.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Demi Marie Obenour --- include/linux/kernel.h | 4 ++++ lib/vsprintf.c | 43 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 0d91e0af01250c1d82f4a2ea562d2619b9cc6e9c..b348b84ce9c4e95031f67e0cbac5de8deca69aac 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -227,8 +227,12 @@ const char *kvasprintf_const(gfp_t gfp, const char *fmt, va_list args); extern __scanf(2, 3) int sscanf(const char *, const char *, ...); +extern __scanf(2, 3) +int sscanf_strict(const char *, const char *, ...); extern __scanf(2, 0) int vsscanf(const char *, const char *, va_list); +extern __scanf(2, 0) +int vsscanf_strict(const char *, const char *, va_list); extern int no_hash_pointers_enable(char *str); diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 9846d2385f5b9e8f3945a5664d81047e97cf10d5..2dae357b367e1da8b1004ed6e85e051a045ca36b 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -3414,6 +3414,8 @@ EXPORT_SYMBOL_GPL(bprintf); #endif /* CONFIG_BINARY_PRINTF */ +static int vsscanf_internal(const char *buf, const char *fmt, va_list args, bool strict); + /** * vsscanf - Unformat a buffer into a list of arguments * @buf: input buffer @@ -3421,6 +3423,23 @@ EXPORT_SYMBOL_GPL(bprintf); * @args: arguments */ int vsscanf(const char *buf, const char *fmt, va_list args) +{ + return vsscanf_internal(buf, fmt, args, false); +} + +/** + * vsscanf_strict - Unformat a buffer into a list of arguments, but + * do not skip spaces. + * @buf: input buffer + * @fmt: format of buffer + * @args: arguments + */ +int vsscanf_strict(const char *buf, const char *fmt, va_list args) +{ + return vsscanf_internal(buf, fmt, args, true); +} + +static int vsscanf_internal(const char *buf, const char *fmt, va_list args, bool strict) { const char *str = buf; char *next; @@ -3530,8 +3549,10 @@ int vsscanf(const char *buf, const char *fmt, va_list args) char *s = (char *)va_arg(args, char *); if (field_width == -1) field_width = SHRT_MAX; - /* first, skip leading white space in buffer */ - str = skip_spaces(str); + if (!strict) { + /* first, skip leading white space in buffer */ + str = skip_spaces(str); + } /* now copy until next white space */ while (*str && !isspace(*str) && field_width--) @@ -3621,7 +3642,8 @@ int vsscanf(const char *buf, const char *fmt, va_list args) /* have some sort of integer conversion. * first, skip white space in buffer. */ - str = skip_spaces(str); + if (!strict) + str = skip_spaces(str); digit = *str; if (is_sign && digit == '-') { @@ -3721,6 +3743,9 @@ int vsscanf(const char *buf, const char *fmt, va_list args) str = next; } + if (strict && *str) + return -EINVAL; + return num; } EXPORT_SYMBOL(vsscanf); @@ -3743,3 +3768,15 @@ int sscanf(const char *buf, const char *fmt, ...) return i; } EXPORT_SYMBOL(sscanf); +int sscanf_strict(const char *buf, const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i = vsscanf_strict(buf, fmt, args); + va_end(args); + + return i; +} +EXPORT_SYMBOL(sscanf_strict); -- Sincerely, Demi Marie Obenour (she/her/hers) Invisible Things Lab