LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> To: linux-kernel@vger.kernel.org Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>, stable@vger.kernel.org, "Pali Rohár" <pali@kernel.org>, "David S. Miller" <davem@davemloft.net> Subject: [PATCH 5.10 17/19] ppp: Fix generating ppp unit id when ifname is not specified Date: Fri, 13 Aug 2021 17:07:34 +0200 [thread overview] Message-ID: <20210813150523.188934800@linuxfoundation.org> (raw) In-Reply-To: <20210813150522.623322501@linuxfoundation.org> From: Pali Rohár <pali@kernel.org> commit 3125f26c514826077f2a4490b75e9b1c7a644c42 upstream. When registering new ppp interface via PPPIOCNEWUNIT ioctl then kernel has to choose interface name as this ioctl API does not support specifying it. Kernel in this case register new interface with name "ppp<id>" where <id> is the ppp unit id, which can be obtained via PPPIOCGUNIT ioctl. This applies also in the case when registering new ppp interface via rtnl without supplying IFLA_IFNAME. PPPIOCNEWUNIT ioctl allows to specify own ppp unit id which will kernel assign to ppp interface, in case this ppp id is not already used by other ppp interface. In case user does not specify ppp unit id then kernel choose the first free ppp unit id. This applies also for case when creating ppp interface via rtnl method as it does not provide a way for specifying own ppp unit id. If some network interface (does not have to be ppp) has name "ppp<id>" with this first free ppp id then PPPIOCNEWUNIT ioctl or rtnl call fails. And registering new ppp interface is not possible anymore, until interface which holds conflicting name is renamed. Or when using rtnl method with custom interface name in IFLA_IFNAME. As list of allocated / used ppp unit ids is not possible to retrieve from kernel to userspace, userspace has no idea what happens nor which interface is doing this conflict. So change the algorithm how ppp unit id is generated. And choose the first number which is not neither used as ppp unit id nor in some network interface with pattern "ppp<id>". This issue can be simply reproduced by following pppd call when there is no ppp interface registered and also no interface with name pattern "ppp<id>": pppd ifname ppp1 +ipv6 noip noauth nolock local nodetach pty "pppd +ipv6 noip noauth nolock local nodetach notty" Or by creating the one ppp interface (which gets assigned ppp unit id 0), renaming it to "ppp1" and then trying to create a new ppp interface (which will always fails as next free ppp unit id is 1, but network interface with name "ppp1" exists). This patch fixes above described issue by generating new and new ppp unit id until some non-conflicting id with network interfaces is generated. Signed-off-by: Pali Rohár <pali@kernel.org> Cc: stable@vger.kernel.org Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- drivers/net/ppp/ppp_generic.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -283,7 +283,7 @@ static struct channel *ppp_find_channel( static int ppp_connect_channel(struct channel *pch, int unit); static int ppp_disconnect_channel(struct channel *pch); static void ppp_destroy_channel(struct channel *pch); -static int unit_get(struct idr *p, void *ptr); +static int unit_get(struct idr *p, void *ptr, int min); static int unit_set(struct idr *p, void *ptr, int n); static void unit_put(struct idr *p, int n); static void *unit_find(struct idr *p, int n); @@ -1045,9 +1045,20 @@ static int ppp_unit_register(struct ppp mutex_lock(&pn->all_ppp_mutex); if (unit < 0) { - ret = unit_get(&pn->units_idr, ppp); + ret = unit_get(&pn->units_idr, ppp, 0); if (ret < 0) goto err; + if (!ifname_is_set) { + while (1) { + snprintf(ppp->dev->name, IFNAMSIZ, "ppp%i", ret); + if (!__dev_get_by_name(ppp->ppp_net, ppp->dev->name)) + break; + unit_put(&pn->units_idr, ret); + ret = unit_get(&pn->units_idr, ppp, ret + 1); + if (ret < 0) + goto err; + } + } } else { /* Caller asked for a specific unit number. Fail with -EEXIST * if unavailable. For backward compatibility, return -EEXIST @@ -3378,9 +3389,9 @@ static int unit_set(struct idr *p, void } /* get new free unit number and associate pointer with it */ -static int unit_get(struct idr *p, void *ptr) +static int unit_get(struct idr *p, void *ptr, int min) { - return idr_alloc(p, ptr, 0, 0, GFP_KERNEL); + return idr_alloc(p, ptr, min, 0, GFP_KERNEL); } /* put unit number back to a pool */
next prev parent reply other threads:[~2021-08-13 15:18 UTC|newest] Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-08-13 15:07 [PATCH 5.10 00/19] 5.10.59-rc1 review Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 01/19] KVM: SVM: Fix off-by-one indexing when nullifying last used SEV VMCB Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 02/19] tee: Correct inappropriate usage of TEE_SHM_DMA_BUF flag Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 03/19] firmware: tee_bnxt: Release TEE shm, session, and context during kexec Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 04/19] bpf: Add _kernel suffix to internal lockdown_bpf_read Greg Kroah-Hartman 2021-08-13 19:55 ` Pavel Machek 2021-08-13 21:57 ` Daniel Borkmann 2021-08-15 11:42 ` Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 05/19] bpf: Add lockdown check for probe_write_user helper Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 06/19] Revert "selftests/resctrl: Use resctrl/info for feature detection" Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 07/19] mm: make zone_to_nid() and zone_set_nid() available for DISCONTIGMEM Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 08/19] arm64: dts: renesas: rzg2: Add usb2_clksel to RZ/G2 M/N/H Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 09/19] arm64: dts: renesas: beacon: Fix USB extal reference Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 10/19] arm64: dts: renesas: beacon: Fix USB ref clock references Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 11/19] vboxsf: Honor excl flag to the dir-inode create op Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 12/19] vboxsf: Make vboxsf_dir_create() return the handle for the created file Greg Kroah-Hartman 2021-08-13 19:31 ` Pavel Machek 2021-08-15 11:43 ` Greg Kroah-Hartman 2021-08-15 13:57 ` Hans de Goede 2021-08-16 8:49 ` Greg Kroah-Hartman 2021-08-17 15:52 ` Sudip Mukherjee 2021-08-17 18:21 ` Hans de Goede 2021-08-13 15:07 ` [PATCH 5.10 13/19] USB:ehci:fix Kunpeng920 ehci hardware problem Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 14/19] ALSA: pcm: Fix mmap breakage without explicit buffer setup Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 15/19] ALSA: hda/realtek: fix mute/micmute LEDs for HP ProBook 650 G8 Notebook PC Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 16/19] ALSA: hda: Add quirk for ASUS Flow x13 Greg Kroah-Hartman 2021-08-13 15:07 ` Greg Kroah-Hartman [this message] 2021-08-13 15:07 ` [PATCH 5.10 18/19] ovl: prevent private clone if bind mount is not allowed Greg Kroah-Hartman 2021-08-13 15:07 ` [PATCH 5.10 19/19] net: xilinx_emaclite: Do not print real IOMEM pointer Greg Kroah-Hartman 2021-08-13 23:24 ` [PATCH 5.10 00/19] 5.10.59-rc1 review Shuah Khan 2021-08-14 11:07 ` Sudip Mukherjee 2021-08-14 11:35 ` Naresh Kamboju 2021-08-14 15:08 ` Fox Chen 2021-08-14 18:16 ` Guenter Roeck 2021-08-15 19:48 ` Pavel Machek 2021-08-16 3:03 ` Samuel Zou
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210813150523.188934800@linuxfoundation.org \ --to=gregkh@linuxfoundation.org \ --cc=davem@davemloft.net \ --cc=linux-kernel@vger.kernel.org \ --cc=pali@kernel.org \ --cc=stable@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).