Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp2433748ybh; Mon, 9 Mar 2020 05:54:33 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvu/JfLgaqF0MIgv9Vwh1N809BYyeYlrU1XQcXZrrkEkgsNkrOKLpqONcs6ndk2RVFtbQqe X-Received: by 2002:a9d:7e94:: with SMTP id m20mr12146877otp.351.1583758473690; Mon, 09 Mar 2020 05:54:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583758473; cv=none; d=google.com; s=arc-20160816; b=HpSPst9EPk9JE69Fj14D/LR8tfrYPhU8u4kMxdLuLjwNRPZgDr5MJSqw9Ovxlrxl9F c+a97sgwVCpXtFe/bNQun4e8PO+Jz53myIi6oW2p957ssbpoo4OCNIVRYWhKTz9tW6sV 4OGO+seT0cBYPFvxSWRehFGEgJxncVF6wlebcLB+/MdTyw03gkmLxFJ2SOzIXYG9AESF 53GdXjqQ4WcVLnkgiIXRfADYQ5hJzi0o8lSrb3Shaw2YD8KmFH+CdQh0SIVl6i/FGmD0 4gnaPboQHm0oKQrCV+bxywIuX5mPySyqIEHh3KcVwDQjYq+G3fiNV9yfeIr3N00Qy+SV FS8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:content-transfer-encoding:mime-version :message-id:date:subject:cc:from:dkim-signature; bh=KH1VNE2zt1RlYZ8rl8KTG3SK8e66WbruwQJVkNVIE98=; b=NyC4ri1+cFt3uDoSDgTRgJL6NJ2GLwBb1dMpo3sg4nZ7xbgVlXnBWp53hDqXrdaykF oq8CV7PL3SqN3md+83bbOOCNq4+ASRKoVALjiC+4sU5YNAebIwFj7pHwFfAu1kCUOozW MNqpI7jh33rfeU8S3GSDYiKe1ITz+YFoOVnBVL8DOMF+UOFHs1N8mW3FMFct/pwlhxKh tWQXCZRXEjKbHuRW9ujQgIQhAsJP0Z/raqAkhkdxMLF40Ck2WdKIUmyHj8ikXbL6Gw2L MTZVmVpWB1icIbWtP6/z0mw4hynDuL4Cp634KRXr1fLpuC2tOw7079S+J0+9dmZroioJ Zi5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=c8WLYOiC; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i6si5733529oth.182.2020.03.09.05.54.21; Mon, 09 Mar 2020 05:54:33 -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; dkim=fail header.i=@gmail.com header.s=20161025 header.b=c8WLYOiC; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726488AbgCIMxl (ORCPT + 99 others); Mon, 9 Mar 2020 08:53:41 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:36927 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726368AbgCIMxl (ORCPT ); Mon, 9 Mar 2020 08:53:41 -0400 Received: by mail-wm1-f67.google.com with SMTP id a141so9445318wme.2; Mon, 09 Mar 2020 05:53:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=KH1VNE2zt1RlYZ8rl8KTG3SK8e66WbruwQJVkNVIE98=; b=c8WLYOiCVOo3TcVaTgnTw3VXuNGVreLagIf8x9lrWlUI/FaUFPULrCKTH3PRrBMCE0 NYbkl6g/ahGSwyC083KTSyICT2cjG7uhyV7GpOs7coflZdu7ALapA431f3RimNbGUJJD 3sp3/TTIMpcr0IjS4IHRJ7eafDL5O34K+6HyfHmuVJpgUIAvHbiE/mwRGuFploheBc4s +D8sGjuke/hh0bXwvbAto2Vq1iMJhcZ3GVNADe87INxRAfzMwEAgq/3vp/kkmxJfMs6Y bvn93fJ/F7uDE+1oe/1LceBv/cJ+VBP+04+7CHy+emD3+7fYSH5sgMPsanG1/oEObc+v q6fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=KH1VNE2zt1RlYZ8rl8KTG3SK8e66WbruwQJVkNVIE98=; b=Qn7C0tfgxFPfq9azqsbiGKijLCKGqs4kSsMMYU2Vc/ripgJ8nFjkFH2AuIrSgzTehC Hn80sL/wwwrxgviG3WTQR7H1VAO3ruBDdZ5uU03/v5Iv0k6BXEsGKQWa8aM/90WllR3y TOzPTypveEDBejjOWKRExoziY34QxYByA8b4/yXHZcCMxmaJFIgRb2A3/KObpOCuR0cy way3eDRLdCW9TuvfQUxpFpxwTHR/gad/jq1m8Fwhpq591m2sON4hM6ugQtnJXRBfyXC4 hnsWE9JvTGAWrufo0JrpuYjvFeiNNaIXfKLw6aNwlqdsT8WjpM9+gnObfMA7ZuowEtFl vbsw== X-Gm-Message-State: ANhLgQ1kF7BGXF8Oa8kQk86TutQMm74c0tg48C+6XLZRPgaojhLM2Yuv 2Vbg/KzS/nFHH0mwBQ+YcOQ= X-Received: by 2002:a1c:9e85:: with SMTP id h127mr19292611wme.145.1583758419327; Mon, 09 Mar 2020 05:53:39 -0700 (PDT) Received: from localhost.localdomain (178.43.54.24.ipv4.supernova.orange.pl. [178.43.54.24]) by smtp.gmail.com with ESMTPSA id q1sm19653144wrx.19.2020.03.09.05.53.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 09 Mar 2020 05:53:38 -0700 (PDT) From: Dominik 'disconnect3d' Czarnota Cc: dominik.b.czarnota@gmail.com, Antonino Daplas , Bartlomiej Zolnierkiewicz , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH] Fix off by one in nvidia driver strncpy size arg Date: Mon, 9 Mar 2020 13:49:46 +0100 Message-Id: <20200309124947.4502-1-dominik.b.czarnota@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: disconnect3d This patch fixes an off-by-one error in strncpy size argument in drivers/video/fbdev/nvidia/nvidia.c. The issue is that in: strncmp(this_opt, "noaccel", 6) the passed string literal: "noaccel" has 7 bytes (without the NULL byte) and the passed size argument is 6. As a result, the logic will also match/accept string "noacce" or "noacceX". This bug doesn't seem to have any security impact since its present in the driver's setup and just accepts slighty changed string to enable the `noaccel` flag. Signed-off-by: disconnect3d --- Notes: The bug could also be fixed by changing the size argument to `sizeof("string literal")-1` but I am not proposing this change as that would have to be changed in other places. There are also more cases like this in kernel sources which I reported/will report soon. This bug has been found by running a massive grep-like search using Google's BigQuery on GitHub repositories data. I am also going to work on a CodeQL/Semmle query to be able to find more sophisticated cases like this that can't be found via grepping. drivers/video/fbdev/nvidia/nvidia.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/video/fbdev/nvidia/nvidia.c b/drivers/video/fbdev/nvidia/nvidia.c index c583c018304d..b77efeb33477 100644 --- a/drivers/video/fbdev/nvidia/nvidia.c +++ b/drivers/video/fbdev/nvidia/nvidia.c @@ -1470,7 +1470,7 @@ static int nvidiafb_setup(char *options) flatpanel = 1; } else if (!strncmp(this_opt, "hwcur", 5)) { hwcur = 1; - } else if (!strncmp(this_opt, "noaccel", 6)) { + } else if (!strncmp(this_opt, "noaccel", 7)) { noaccel = 1; } else if (!strncmp(this_opt, "noscale", 7)) { noscale = 1; -- 2.25.1