From patchwork Sat Aug 7 13:27:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pali_Roh=C3=A1r?= X-Patchwork-Id: 493815 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=-19.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, 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 22B06C4338F for ; Sat, 7 Aug 2021 13:28:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E6CD761104 for ; Sat, 7 Aug 2021 13:28:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232315AbhHGN3K (ORCPT ); Sat, 7 Aug 2021 09:29:10 -0400 Received: from mail.kernel.org ([198.145.29.99]:58206 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232286AbhHGN3I (ORCPT ); Sat, 7 Aug 2021 09:29:08 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 1476D610FB; Sat, 7 Aug 2021 13:28:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1628342931; bh=UC7Y+bKIfxbXggliQGmWxQhW3dM7xZsPS/HEcNc9Esc=; h=From:To:Cc:Subject:Date:From; b=mf/j8G4vtHQCytTURcwIew+p60imE1a1QcqnFdQLPod5OPz5c+zRH5wwYOuwdPD1v hsIJS2xKSvucpvY0Kjdl3H3cks7keBtsOyezoi6WC+gIJakWHpj+64fhbeXbxhvVRO u1mE3Gf8mg6omGhctlP2rWjjvPbh7RBbe8ikSRgkgQ0bm1Ox2NYVrzQQearPZuqo5a 7UstWAKFNkcdirMIeC39IFCxEsVidr3sy2+VrX5h/DyLRx7TZ2za36Uxvt6FTapI/q gF/CSFg8E2iUhLKCcpdJJ2jz2741IMpWvGN0Czu1Lk1M14t7CrgeBiA6ZHHw3VH0MP g+Dd3+61r1Qlw== Received: by pali.im (Postfix) id B4FE3A52; Sat, 7 Aug 2021 15:28:48 +0200 (CEST) From: =?utf-8?q?Pali_Roh=C3=A1r?= To: Paul Mackerras , "David S. Miller" , Jakub Kicinski , Guillaume Nault Cc: linux-ppp@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] ppp: Fix generating ifname when empty IFLA_IFNAME is specified Date: Sat, 7 Aug 2021 15:27:03 +0200 Message-Id: <20210807132703.26303-1-pali@kernel.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org IFLA_IFNAME is nul-term string which means that IFLA_IFNAME buffer can be larger than length of string which contains. Function __rtnl_newlink() generates new own ifname if either IFLA_IFNAME was not specified at all or userspace passed empty nul-term string. It is expected that if userspace does not specify ifname for new ppp netdev then kernel generates one in format "ppp" where id matches to the ppp unit id which can be later obtained by PPPIOCGUNIT ioctl. And it works in this way if IFLA_IFNAME is not specified at all. But it does not work when IFLA_IFNAME is specified with empty string. So fix this logic also for empty IFLA_IFNAME in ppp_nl_newlink() function and correctly generates ifname based on ppp unit identifier if userspace did not provided preferred ifname. Without this patch when IFLA_IFNAME was specified with empty string then kernel created a new ppp interface in format "ppp" but id did not match ppp unit id returned by PPPIOCGUNIT ioctl. In this case id was some number generated by __rtnl_newlink() function. Signed-off-by: Pali Rohár Fixes: bb8082f69138 ("ppp: build ifname using unit identifier for rtnl based devices") --- drivers/net/ppp/ppp_generic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c index d445ecb1d0c7..1c6ba5a5e081 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -1306,7 +1306,7 @@ static int ppp_nl_newlink(struct net *src_net, struct net_device *dev, * the PPP unit identifer as suffix (i.e. ppp). This allows * userspace to infer the device name using to the PPPIOCGUNIT ioctl. */ - if (!tb[IFLA_IFNAME]) + if (!tb[IFLA_IFNAME] || !nla_len(tb[IFLA_IFNAME]) || !*(char *)nla_data(tb[IFLA_IFNAME])) conf.ifname_is_set = false; err = ppp_dev_configure(src_net, dev, &conf);