Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp5441624rdb; Wed, 13 Dec 2023 08:44:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IHJ7aNxvehnkD8O78D83tu/y8WxcFr/pZGyfQBsR1SAVvs1okO49YpK0GYB8q6dwVYCpyb6 X-Received: by 2002:a17:902:d48d:b0:1d0:6ffd:6e7e with SMTP id c13-20020a170902d48d00b001d06ffd6e7emr3620217plg.118.1702485841100; Wed, 13 Dec 2023 08:44:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702485841; cv=none; d=google.com; s=arc-20160816; b=qsmTpyI+2wsNhCYdNSYlH2oPcWszMBeTt2iowS28YhKIKgF3fOIgsnu0XkaVvD68IF nGUrstuxs2tsds31unzxssE2x3ANTuOV26wXwQsUBb7N6083od0KVJA7/L6+DOIo1Tq8 JB/5GIlkIzeuJLr+OeleSItzLbYhrEhDeEJJcHvYyE/MDewCHxAnTGeYh+Fps2nInht1 rFEyISKbU1Ul7mYonWGMhm0L/u+6bilRrdWhdht/+pum59KOtipNmCyPvoCkTaLJ0yEP xps0N6ayWZ96UrgEZjjni9SDnjoZUMSV0NhOciNY/Y2O9a715sxs7vKce7jTvMKwMiCR FNKw== 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 :dkim-signature; bh=8FpJIkkAjI1Y+Czc4oN7JAOl9PIJEIl9PVWEx64lSgc=; fh=ts5VzT8SSK0Yfqd+6jUJ7Pr6N7/XTfSQdtsVUFOmmyc=; b=0jbL8qm1G1KEonmlW2T3Qe29JxJdrBnCYRNOU4cDJ2BvNmVSiATr8zX+A2UbBYlgM/ F2CI6a2WZvwn6e9ZSgjJGBk2LFQftt3h098N/yWEvtgxHGfa1vh+04PFmCnzw/bhCA1K KCE8dJ2BEj39tPxv2gAGenv8V5ERx/PhOfT/y0frOPETOioAJbPpvi5EPTw8BlVCBk8e 705tOynUXO/G6n2hERO//PGeU36qj8IbNsbssnzjAVFi/EtlkCJSOOCiQq03KPyjQFR4 xE2n5ieY3JIUm9ZgcRsZCtLweQsjb3YKy9jFSoEJwVUL3Pb1IDvLDhouR4pmemvrkcep 9Tyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=EutNB+zN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id u14-20020a17090341ce00b001d09c96ba1esi10032457ple.452.2023.12.13.08.43.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Dec 2023 08:44:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=EutNB+zN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 3B2DD80B7C2D; Wed, 13 Dec 2023 08:43:57 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378979AbjLMQn2 (ORCPT + 99 others); Wed, 13 Dec 2023 11:43:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55976 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235378AbjLMQnI (ORCPT ); Wed, 13 Dec 2023 11:43:08 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6868BF3 for ; Wed, 13 Dec 2023 08:43:13 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D53F6C433CA; Wed, 13 Dec 2023 16:43:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1702485793; bh=Xx02t9tpORoHITkBD1x5P/vBMElFrxoGnWnTgr1OD4o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EutNB+zNKO4N/VpzUrYjbCv+FL+7uqhHDzbhfhdf6kUFBBoU5zCuXwircAdOnN7N2 F20tPDI/AsLUekafvAm+A9k9bs97hk0Pixjq6liQaUVHRlvCPCLnvOWT16e31KTXku fR/Kus4TFXB95ldUvG2CW9kh8lu9/klGDgsXea8v9vt9WiaSvSDq6t6C6yt5kO8v0p 7qtPahEkz8yk9Q88FAuc3o7gIUTYrDTW82I+FTRbWNJ1gD8tUSKuKeA+5xOiJIpi3Y S4wEsePZQrGp4Rwj9YHpWQbbS52vKg8vIFzgXX+VdthuUy5A9xqJIAQkMRF6+jrRBo vmK+bIWyD6TXg== From: Lee Jones To: lee@kernel.org, gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Tomoki Sekiyama Subject: [PATCH 08/12] usb: yurex: Replace snprintf() with the safer scnprintf() variant Date: Wed, 13 Dec 2023 16:42:37 +0000 Message-ID: <20231213164246.1021885-9-lee@kernel.org> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231213164246.1021885-1-lee@kernel.org> References: <20231213164246.1021885-1-lee@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Wed, 13 Dec 2023 08:43:57 -0800 (PST) There is a general misunderstanding amongst engineers that {v}snprintf() returns the length of the data *actually* encoded into the destination array. However, as per the C99 standard {v}snprintf() really returns the length of the data that *would have been* written if there were enough space for it. This misunderstanding has led to buffer-overruns in the past. It's generally considered safer to use the {v}scnprintf() variants in their place (or even sprintf() in simple cases). So let's do that. Whilst we're at it, let's define some magic numbers to increase readability and ease of maintenance. Link: https://lwn.net/Articles/69419/ Link: https://github.com/KSPP/linux/issues/105 Cc: Tomoki Sekiyama Signed-off-by: Lee Jones --- drivers/usb/misc/yurex.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c index c640f98d20c54..5a13cddace0e6 100644 --- a/drivers/usb/misc/yurex.c +++ b/drivers/usb/misc/yurex.c @@ -34,6 +34,8 @@ #define YUREX_BUF_SIZE 8 #define YUREX_WRITE_TIMEOUT (HZ*2) +#define MAX_S64_STRLEN 20 /* {-}922337203685477580{7,8} */ + /* table of devices that work with this driver */ static struct usb_device_id yurex_table[] = { { USB_DEVICE(YUREX_VENDOR_ID, YUREX_PRODUCT_ID) }, @@ -401,7 +403,7 @@ static ssize_t yurex_read(struct file *file, char __user *buffer, size_t count, { struct usb_yurex *dev; int len = 0; - char in_buffer[20]; + char in_buffer[MAX_S64_STRLEN]; unsigned long flags; dev = file->private_data; @@ -412,14 +414,14 @@ static ssize_t yurex_read(struct file *file, char __user *buffer, size_t count, return -ENODEV; } + if (WARN_ON_ONCE(dev->bbu > S64_MAX || dev->bbu < S64_MIN)) + return -EIO; + spin_lock_irqsave(&dev->lock, flags); - len = snprintf(in_buffer, 20, "%lld\n", dev->bbu); + scnprintf(in_buffer, MAX_S64_STRLEN, "%lld\n", dev->bbu); spin_unlock_irqrestore(&dev->lock, flags); mutex_unlock(&dev->io_mutex); - if (WARN_ON_ONCE(len >= sizeof(in_buffer))) - return -EIO; - return simple_read_from_buffer(buffer, count, ppos, in_buffer, len); } -- 2.43.0.472.g3155946c3a-goog