Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp1759191ybh; Sun, 15 Mar 2020 10:19:15 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvhCPGjlL7lPNHw59PeMsSpxbCn4Yp5MNJVvNpK5mYcByjIDxeYUaFg0Ey7CgEopdN1GNJb X-Received: by 2002:a9d:77d0:: with SMTP id w16mr19675439otl.66.1584292755239; Sun, 15 Mar 2020 10:19:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584292755; cv=none; d=google.com; s=arc-20160816; b=BvDPmcMZnVCG5wqa72R3a/yjzzW4QBG0+d0NYycskHvJvzu0dJI4+O2cD8MrETyy2v I+3RDEhqJ5rE0i6nQ/vNqfeBZYlhBPKM0E8iTqOxU3yKbeQYSi/584ZVhdWgjVKS0pPm 8pE5Q0CTOK4ZB8N2foctkCnmCDV+IrLVaAA56gnm58mUApG+8YRwakqLsDGt86GRoZ4O pThhoXMyEe6eeOCuxgKgsEuAGGomj+O4HIlcfRwvnBfuPFNPcUdpPLV3nCaRIOU6m7WL P1cbRLcV37HJg8dFegcwfsggBn0+I01DR1ZNIDIU/z3Qu75aT+VbO0fvRB1KBW26pdfo LGWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:cc:to:subject:from:references :in-reply-to:message-id; bh=4msB7UBzTfdSZw13ApLkbdBe98oqH8D2DuMJcjC5vU4=; b=g3jZLBA4H7ppR2L0NNaFifbaCCSJIk58Y4FendTsbCWhvrF9HcRRCEqHxYyU+gUSM6 bghHxTFxNgFs4Bi1rPPuKN/Ij0QqCB9z4oLHjXaKdMuWd9hL/Tx7IBvG1g43YhjFXJA6 hp6cXTLNFPZvrLt1EE54RZbo6BKIGNZuEv/c2xlRcsRCs4tmYg0tT37cJJGgtinst++O IjXTRmu3oulHRYotYVOLfP16gaKe6HM5N62h7+sI5nfv8HEYu2MTARDMw9fMbC7jirYV xRHFC39y6F5bm90ds4K2Cqp92zMF9PlAxdy+Ycp4D+R+c0UuxL10VSrzCZddroBbxih0 BLNA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s5si6591340oie.153.2020.03.15.10.19.03; Sun, 15 Mar 2020 10:19:15 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729024AbgCORR4 (ORCPT + 99 others); Sun, 15 Mar 2020 13:17:56 -0400 Received: from mx2.suse.de ([195.135.220.15]:56486 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728887AbgCORRz (ORCPT ); Sun, 15 Mar 2020 13:17:55 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id C9F64ADB5; Sun, 15 Mar 2020 17:17:53 +0000 (UTC) Received: by unicorn.suse.cz (Postfix, from userid 1000) id 37E23E0C04; Sun, 15 Mar 2020 18:17:53 +0100 (CET) Message-Id: <40d6e189e3661dc996f7646c848bfb067ac324cb.1584292182.git.mkubecek@suse.cz> In-Reply-To: References: From: Michal Kubecek Subject: [PATCH net 3/3] ethtool: reject unrecognized request flags To: David Miller , Jakub Kicinski , netdev@vger.kernel.org Cc: Johannes Berg , linux-kernel@vger.kernel.org Date: Sun, 15 Mar 2020 18:17:53 +0100 (CET) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As pointed out by Jakub Kicinski, we ethtool netlink code should respond with an error if request head has flags set which are not recognized by kernel, either as a mistake or because it expects functionality introduced in later kernel versions. To avoid unnecessary roundtrips, use extack cookie to provide the information about supported request flags. Signed-off-by: Michal Kubecek --- net/ethtool/netlink.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c index 180c194fab07..fc9e0b806889 100644 --- a/net/ethtool/netlink.c +++ b/net/ethtool/netlink.c @@ -40,6 +40,7 @@ int ethnl_parse_header(struct ethnl_req_info *req_info, struct nlattr *tb[ETHTOOL_A_HEADER_MAX + 1]; const struct nlattr *devname_attr; struct net_device *dev = NULL; + u32 flags = 0; int ret; if (!header) { @@ -50,8 +51,17 @@ int ethnl_parse_header(struct ethnl_req_info *req_info, ethnl_header_policy, extack); if (ret < 0) return ret; - devname_attr = tb[ETHTOOL_A_HEADER_DEV_NAME]; + if (tb[ETHTOOL_A_HEADER_FLAGS]) { + flags = nla_get_u32(tb[ETHTOOL_A_HEADER_FLAGS]); + if (flags & ~ETHTOOL_FLAG_ALL) { + NL_SET_ERR_MSG_ATTR(extack, tb[ETHTOOL_A_HEADER_FLAGS], + "unrecognized request flags"); + nl_set_extack_cookie_u32(extack, ETHTOOL_FLAG_ALL); + return -EOPNOTSUPP; + } + } + devname_attr = tb[ETHTOOL_A_HEADER_DEV_NAME]; if (tb[ETHTOOL_A_HEADER_DEV_INDEX]) { u32 ifindex = nla_get_u32(tb[ETHTOOL_A_HEADER_DEV_INDEX]); @@ -90,9 +100,7 @@ int ethnl_parse_header(struct ethnl_req_info *req_info, } req_info->dev = dev; - if (tb[ETHTOOL_A_HEADER_FLAGS]) - req_info->flags = nla_get_u32(tb[ETHTOOL_A_HEADER_FLAGS]); - + req_info->flags = flags; return 0; } -- 2.25.1