From patchwork Tue Oct 13 01:15:23 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Arad, Ronen" X-Patchwork-Id: 529527 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 318ED140FD6 for ; Tue, 13 Oct 2015 12:15:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752855AbbJMBPp (ORCPT ); Mon, 12 Oct 2015 21:15:45 -0400 Received: from mga02.intel.com ([134.134.136.20]:33109 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752735AbbJMBPp (ORCPT ); Mon, 12 Oct 2015 21:15:45 -0400 Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP; 12 Oct 2015 18:15:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,676,1437462000"; d="scan'208";a="663043897" Received: from ronenara-mobl.amr.corp.intel.com (HELO onpss-fed21-vm.localdomain) ([10.252.129.241]) by orsmga003.jf.intel.com with ESMTP; 12 Oct 2015 18:15:44 -0700 From: Ronen Arad To: netdev@vger.kernel.org Cc: Ronen Arad Subject: [PATCH] netlink: trim skb to exact size to avoid MSG_TRUNC Date: Mon, 12 Oct 2015 18:15:23 -0700 Message-Id: <1444698923-13992-1-git-send-email-ronen.arad@intel.com> X-Mailer: git-send-email 2.1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The available room in the skb allocated in netlink_dump for iproute2 show requests (e.g. "ip link [show]", "bridge [-c] vlan show") should be trimmed to the exact size requested in order to avoid MSG_TRUNC flag set in netlink_recvmg. This was handled properly for small skb allocated when no interface has many VLANs configured. This patch applies the same logic to larger skbs which are allocated using the calculated min_dump_alloc size. Signed-off-by: Ronen Arad --- net/netlink/af_netlink.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 8f060d7..d628253 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -2817,9 +2817,13 @@ static int netlink_dump(struct sock *sk) skb_reserve(skb, skb_tailroom(skb) - nlk->max_recvmsg_len); } - if (!skb) + if (!skb) { skb = netlink_alloc_skb(sk, alloc_size, nlk->portid, GFP_KERNEL); + /* available room should be exact amount to avoid MSG_TRUNC */ + if (skb) + skb_reserve(skb, skb_tailroom(skb) - alloc_size); + } if (!skb) goto errout_skb; netlink_skb_set_owner_r(skb, sk);