From patchwork Fri Jan 13 23:48:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mahesh Bandewar X-Patchwork-Id: 715296 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3v0fTj1mbqz9vF3 for ; Sat, 14 Jan 2017 10:48:41 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=bandewar-net.20150623.gappssmtp.com header.i=@bandewar-net.20150623.gappssmtp.com header.b="mltiqLSr"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751582AbdAMXsi (ORCPT ); Fri, 13 Jan 2017 18:48:38 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:34359 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751261AbdAMXsi (ORCPT ); Fri, 13 Jan 2017 18:48:38 -0500 Received: by mail-pf0-f193.google.com with SMTP id y143so10240337pfb.1 for ; Fri, 13 Jan 2017 15:48:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bandewar-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=2Llkuxdrct5NjMirP8+Gu83kKDuc+9Vg5VewazVtflo=; b=mltiqLSrXncJlpArw6kUQ+7ziCmDff5tOA/flV+OjHYfd6SDoWCuzRcivyqXBTn7hI 6zpfjAII4GEU1fzRJU7BCzCr4pFUPRwD67BPBlEPj4q9NAcCbPakPG5MwqCqbBhZV5gX T1fJ/3aKbm+4s/QI58RT+lxHxhzQEcHdmeG/n7y0BnfDGDMfYZ6enT/vrbN2sB35XKSS 3OuvtquAMwBLmvWhDm/X4EPfjQmBpYgRMJCOUmcLLoN3s9OahIEjYfG4WnaleaQYZ0nE cz2yYDNtvi7dRat6mdJ7w52qv5fVyaZPjSIdfIywtELDeuoI/49xyQSoIOmgsbMwZjCa dcWw== 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; bh=2Llkuxdrct5NjMirP8+Gu83kKDuc+9Vg5VewazVtflo=; b=Y/TvF2SbaDI5SF3m8qUNYgCWPYnd5j/Uwm6dXsMyallmvdoqodiQUnOAGrjrFYHKee AUaJw0Fu2xR88LiFAV6EDZZlQ8L45cDlRppUJ7EXOfhpepZ4WLWjACJbf7qa4ul9jZh0 6bsckoiVZDMyAoDaZu4lvli0qCeIREiZqX0wXOWOO5POzzNkUqMdT47bvjH8jnIN+FkP HB8hBM8NlGeeHP29wgBaQDOngn9yxwEY1J6kI0MN07semWXTW1aX6fP0McQCWsjRDG93 R/Og+xV3DWfG6jhqa1YUOXfbncoEhE5nThdYtT/XEpJc5iwBgBPZtglQHnK8r8FCB5ij j5rw== X-Gm-Message-State: AIkVDXLmg0K4NICNwn2q3WRKF6eHyESTJr5HSa4slYVVWN4CvzzFBj3CDC7uGfcD4jS6Rg== X-Received: by 10.84.212.2 with SMTP id d2mr33837643pli.24.1484351317294; Fri, 13 Jan 2017 15:48:37 -0800 (PST) Received: from localhost ([2620:0:1000:3012:9c98:9f39:72ce:bf61]) by smtp.gmail.com with ESMTPSA id y6sm31820752pge.16.2017.01.13.15.48.35 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 13 Jan 2017 15:48:35 -0800 (PST) From: Mahesh Bandewar To: David Miller Cc: netdev , Mahesh Bandewar , Mahesh Bandewar , David Miller , Eric Dumazet Subject: [PATCH next] ipvlan: fix dev_id creation corner case. Date: Fri, 13 Jan 2017 15:48:30 -0800 Message-Id: <20170113234830.16054-1-mahesh@bandewar.net> X-Mailer: git-send-email 2.11.0.483.g087da7b7c-goog Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Mahesh Bandewar In the last patch da36e13cf65 ("ipvlan: improvise dev_id generation logic in IPvlan") I missed some part of Dave's suggestion and because of that the dev_id creation could fail in a corner case scenario. This would happen when more or less 64k devices have been already created and several have been deleted. If the devices that are still sticking around are the last n bits from the bitmap. So in this scenario even if lower bits are available, the dev_id search is so narrow that it always fails. Fixes: da36e13cf65 ("ipvlan: improvise dev_id generation logic in IPvlan") CC: David Miller CC: Eric Dumazet Signed-off-by: Mahesh Bandewar --- drivers/net/ipvlan/ipvlan_main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c index 92b221a03350..b5c390f0f2b3 100644 --- a/drivers/net/ipvlan/ipvlan_main.c +++ b/drivers/net/ipvlan/ipvlan_main.c @@ -550,6 +550,9 @@ static int ipvlan_link_new(struct net *src_net, struct net_device *dev, err = ida_simple_get(&port->ida, port->dev_id_start, 0xFFFE, GFP_KERNEL); if (err < 0) + err = ida_simple_get(&port->ida, 0x1, port->dev_id_start, + GFP_KERNEL); + if (err < 0) goto destroy_ipvlan_port; dev->dev_id = err; /* Increment id-base to the next slot for the future assignment */