From patchwork Mon Nov 20 15:11:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 167235 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d903:0:b0:430:37f2:e94a with SMTP id dt3csp2335187vqb; Mon, 20 Nov 2023 07:16:15 -0800 (PST) X-Google-Smtp-Source: AGHT+IHZ9M14pFOohkOkmX5lIwxN6mPsXIeaUnehGIhn5trPSPgh0kJdCXiHVj990mMV1iqwtFdR X-Received: by 2002:a05:6870:d29a:b0:1c5:56f:ac08 with SMTP id d26-20020a056870d29a00b001c5056fac08mr9933771oae.12.1700493375048; Mon, 20 Nov 2023 07:16:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700493375; cv=none; d=google.com; s=arc-20160816; b=sw/A0POZvgr159V5R6HXy9EiwunEqb5AWzvE74D0QVVqDN0F8e3LM8FxbZtgsNMlPv Kq8S2Y8yxpijejPvNgRYxO7RrAqZQ+kxtsL/iwG3U6a/spfaThGC3wmKnwwR82ZKL3Nf xgtUldAHnxVs49p/fJMFlKJyptzM8A/OzVnda7RZJpVzVZxdkbXFOw1SW4MNc7tytUom f5oVYIE/MdA+dZARXIrTDqfqlqU1yCgM5VBDuxGA3GdVkiCINdtvXb4CohptATmVHnxr lnECOyV0KWzlvX3dJ4cTMkI005Xn2ba50jWf4WA6ovMWKIKKP1d/lDZ0a5ur/Q9If1NG IPng== 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=NA1DF52jkN6HhauZIqD9njrAvLu3yAqZqc3Kwiz6Xl0=; fh=3VDKuUpnZHU/E7Q667FFh57Tg9oMevOil/UrLftGKk8=; b=ZgJf4vC87F+eMR2QW1OvqE+EFT9y0UxahQ+c8PJjOprBEDOqQ8Zh7qbLhZ8eb7V9Pe Ig281eAY68D+/JO+QiNO8F1nJC5YvmaPRPZReNlAcbzbgd3XiXHp9/QF24YNw2I0WAX1 +JNck/QAVGDbXd59im3noHhgQ7xIJtn5EZjOBXCynKJDCE7YURHhn5OkdmkxJf+sQtuc NSGuf/YKhZrbtibGNH16Jayx2iEUl9Mj2fJfjiuEji0IDppprte3xzBcGdlq5wGfZpxe tfW2awl2SV/z9VO81u8YuO4R1uBsyIRHvFkSFULwM1BMJGmmfeCGjJbdTB548R+7Z8fh CGlw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=AGmk7sbN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id e9-20020a056870c0c900b001f95c05d46dsi131012oad.128.2023.11.20.07.16.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 07:16:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=AGmk7sbN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 58EED80784FD; Mon, 20 Nov 2023 07:15:15 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234419AbjKTPOh (ORCPT + 27 others); Mon, 20 Nov 2023 10:14:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44408 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234242AbjKTPO3 (ORCPT ); Mon, 20 Nov 2023 10:14:29 -0500 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 547C7CB; Mon, 20 Nov 2023 07:14:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1700493266; x=1732029266; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=22qKIvbrgULxlxyf3xmSTybLyjjW9aZHEYq6pWfjelQ=; b=AGmk7sbNCl0eKA72nse3rxU4lhYhOHzM38LOICvGzy98xo1JPBNoscua 7z2qjMB6W/DWRZZqBvH93TXkn3QBMtRPt3ZyaVvCEFF5RgbAaCmcvILb6 plmZkTK9OyOdJzmZvHdASBryKcS1YuwfwhtRQXwnvwF96nKpeDRziPLCP viaIqX4PmGTy+2htEGAgoIc8hvr1cmjTm34Oeeo6D+a5lEZWAFKJEHmzE 3z5zX5Vw110J+u3vkp+FqJ0xZVt3Jam6ye5vCo/1KVESy2grt49gzpZUL Qbx2XCTITmxtNZPrwCwOcWdD2OsNBkkRcfSopi+BoolcHnG+hDHjdmT5A Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10900"; a="394486347" X-IronPort-AV: E=Sophos;i="6.04,214,1695711600"; d="scan'208";a="394486347" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Nov 2023 07:14:24 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10900"; a="801209698" X-IronPort-AV: E=Sophos;i="6.04,214,1695711600"; d="scan'208";a="801209698" Received: from black.fi.intel.com ([10.237.72.28]) by orsmga001.jf.intel.com with ESMTP; 20 Nov 2023 07:14:22 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 5240C9F; Mon, 20 Nov 2023 17:14:21 +0200 (EET) From: Andy Shevchenko To: Luis Chamberlain , Kees Cook , Andy Shevchenko , linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman Subject: [PATCH v3 2/5] params: Do not go over the limit when getting the string length Date: Mon, 20 Nov 2023 17:11:43 +0200 Message-ID: <20231120151419.1661807-3-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20231120151419.1661807-1-andriy.shevchenko@linux.intel.com> References: <20231120151419.1661807-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,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 lipwig.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 (lipwig.vger.email [0.0.0.0]); Mon, 20 Nov 2023 07:15:15 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783096541384515667 X-GMAIL-MSGID: 1783096541384515667 We can use strnlen() even on early stages and it prevents from going over the string boundaries in case it's already too long. Reviewed-by: Luis Chamberlain Reviewed-by: Kees Cook Signed-off-by: Andy Shevchenko --- kernel/params.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/kernel/params.c b/kernel/params.c index 626fa8265932..f8e3c4139854 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -260,7 +260,10 @@ EXPORT_SYMBOL_GPL(param_set_uint_minmax); int param_set_charp(const char *val, const struct kernel_param *kp) { - if (strlen(val) > 1024) { + size_t len, maxlen = 1024; + + len = strnlen(val, maxlen + 1); + if (len == maxlen + 1) { pr_err("%s: string parameter too long\n", kp->name); return -ENOSPC; } @@ -270,7 +273,7 @@ int param_set_charp(const char *val, const struct kernel_param *kp) /* This is a hack. We can't kmalloc in early boot, and we * don't need to; this mangled commandline is preserved. */ if (slab_is_available()) { - *(char **)kp->arg = kmalloc_parameter(strlen(val)+1); + *(char **)kp->arg = kmalloc_parameter(len + 1); if (!*(char **)kp->arg) return -ENOMEM; strcpy(*(char **)kp->arg, val); @@ -508,7 +511,7 @@ int param_set_copystring(const char *val, const struct kernel_param *kp) { const struct kparam_string *kps = kp->str; - if (strlen(val)+1 > kps->maxlen) { + if (strnlen(val, kps->maxlen) == kps->maxlen) { pr_err("%s: string doesn't fit in %u chars.\n", kp->name, kps->maxlen-1); return -ENOSPC;