From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,T_DKIMWL_WL_HIGH,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1B8FBC28CC4 for ; Sat, 1 Jun 2019 13:19:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E972B272BE for ; Sat, 1 Jun 2019 13:19:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559395193; bh=38LgSbJoTl/07ed7Yd+jNq76SQ4YZYrh0KVRudg1NVE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=1hGdLlISA45i+YmNz6lrmzZTsdx/G5dsgv2lV3f+6ZRVDgID4NhxsYiwNn0OfaFYX FDW176npbz88R3vBfbXfE2/D8v6C/wNpcLoxK3Wr2hkMvlS3lfVZglnvZydjYAj1IL zqFFX20pZjAxiNIUyf50LiN9J45qx63y4NCHb6A8= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728220AbfFANTw (ORCPT ); Sat, 1 Jun 2019 09:19:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:46964 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727579AbfFANTv (ORCPT ); Sat, 1 Jun 2019 09:19:51 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id ADB4B272AC; Sat, 1 Jun 2019 13:19:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559395191; bh=38LgSbJoTl/07ed7Yd+jNq76SQ4YZYrh0KVRudg1NVE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pGM1bk2vb2cR8SMIOKc9taUU0iuPwuea5GEOQTYxbt3Rj30GvR7NflCMdMiPLySdS OZYWv5oephdpkWoF7cNnXRWwIQ1oFQ7sZfNZlgG8vgFXucrRwD2oBHAPNfwi3qvSSp 7bLMLS3zVTdkprITZ7GYrKFYLj2JMS3Dx3tUyIKI= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Christian Brauner , Luis Chamberlain , Kees Cook , Alexey Dobriyan , Al Viro , Dominik Brodowski , "Eric W. Biederman" , Joe Lawrence , Waiman Long , Andrew Morton , Linus Torvalds , Sasha Levin , linux-fsdevel@vger.kernel.org Subject: [PATCH AUTOSEL 5.0 005/173] sysctl: return -EINVAL if val violates minmax Date: Sat, 1 Jun 2019 09:16:37 -0400 Message-Id: <20190601131934.25053-5-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190601131934.25053-1-sashal@kernel.org> References: <20190601131934.25053-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org From: Christian Brauner [ Upstream commit e260ad01f0aa9e96b5386d5cd7184afd949dc457 ] Currently when userspace gives us a values that overflow e.g. file-max and other callers of __do_proc_doulongvec_minmax() we simply ignore the new value and leave the current value untouched. This can be problematic as it gives the illusion that the limit has indeed be bumped when in fact it failed. This commit makes sure to return EINVAL when an overflow is detected. Please note that this is a userspace facing change. Link: http://lkml.kernel.org/r/20190210203943.8227-4-christian@brauner.io Signed-off-by: Christian Brauner Acked-by: Luis Chamberlain Cc: Kees Cook Cc: Alexey Dobriyan Cc: Al Viro Cc: Dominik Brodowski Cc: "Eric W. Biederman" Cc: Joe Lawrence Cc: Waiman Long Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- kernel/sysctl.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kernel/sysctl.c b/kernel/sysctl.c index f50f1471c1199..9664d5ae2de10 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -2818,8 +2818,10 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int if (neg) continue; val = convmul * val / convdiv; - if ((min && val < *min) || (max && val > *max)) - continue; + if ((min && val < *min) || (max && val > *max)) { + err = -EINVAL; + break; + } *i = val; } else { val = convdiv * (*i) / convmul; -- 2.20.1