Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/811474/?format=api
{ "id": 811474, "url": "http://patchwork.ozlabs.org/api/patches/811474/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1504865697-27274-3-git-send-email-liuhangbin@gmail.com/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1504865697-27274-3-git-send-email-liuhangbin@gmail.com>", "list_archive_url": null, "date": "2017-09-08T10:14:57", "name": "[iproute2,2/2] lib/libnetlink: update rtnl_talk to support malloc buff at run time", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "b2ecd791d4954d9d41fc9e8fe7365359835b1f40", "submitter": { "id": 15639, "url": "http://patchwork.ozlabs.org/api/people/15639/?format=api", "name": "Hangbin Liu", "email": "liuhangbin@gmail.com" }, "delegate": { "id": 389, "url": "http://patchwork.ozlabs.org/api/users/389/?format=api", "username": "shemminger", "first_name": "stephen", "last_name": "hemminger", "email": "shemminger@vyatta.com" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/1504865697-27274-3-git-send-email-liuhangbin@gmail.com/mbox/", "series": [ { "id": 2171, "url": "http://patchwork.ozlabs.org/api/series/2171/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=2171", "date": "2017-09-08T10:14:55", "name": "malloc correct buff at run time", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/2171/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/811474/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/811474/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"ayg6RiKU\"; dkim-atps=neutral" ], "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xpY9s4xp4z9s3T\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 8 Sep 2017 20:15:45 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1754578AbdIHKPn (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tFri, 8 Sep 2017 06:15:43 -0400", "from mail-pg0-f68.google.com ([74.125.83.68]:33518 \"EHLO\n\tmail-pg0-f68.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1752372AbdIHKPi (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Fri, 8 Sep 2017 06:15:38 -0400", "by mail-pg0-f68.google.com with SMTP id m9so1135657pgd.0\n\tfor <netdev@vger.kernel.org>; Fri, 08 Sep 2017 03:15:38 -0700 (PDT)", "from leo.usersys.redhat.com ([209.132.188.80])\n\tby smtp.gmail.com with ESMTPSA id\n\ti2sm3325822pfd.21.2017.09.08.03.15.34\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tFri, 08 Sep 2017 03:15:36 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20161025;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=WeSXFi3bKqtsgcgliUgwzuhGedypH5dI4g9GVU+9Bj4=;\n\tb=ayg6RiKU3mTGS+Bo7FQGjsZo8OD+SDZM+dGLSEDuyfmFIh0FbFU93ttrSTdmskV1/8\n\tIeQzbWO4T9k5UsmNwNi/Or7kJ4DiVZtUFnQwKzT0F+i1j2rqF//w4MB/5mH49g6lBMWR\n\tbDLMcyeZD5R9Juc8gYjMInGlkFz48ZObD9xQXR2RnxmVdUilwYGGF3kHIQFltUgT4xZ6\n\t299nNMjspgnyGmGSrYWHiil6Cf89fgm3IBKU9gpXQFKDnse8VAKjs73FaC4mryuUHhDn\n\tXyiNUEiOXehZL+3ZeBLcLMi9z+bujzzG1CejCrOom2gg7SbCO1bVs8+bA8EQvbAKMKkK\n\t5zRg==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=WeSXFi3bKqtsgcgliUgwzuhGedypH5dI4g9GVU+9Bj4=;\n\tb=S18d+7K5O5n1O05whYxT7/cbMpgTCcByi7gzXM0DcftIyJ6ZCPioKfSPmQNbUJtNCw\n\thSS6myjB6W77tNd6Ph2UXh/KrwJDHdHw7F/2zu3BqGGaVfbAahk4IZdfnUO8VK754Sf6\n\tkE2t2Kw9kRmmUZKgPYuj3Td/f9fSkyWnyKG99xd4l7lLbR5JSxqSqSNSTdSIWWLVV0UC\n\toLxOc9GU9pRisv1l4NQgG9YZudJ+J2hpTGZqZDlHs/D0jG2q0K+QSbeEh8j3XqQvj5bG\n\t4KvtQXxxUvprDlA46CQJ5nl+PRmtkZXyk+/KMWvk7KkprUVPEgHid4iSu0ClddefRoRO\n\t50Ug==", "X-Gm-Message-State": "AHPjjUhmo53+zgLLkpMJahH6+TSEv7i3vr2/ozvNAlrCivTug7BG3rqR\n\t5a8oNs505TGtO8jM", "X-Google-Smtp-Source": "ADKCNb5PedyZLwqe0hsH2GfysVfNbf+9ZlS1iWlh/6vGK81hwf/cKyOV0ii0J4gYWrMnRfTI3pA4rA==", "X-Received": "by 10.98.139.130 with SMTP id e2mr2537966pfl.316.1504865737072; \n\tFri, 08 Sep 2017 03:15:37 -0700 (PDT)", "From": "Hangbin Liu <liuhangbin@gmail.com>", "To": "netdev@vger.kernel.org", "Cc": "Stephen Hemminger <stephen@networkplumber.org>,\n\tMichal Kubecek <mkubecek@suse.cz>, Phil Sutter <phil@nwl.cc>,\n\tHangbin Liu <liuhangbin@gmail.com>", "Subject": "[PATCH iproute2 2/2] lib/libnetlink: update rtnl_talk to support\n\tmalloc buff at run time", "Date": "Fri, 8 Sep 2017 18:14:57 +0800", "Message-Id": "<1504865697-27274-3-git-send-email-liuhangbin@gmail.com>", "X-Mailer": "git-send-email 2.5.5", "In-Reply-To": "<1504865697-27274-1-git-send-email-liuhangbin@gmail.com>", "References": "<1504865697-27274-1-git-send-email-liuhangbin@gmail.com>", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "This is an update for 460c03f3f3cc (\"iplink: double the buffer size also in\niplink_get()\"). After update, we will not need to double the buffer size\nevery time when VFs number increased.\n\nWith call like rtnl_talk(&rth, &req.n, NULL, 0), we can simply remove the\nlength parameter.\n\nWith call like rtnl_talk(&rth, nlh, nlh, sizeof(req), I add a new variable\nanswer to avoid overwrite data in nlh, because it may has more info after\nnlh. also this will avoid nlh buffer not enough issue.\n\nSigned-off-by: Hangbin Liu <liuhangbin@gmail.com>\n---\n bridge/fdb.c | 2 +-\n bridge/link.c | 2 +-\n bridge/mdb.c | 2 +-\n bridge/vlan.c | 2 +-\n genl/ctrl.c | 14 ++++++++------\n include/libnetlink.h | 6 +++---\n ip/ipaddress.c | 5 +++--\n ip/ipaddrlabel.c | 4 ++--\n ip/ipfou.c | 4 ++--\n ip/ipila.c | 4 ++--\n ip/ipl2tp.c | 8 ++++----\n ip/iplink.c | 28 +++++++++++-----------------\n ip/iplink_vrf.c | 24 ++++++++----------------\n ip/ipmacsec.c | 2 +-\n ip/ipneigh.c | 2 +-\n ip/ipnetns.c | 13 +++++++------\n ip/ipntable.c | 2 +-\n ip/iproute.c | 20 +++++++++++---------\n ip/iprule.c | 7 ++++---\n ip/ipseg6.c | 7 ++++---\n ip/iptoken.c | 2 +-\n ip/link_gre.c | 7 ++++---\n ip/link_gre6.c | 7 ++++---\n ip/link_ip6tnl.c | 7 ++++---\n ip/link_iptnl.c | 7 ++++---\n ip/link_vti.c | 7 ++++---\n ip/link_vti6.c | 7 ++++---\n ip/tcp_metrics.c | 7 ++++---\n ip/xfrm_policy.c | 22 +++++++++++-----------\n ip/xfrm_state.c | 25 ++++++++++++-------------\n lib/libgenl.c | 5 +++--\n lib/libnetlink.c | 20 +++++++++-----------\n misc/ss.c | 2 +-\n tc/m_action.c | 9 ++++-----\n tc/tc_class.c | 2 +-\n tc/tc_filter.c | 7 ++++---\n tc/tc_qdisc.c | 2 +-\n 37 files changed, 151 insertions(+), 152 deletions(-)", "diff": "diff --git a/bridge/fdb.c b/bridge/fdb.c\nindex e5cebf9..807914f 100644\n--- a/bridge/fdb.c\n+++ b/bridge/fdb.c\n@@ -535,7 +535,7 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv)\n \t\treturn -1;\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn -1;\n \n \treturn 0;\ndiff --git a/bridge/link.c b/bridge/link.c\nindex 93472ad..cc29a2a 100644\n--- a/bridge/link.c\n+++ b/bridge/link.c\n@@ -426,7 +426,7 @@ static int brlink_modify(int argc, char **argv)\n \t\taddattr_nest_end(&req.n, nest);\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn -1;\n \n \treturn 0;\ndiff --git a/bridge/mdb.c b/bridge/mdb.c\nindex e60ff3e..fbd8184 100644\n--- a/bridge/mdb.c\n+++ b/bridge/mdb.c\n@@ -298,7 +298,7 @@ static int mdb_modify(int cmd, int flags, int argc, char **argv)\n \tentry.vid = vid;\n \taddattr_l(&req.n, sizeof(req), MDBA_SET_ENTRY, &entry, sizeof(entry));\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn -1;\n \n \treturn 0;\ndiff --git a/bridge/vlan.c b/bridge/vlan.c\nindex ebcdace..5d68359 100644\n--- a/bridge/vlan.c\n+++ b/bridge/vlan.c\n@@ -133,7 +133,7 @@ static int vlan_modify(int cmd, int argc, char **argv)\n \n \taddattr_nest_end(&req.n, afspec);\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn -1;\n \n \treturn 0;\ndiff --git a/genl/ctrl.c b/genl/ctrl.c\nindex 448988e..699657b 100644\n--- a/genl/ctrl.c\n+++ b/genl/ctrl.c\n@@ -55,6 +55,7 @@ int genl_ctrl_resolve_family(const char *family)\n \t};\n \tstruct nlmsghdr *nlh = &req.n;\n \tstruct genlmsghdr *ghdr = &req.g;\n+\tstruct nlmsghdr *answer = NULL;\n \n \tif (rtnl_open_byproto(&rth, 0, NETLINK_GENERIC) < 0) {\n \t\tfprintf(stderr, \"Cannot open generic netlink socket\\n\");\n@@ -63,19 +64,19 @@ int genl_ctrl_resolve_family(const char *family)\n \n \taddattr_l(nlh, 128, CTRL_ATTR_FAMILY_NAME, family, strlen(family) + 1);\n \n-\tif (rtnl_talk(&rth, nlh, nlh, sizeof(req)) < 0) {\n+\tif (rtnl_talk(&rth, nlh, &answer) < 0) {\n \t\tfprintf(stderr, \"Error talking to the kernel\\n\");\n \t\tgoto errout;\n \t}\n \n \t{\n \t\tstruct rtattr *tb[CTRL_ATTR_MAX + 1];\n-\t\tint len = nlh->nlmsg_len;\n+\t\tint len = answer->nlmsg_len;\n \t\tstruct rtattr *attrs;\n \n-\t\tif (nlh->nlmsg_type != GENL_ID_CTRL) {\n+\t\tif (answer->nlmsg_type != GENL_ID_CTRL) {\n \t\t\tfprintf(stderr, \"Not a controller message, nlmsg_len=%d \"\n-\t\t\t\t\"nlmsg_type=0x%x\\n\", nlh->nlmsg_len, nlh->nlmsg_type);\n+\t\t\t\t\"nlmsg_type=0x%x\\n\", answer->nlmsg_len, answer->nlmsg_type);\n \t\t\tgoto errout;\n \t\t}\n \n@@ -299,6 +300,7 @@ static int ctrl_list(int cmd, int argc, char **argv)\n \t\t.g.cmd = CTRL_CMD_GETFAMILY,\n \t};\n \tstruct nlmsghdr *nlh = &req.n;\n+\tstruct nlmsghdr *answer = NULL;\n \n \tif (rtnl_open_byproto(&rth, 0, NETLINK_GENERIC) < 0) {\n \t\tfprintf(stderr, \"Cannot open generic netlink socket\\n\");\n@@ -331,12 +333,12 @@ static int ctrl_list(int cmd, int argc, char **argv)\n \t\t\tgoto ctrl_done;\n \t\t}\n \n-\t\tif (rtnl_talk(&rth, nlh, nlh, sizeof(req)) < 0) {\n+\t\tif (rtnl_talk(&rth, nlh, &answer) < 0) {\n \t\t\tfprintf(stderr, \"Error talking to the kernel\\n\");\n \t\t\tgoto ctrl_done;\n \t\t}\n \n-\t\tif (print_ctrl2(NULL, nlh, (void *) stdout) < 0) {\n+\t\tif (print_ctrl2(NULL, answer, (void *) stdout) < 0) {\n \t\t\tfprintf(stderr, \"Dump terminated\\n\");\n \t\t\tgoto ctrl_done;\n \t\t}\ndiff --git a/include/libnetlink.h b/include/libnetlink.h\nindex 69257f0..77b6260 100644\n--- a/include/libnetlink.h\n+++ b/include/libnetlink.h\n@@ -93,13 +93,13 @@ int rtnl_dump_filter_nc(struct rtnl_handle *rth,\n #define rtnl_dump_filter(rth, filter, arg) \\\n \trtnl_dump_filter_nc(rth, filter, arg, 0)\n int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n-\t struct nlmsghdr *answer, size_t len)\n+\t struct nlmsghdr **answer)\n \t__attribute__((warn_unused_result));\n int rtnl_talk_extack(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n-\t struct nlmsghdr *answer, size_t len, nl_ext_ack_fn_t errfn)\n+\t struct nlmsghdr **answer, nl_ext_ack_fn_t errfn)\n \t__attribute__((warn_unused_result));\n int rtnl_talk_suppress_rtnl_errmsg(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n-\t\t\t\t struct nlmsghdr *answer, size_t len)\n+\t\t\t\t struct nlmsghdr **answer)\n \t__attribute__((warn_unused_result));\n int rtnl_send(struct rtnl_handle *rth, const void *buf, int)\n \t__attribute__((warn_unused_result));\ndiff --git a/ip/ipaddress.c b/ip/ipaddress.c\nindex c9312f0..f84e591 100644\n--- a/ip/ipaddress.c\n+++ b/ip/ipaddress.c\n@@ -1385,12 +1385,13 @@ static int restore_handler(const struct sockaddr_nl *nl,\n \t\t\t struct nlmsghdr *n, void *arg)\n {\n \tint ret;\n+\tstruct nlmsghdr *answer = NULL;\n \n \tn->nlmsg_flags |= NLM_F_REQUEST | NLM_F_CREATE | NLM_F_ACK;\n \n \tll_init_map(&rth);\n \n-\tret = rtnl_talk(&rth, n, n, sizeof(*n));\n+\tret = rtnl_talk(&rth, n, &answer);\n \tif ((ret < 0) && (errno == EEXIST))\n \t\tret = 0;\n \n@@ -2076,7 +2077,7 @@ static int ipaddr_modify(int cmd, int flags, int argc, char **argv)\n \t\treturn -1;\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\ndiff --git a/ip/ipaddrlabel.c b/ip/ipaddrlabel.c\nindex 1d324da..6ea9bff 100644\n--- a/ip/ipaddrlabel.c\n+++ b/ip/ipaddrlabel.c\n@@ -176,7 +176,7 @@ static int ipaddrlabel_modify(int cmd, int argc, char **argv)\n \tif (req.ifal.ifal_family == AF_UNSPEC)\n \t\treq.ifal.ifal_family = AF_INET6;\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\n@@ -203,7 +203,7 @@ static int flush_addrlabel(const struct sockaddr_nl *who, struct nlmsghdr *n, vo\n \t\tif (rtnl_open(&rth2, 0) < 0)\n \t\t\treturn -1;\n \n-\t\tif (rtnl_talk(&rth2, n, NULL, 0) < 0)\n+\t\tif (rtnl_talk(&rth2, n, NULL) < 0)\n \t\t\treturn -2;\n \n \t\trtnl_close(&rth2);\ndiff --git a/ip/ipfou.c b/ip/ipfou.c\nindex 00dbe15..23000dc 100644\n--- a/ip/ipfou.c\n+++ b/ip/ipfou.c\n@@ -116,7 +116,7 @@ static int do_add(int argc, char **argv)\n \n \tfou_parse_opt(argc, argv, &req.n, true);\n \n-\tif (rtnl_talk(&genl_rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&genl_rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\n@@ -128,7 +128,7 @@ static int do_del(int argc, char **argv)\n \n \tfou_parse_opt(argc, argv, &req.n, false);\n \n-\tif (rtnl_talk(&genl_rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&genl_rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\ndiff --git a/ip/ipila.c b/ip/ipila.c\nindex 843cc16..0403fc4 100644\n--- a/ip/ipila.c\n+++ b/ip/ipila.c\n@@ -220,7 +220,7 @@ static int do_add(int argc, char **argv)\n \n \tila_parse_opt(argc, argv, &req.n, true);\n \n-\tif (rtnl_talk(&genl_rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&genl_rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\n@@ -232,7 +232,7 @@ static int do_del(int argc, char **argv)\n \n \tila_parse_opt(argc, argv, &req.n, false);\n \n-\tif (rtnl_talk(&genl_rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&genl_rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\ndiff --git a/ip/ipl2tp.c b/ip/ipl2tp.c\nindex 88664c9..742adbe 100644\n--- a/ip/ipl2tp.c\n+++ b/ip/ipl2tp.c\n@@ -129,7 +129,7 @@ static int create_tunnel(struct l2tp_parm *p)\n \t\t\taddattr(&req.n, 1024, L2TP_ATTR_UDP_ZERO_CSUM6_RX);\n \t}\n \n-\tif (rtnl_talk(&genl_rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&genl_rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\n@@ -142,7 +142,7 @@ static int delete_tunnel(struct l2tp_parm *p)\n \n \taddattr32(&req.n, 128, L2TP_ATTR_CONN_ID, p->tunnel_id);\n \n-\tif (rtnl_talk(&genl_rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&genl_rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\n@@ -185,7 +185,7 @@ static int create_session(struct l2tp_parm *p)\n \tif (p->ifname && p->ifname[0])\n \t\taddattrstrz(&req.n, 1024, L2TP_ATTR_IFNAME, p->ifname);\n \n-\tif (rtnl_talk(&genl_rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&genl_rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\n@@ -198,7 +198,7 @@ static int delete_session(struct l2tp_parm *p)\n \n \taddattr32(&req.n, 1024, L2TP_ATTR_CONN_ID, p->tunnel_id);\n \taddattr32(&req.n, 1024, L2TP_ATTR_SESSION_ID, p->session_id);\n-\tif (rtnl_talk(&genl_rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&genl_rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\ndiff --git a/ip/iplink.c b/ip/iplink.c\nindex 72c3479..e078d2a 100644\n--- a/ip/iplink.c\n+++ b/ip/iplink.c\n@@ -248,16 +248,18 @@ static int nl_get_ll_addr_len(unsigned int dev_index)\n \t\t\t.ifi_index = dev_index,\n \t\t}\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct rtattr *tb[IFLA_MAX+1];\n \n-\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0)\n+\tif (rtnl_talk(&rth, &req.n, &answer) < 0)\n \t\treturn -1;\n \n-\tlen = req.n.nlmsg_len - NLMSG_LENGTH(sizeof(req.i));\n+\tlen = answer->nlmsg_len - NLMSG_LENGTH(sizeof(struct ifinfomsg));\n \tif (len < 0)\n \t\treturn -1;\n \n-\tparse_rtattr_flags(tb, IFLA_MAX, IFLA_RTA(&req.i), len, NLA_F_NESTED);\n+\tparse_rtattr_flags(tb, IFLA_MAX, IFLA_RTA(NLMSG_DATA(answer)),\n+\t\t\t len, NLA_F_NESTED);\n \tif (!tb[IFLA_ADDRESS])\n \t\treturn -1;\n \n@@ -912,7 +914,7 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv)\n \n \t\t\treq.i.ifi_index = 0;\n \t\t\taddattr32(&req.n, sizeof(req), IFLA_GROUP, group);\n-\t\t\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\t\t\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\t\t\treturn -2;\n \t\t\treturn 0;\n \t\t}\n@@ -1007,7 +1009,7 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv)\n \t\treturn -1;\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\n@@ -1022,10 +1024,7 @@ int iplink_get(unsigned int flags, char *name, __u32 filt_mask)\n \t\t.n.nlmsg_type = RTM_GETLINK,\n \t\t.i.ifi_family = preferred_family,\n \t};\n-\tstruct {\n-\t\tstruct nlmsghdr n;\n-\t\tchar buf[32768];\n-\t} answer;\n+\tstruct nlmsghdr *answer = NULL;\n \n \tif (name) {\n \t\tlen = strlen(name) + 1;\n@@ -1038,18 +1037,13 @@ int iplink_get(unsigned int flags, char *name, __u32 filt_mask)\n \t}\n \taddattr32(&req.n, sizeof(req), IFLA_EXT_MASK, filt_mask);\n \n-\tif (rtnl_talk(&rth, &req.n, &answer.n, sizeof(answer)) < 0)\n-\t\treturn -2;\n-\tif (answer.n.nlmsg_len > sizeof(answer.buf)) {\n-\t\tfprintf(stderr, \"Message truncated from %u to %lu\\n\",\n-\t\t\tanswer.n.nlmsg_len, sizeof(answer.buf));\n+\tif (rtnl_talk(&rth, &req.n, &answer) < 0)\n \t\treturn -2;\n-\t}\n \n \tif (brief)\n-\t\tprint_linkinfo_brief(NULL, &answer.n, stdout, NULL);\n+\t\tprint_linkinfo_brief(NULL, answer, stdout, NULL);\n \telse\n-\t\tprint_linkinfo(NULL, &answer.n, stdout);\n+\t\tprint_linkinfo(NULL, answer, stdout);\n \n \treturn 0;\n }\ndiff --git a/ip/iplink_vrf.c b/ip/iplink_vrf.c\nindex 2b85a3a..6dbc8b4 100644\n--- a/ip/iplink_vrf.c\n+++ b/ip/iplink_vrf.c\n@@ -114,10 +114,7 @@ __u32 ipvrf_get_table(const char *name)\n \t\t\t.ifi_family = preferred_family,\n \t\t},\n \t};\n-\tstruct {\n-\t\tstruct nlmsghdr n;\n-\t\tchar buf[8192];\n-\t} answer;\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct rtattr *tb[IFLA_MAX+1];\n \tstruct rtattr *li[IFLA_INFO_MAX+1];\n \tstruct rtattr *vrf_attr[IFLA_VRF_MAX + 1];\n@@ -127,8 +124,7 @@ __u32 ipvrf_get_table(const char *name)\n \n \taddattr_l(&req.n, sizeof(req), IFLA_IFNAME, name, strlen(name) + 1);\n \n-\tif (rtnl_talk_suppress_rtnl_errmsg(&rth, &req.n,\n-\t\t\t\t\t &answer.n, sizeof(answer)) < 0) {\n+\tif (rtnl_talk_suppress_rtnl_errmsg(&rth, &req.n, &answer) < 0) {\n \t\t/* special case \"default\" vrf to be the main table */\n \t\tif (errno == ENODEV && !strcmp(name, \"default\"))\n \t\t\tif (rtnl_rttable_a2n(&tb_id, \"main\"))\n@@ -138,8 +134,8 @@ __u32 ipvrf_get_table(const char *name)\n \t\treturn tb_id;\n \t}\n \n-\tifi = NLMSG_DATA(&answer.n);\n-\tlen = answer.n.nlmsg_len - NLMSG_LENGTH(sizeof(*ifi));\n+\tifi = NLMSG_DATA(answer);\n+\tlen = answer->nlmsg_len - NLMSG_LENGTH(sizeof(*ifi));\n \tif (len < 0) {\n \t\tfprintf(stderr, \"BUG: Invalid response to link query.\\n\");\n \t\treturn 0;\n@@ -184,10 +180,7 @@ int name_is_vrf(const char *name)\n \t\t\t.ifi_family = preferred_family,\n \t\t},\n \t};\n-\tstruct {\n-\t\tstruct nlmsghdr n;\n-\t\tchar buf[8192];\n-\t} answer;\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct rtattr *tb[IFLA_MAX+1];\n \tstruct rtattr *li[IFLA_INFO_MAX+1];\n \tstruct ifinfomsg *ifi;\n@@ -195,12 +188,11 @@ int name_is_vrf(const char *name)\n \n \taddattr_l(&req.n, sizeof(req), IFLA_IFNAME, name, strlen(name) + 1);\n \n-\tif (rtnl_talk_suppress_rtnl_errmsg(&rth, &req.n,\n-\t\t\t\t\t &answer.n, sizeof(answer)) < 0)\n+\tif (rtnl_talk_suppress_rtnl_errmsg(&rth, &req.n, &answer) < 0)\n \t\treturn 0;\n \n-\tifi = NLMSG_DATA(&answer.n);\n-\tlen = answer.n.nlmsg_len - NLMSG_LENGTH(sizeof(*ifi));\n+\tifi = NLMSG_DATA(answer);\n+\tlen = answer->nlmsg_len - NLMSG_LENGTH(sizeof(*ifi));\n \tif (len < 0) {\n \t\tfprintf(stderr, \"BUG: Invalid response to link query.\\n\");\n \t\treturn 0;\ndiff --git a/ip/ipmacsec.c b/ip/ipmacsec.c\nindex aa89a00..9a2d0eb 100644\n--- a/ip/ipmacsec.c\n+++ b/ip/ipmacsec.c\n@@ -421,7 +421,7 @@ static int do_modify_nl(enum cmd c, enum macsec_nl_commands cmd, int ifindex,\n \taddattr_nest_end(&req.n, attr_sa);\n \n talk:\n-\tif (rtnl_talk(&genl_rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&genl_rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\ndiff --git a/ip/ipneigh.c b/ip/ipneigh.c\nindex 9c38a60..32f2d55 100644\n--- a/ip/ipneigh.c\n+++ b/ip/ipneigh.c\n@@ -184,7 +184,7 @@ static int ipneigh_modify(int cmd, int flags, int argc, char **argv)\n \t\treturn -1;\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\texit(2);\n \n \treturn 0;\ndiff --git a/ip/ipnetns.c b/ip/ipnetns.c\nindex afb4978..628dfb1 100644\n--- a/ip/ipnetns.c\n+++ b/ip/ipnetns.c\n@@ -95,12 +95,13 @@ static int get_netnsid_from_name(const char *name)\n \t\tstruct nlmsghdr n;\n \t\tstruct rtgenmsg g;\n \t\tchar buf[1024];\n-\t} answer, req = {\n+\t} req = {\n \t\t.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtgenmsg)),\n \t\t.n.nlmsg_flags = NLM_F_REQUEST,\n \t\t.n.nlmsg_type = RTM_GETNSID,\n \t\t.g.rtgen_family = AF_UNSPEC,\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct rtattr *tb[NETNSA_MAX + 1];\n \tstruct rtgenmsg *rthdr;\n \tint len, fd;\n@@ -110,18 +111,18 @@ static int get_netnsid_from_name(const char *name)\n \t\treturn fd;\n \n \taddattr32(&req.n, 1024, NETNSA_FD, fd);\n-\tif (rtnl_talk(&rtnsh, &req.n, &answer.n, sizeof(answer)) < 0) {\n+\tif (rtnl_talk(&rtnsh, &req.n, &answer) < 0) {\n \t\tclose(fd);\n \t\treturn -2;\n \t}\n \tclose(fd);\n \n \t/* Validate message and parse attributes */\n-\tif (answer.n.nlmsg_type == NLMSG_ERROR)\n+\tif (answer->nlmsg_type == NLMSG_ERROR)\n \t\treturn -1;\n \n-\trthdr = NLMSG_DATA(&answer.n);\n-\tlen = answer.n.nlmsg_len - NLMSG_SPACE(sizeof(*rthdr));\n+\trthdr = NLMSG_DATA(answer);\n+\tlen = answer->nlmsg_len - NLMSG_SPACE(sizeof(*rthdr));\n \tif (len < 0)\n \t\treturn -1;\n \n@@ -689,7 +690,7 @@ static int set_netnsid_from_name(const char *name, int nsid)\n \n \taddattr32(&req.n, 1024, NETNSA_FD, fd);\n \taddattr32(&req.n, 1024, NETNSA_NSID, nsid);\n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\terr = -2;\n \n \tclose(fd);\ndiff --git a/ip/ipntable.c b/ip/ipntable.c\nindex 88236ce..2f72c98 100644\n--- a/ip/ipntable.c\n+++ b/ip/ipntable.c\n@@ -304,7 +304,7 @@ static int ipntable_modify(int cmd, int flags, int argc, char **argv)\n \t\t\t RTA_PAYLOAD(parms_rta));\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\texit(2);\n \n \treturn 0;\ndiff --git a/ip/iproute.c b/ip/iproute.c\nindex 83fd70c..aa929d9 100644\n--- a/ip/iproute.c\n+++ b/ip/iproute.c\n@@ -1298,7 +1298,7 @@ static int iproute_modify(int cmd, unsigned int flags, int argc, char **argv)\n \tif (!type_ok && req.r.rtm_family == AF_MPLS)\n \t\treq.r.rtm_type = RTN_UNICAST;\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\n@@ -1678,6 +1678,7 @@ static int iproute_get(int argc, char **argv)\n \t};\n \tchar *idev = NULL;\n \tchar *odev = NULL;\n+\tstruct nlmsghdr *answer = NULL;\n \tint connected = 0;\n \tint fib_match = 0;\n \tint from_ok = 0;\n@@ -1798,20 +1799,20 @@ static int iproute_get(int argc, char **argv)\n \tif (fib_match)\n \t\treq.r.rtm_flags |= RTM_F_FIB_MATCH;\n \n-\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0)\n+\tif (rtnl_talk(&rth, &req.n, &answer) < 0)\n \t\treturn -2;\n \n \tif (connected && !from_ok) {\n-\t\tstruct rtmsg *r = NLMSG_DATA(&req.n);\n-\t\tint len = req.n.nlmsg_len;\n+\t\tstruct rtmsg *r = NLMSG_DATA(answer);\n+\t\tint len = answer->nlmsg_len;\n \t\tstruct rtattr *tb[RTA_MAX+1];\n \n-\t\tif (print_route(NULL, &req.n, (void *)stdout) < 0) {\n+\t\tif (print_route(NULL, answer, (void *)stdout) < 0) {\n \t\t\tfprintf(stderr, \"An error :-)\\n\");\n \t\t\treturn -1;\n \t\t}\n \n-\t\tif (req.n.nlmsg_type != RTM_NEWROUTE) {\n+\t\tif (answer->nlmsg_type != RTM_NEWROUTE) {\n \t\t\tfprintf(stderr, \"Not a route?\\n\");\n \t\t\treturn -1;\n \t\t}\n@@ -1841,11 +1842,11 @@ static int iproute_get(int argc, char **argv)\n \t\treq.n.nlmsg_flags = NLM_F_REQUEST;\n \t\treq.n.nlmsg_type = RTM_GETROUTE;\n \n-\t\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0)\n+\t\tif (rtnl_talk(&rth, &req.n, &answer) < 0)\n \t\t\treturn -2;\n \t}\n \n-\tif (print_route(NULL, &req.n, (void *)stdout) < 0) {\n+\tif (print_route(NULL, answer, (void *)stdout) < 0) {\n \t\tfprintf(stderr, \"An error :-)\\n\");\n \t\treturn -1;\n \t}\n@@ -1869,6 +1870,7 @@ static int restore_handler(const struct sockaddr_nl *nl,\n \tstruct rtattr *tb[RTA_MAX+1];\n \tint len = n->nlmsg_len - NLMSG_LENGTH(sizeof(*r));\n \tint ret, prio = *(int *)arg;\n+\tstruct nlmsghdr *answer = NULL;\n \n \tparse_rtattr(tb, RTA_MAX, RTM_RTA(r), len);\n \n@@ -1893,7 +1895,7 @@ restore:\n \n \tll_init_map(&rth);\n \n-\tret = rtnl_talk(&rth, n, n, sizeof(*n));\n+\tret = rtnl_talk(&rth, n, &answer);\n \tif ((ret < 0) && (errno == EEXIST))\n \t\tret = 0;\n \ndiff --git a/ip/iprule.c b/ip/iprule.c\nindex 8313138..872cfd2 100644\n--- a/ip/iprule.c\n+++ b/ip/iprule.c\n@@ -393,7 +393,7 @@ static int flush_rule(const struct sockaddr_nl *who, struct nlmsghdr *n,\n \t\tif (rtnl_open(&rth2, 0) < 0)\n \t\t\treturn -1;\n \n-\t\tif (rtnl_talk(&rth2, n, NULL, 0) < 0)\n+\t\tif (rtnl_talk(&rth2, n, NULL) < 0)\n \t\t\treturn -2;\n \n \t\trtnl_close(&rth2);\n@@ -548,12 +548,13 @@ static int restore_handler(const struct sockaddr_nl *nl,\n \t\t\t struct nlmsghdr *n, void *arg)\n {\n \tint ret;\n+\tstruct nlmsghdr *answer = NULL;\n \n \tn->nlmsg_flags |= NLM_F_REQUEST | NLM_F_CREATE | NLM_F_ACK;\n \n \tll_init_map(&rth);\n \n-\tret = rtnl_talk(&rth, n, n, sizeof(*n));\n+\tret = rtnl_talk(&rth, n, &answer);\n \tif ((ret < 0) && (errno == EEXIST))\n \t\tret = 0;\n \n@@ -760,7 +761,7 @@ static int iprule_modify(int cmd, int argc, char **argv)\n \tif (!table_ok && cmd == RTM_NEWRULE)\n \t\treq.r.rtm_table = RT_TABLE_MAIN;\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\ndiff --git a/ip/ipseg6.c b/ip/ipseg6.c\nindex a8f5c69..6d7b1d0 100644\n--- a/ip/ipseg6.c\n+++ b/ip/ipseg6.c\n@@ -125,6 +125,7 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,\n static int seg6_do_cmd(void)\n {\n \tSEG6_REQUEST(req, 1024, opts.cmd, NLM_F_REQUEST);\n+\tstruct nlmsghdr *answer = NULL;\n \tint repl = 0, dump = 0;\n \n \tif (genl_family < 0) {\n@@ -163,12 +164,12 @@ static int seg6_do_cmd(void)\n \t}\n \n \tif (!repl && !dump) {\n-\t\tif (rtnl_talk(&grth, &req.n, NULL, 0) < 0)\n+\t\tif (rtnl_talk(&grth, &req.n, NULL) < 0)\n \t\t\treturn -1;\n \t} else if (repl) {\n-\t\tif (rtnl_talk(&grth, &req.n, &req.n, sizeof(req)) < 0)\n+\t\tif (rtnl_talk(&grth, &req.n, &answer) < 0)\n \t\t\treturn -2;\n-\t\tif (process_msg(NULL, &req.n, stdout) < 0) {\n+\t\tif (process_msg(NULL, answer, stdout) < 0) {\n \t\t\tfprintf(stderr, \"Error parsing reply\\n\");\n \t\t\texit(1);\n \t\t}\ndiff --git a/ip/iptoken.c b/ip/iptoken.c\nindex 1869f76..0528bad 100644\n--- a/ip/iptoken.c\n+++ b/ip/iptoken.c\n@@ -166,7 +166,7 @@ static int iptoken_set(int argc, char **argv, bool delete)\n \taddattr_nest_end(&req.n, afs6);\n \taddattr_nest_end(&req.n, afs);\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn -2;\n \n \treturn 0;\ndiff --git a/ip/link_gre.c b/ip/link_gre.c\nindex c2ec5f2..21131ab 100644\n--- a/ip/link_gre.c\n+++ b/ip/link_gre.c\n@@ -75,6 +75,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,\n \t\t.i.ifi_family = preferred_family,\n \t\t.i.ifi_index = ifi->ifi_index,\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct rtattr *tb[IFLA_MAX + 1];\n \tstruct rtattr *linkinfo[IFLA_INFO_MAX+1];\n \tstruct rtattr *greinfo[IFLA_GRE_MAX + 1];\n@@ -98,19 +99,19 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,\n \t__u32 fwmark = 0;\n \n \tif (!(n->nlmsg_flags & NLM_F_CREATE)) {\n-\t\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0) {\n+\t\tif (rtnl_talk(&rth, &req.n, &answer) < 0) {\n get_failed:\n \t\t\tfprintf(stderr,\n \t\t\t\t\"Failed to get existing tunnel info.\\n\");\n \t\t\treturn -1;\n \t\t}\n \n-\t\tlen = req.n.nlmsg_len;\n+\t\tlen = answer->nlmsg_len;\n \t\tlen -= NLMSG_LENGTH(sizeof(*ifi));\n \t\tif (len < 0)\n \t\t\tgoto get_failed;\n \n-\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(&req.i), len);\n+\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(answer + sizeof(struct nlmsghdr)), len);\n \n \t\tif (!tb[IFLA_LINKINFO])\n \t\t\tgoto get_failed;\ndiff --git a/ip/link_gre6.c b/ip/link_gre6.c\nindex 78b5215..98e689e 100644\n--- a/ip/link_gre6.c\n+++ b/ip/link_gre6.c\n@@ -86,6 +86,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,\n \t\t.i.ifi_family = preferred_family,\n \t\t.i.ifi_index = ifi->ifi_index,\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct rtattr *tb[IFLA_MAX + 1];\n \tstruct rtattr *linkinfo[IFLA_INFO_MAX+1];\n \tstruct rtattr *greinfo[IFLA_GRE_MAX + 1];\n@@ -108,19 +109,19 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,\n \t__u32 fwmark = 0;\n \n \tif (!(n->nlmsg_flags & NLM_F_CREATE)) {\n-\t\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0) {\n+\t\tif (rtnl_talk(&rth, &req.n, &answer) < 0) {\n get_failed:\n \t\t\tfprintf(stderr,\n \t\t\t\t\"Failed to get existing tunnel info.\\n\");\n \t\t\treturn -1;\n \t\t}\n \n-\t\tlen = req.n.nlmsg_len;\n+\t\tlen = answer->nlmsg_len;\n \t\tlen -= NLMSG_LENGTH(sizeof(*ifi));\n \t\tif (len < 0)\n \t\t\tgoto get_failed;\n \n-\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(&req.i), len);\n+\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(NLMSG_DATA(answer)), len);\n \n \t\tif (!tb[IFLA_LINKINFO])\n \t\t\tgoto get_failed;\ndiff --git a/ip/link_ip6tnl.c b/ip/link_ip6tnl.c\nindex 505fb47..19e0ca6 100644\n--- a/ip/link_ip6tnl.c\n+++ b/ip/link_ip6tnl.c\n@@ -83,6 +83,7 @@ static int ip6tunnel_parse_opt(struct link_util *lu, int argc, char **argv,\n \t\t.i.ifi_family = preferred_family,\n \t\t.i.ifi_index = ifi->ifi_index,\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct rtattr *tb[IFLA_MAX + 1];\n \tstruct rtattr *linkinfo[IFLA_INFO_MAX+1];\n \tstruct rtattr *iptuninfo[IFLA_IPTUN_MAX + 1];\n@@ -103,19 +104,19 @@ static int ip6tunnel_parse_opt(struct link_util *lu, int argc, char **argv,\n \t__u32 fwmark = 0;\n \n \tif (!(n->nlmsg_flags & NLM_F_CREATE)) {\n-\t\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0) {\n+\t\tif (rtnl_talk(&rth, &req.n, &answer) < 0) {\n get_failed:\n \t\t\tfprintf(stderr,\n \t\t\t\t\"Failed to get existing tunnel info.\\n\");\n \t\t\treturn -1;\n \t\t}\n \n-\t\tlen = req.n.nlmsg_len;\n+\t\tlen = answer->nlmsg_len;\n \t\tlen -= NLMSG_LENGTH(sizeof(*ifi));\n \t\tif (len < 0)\n \t\t\tgoto get_failed;\n \n-\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(&req.i), len);\n+\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(NLMSG_DATA(answer)), len);\n \n \t\tif (!tb[IFLA_LINKINFO])\n \t\t\tgoto get_failed;\ndiff --git a/ip/link_iptnl.c b/ip/link_iptnl.c\nindex d24e737..0ea957b 100644\n--- a/ip/link_iptnl.c\n+++ b/ip/link_iptnl.c\n@@ -84,6 +84,7 @@ static int iptunnel_parse_opt(struct link_util *lu, int argc, char **argv,\n \t\t.i.ifi_family = preferred_family,\n \t\t.i.ifi_index = ifi->ifi_index,\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct rtattr *tb[IFLA_MAX + 1];\n \tstruct rtattr *linkinfo[IFLA_INFO_MAX+1];\n \tstruct rtattr *iptuninfo[IFLA_IPTUN_MAX + 1];\n@@ -108,19 +109,19 @@ static int iptunnel_parse_opt(struct link_util *lu, int argc, char **argv,\n \t__u32 fwmark = 0;\n \n \tif (!(n->nlmsg_flags & NLM_F_CREATE)) {\n-\t\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0) {\n+\t\tif (rtnl_talk(&rth, &req.n, &answer) < 0) {\n get_failed:\n \t\t\tfprintf(stderr,\n \t\t\t\t\"Failed to get existing tunnel info.\\n\");\n \t\t\treturn -1;\n \t\t}\n \n-\t\tlen = req.n.nlmsg_len;\n+\t\tlen = answer->nlmsg_len;\n \t\tlen -= NLMSG_LENGTH(sizeof(*ifi));\n \t\tif (len < 0)\n \t\t\tgoto get_failed;\n \n-\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(&req.i), len);\n+\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(NLMSG_DATA(answer)), len);\n \n \t\tif (!tb[IFLA_LINKINFO])\n \t\t\tgoto get_failed;\ndiff --git a/ip/link_vti.c b/ip/link_vti.c\nindex 3ffecfa..de15b4a 100644\n--- a/ip/link_vti.c\n+++ b/ip/link_vti.c\n@@ -61,6 +61,7 @@ static int vti_parse_opt(struct link_util *lu, int argc, char **argv,\n \t\t.i.ifi_family = preferred_family,\n \t\t.i.ifi_index = ifi->ifi_index,\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct rtattr *tb[IFLA_MAX + 1];\n \tstruct rtattr *linkinfo[IFLA_INFO_MAX+1];\n \tstruct rtattr *vtiinfo[IFLA_VTI_MAX + 1];\n@@ -73,19 +74,19 @@ static int vti_parse_opt(struct link_util *lu, int argc, char **argv,\n \tint len;\n \n \tif (!(n->nlmsg_flags & NLM_F_CREATE)) {\n-\t\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0) {\n+\t\tif (rtnl_talk(&rth, &req.n, &answer) < 0) {\n get_failed:\n \t\t\tfprintf(stderr,\n \t\t\t\t\"Failed to get existing tunnel info.\\n\");\n \t\t\treturn -1;\n \t\t}\n \n-\t\tlen = req.n.nlmsg_len;\n+\t\tlen = answer->nlmsg_len;\n \t\tlen -= NLMSG_LENGTH(sizeof(*ifi));\n \t\tif (len < 0)\n \t\t\tgoto get_failed;\n \n-\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(&req.i), len);\n+\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(NLMSG_DATA(answer)), len);\n \n \t\tif (!tb[IFLA_LINKINFO])\n \t\t\tgoto get_failed;\ndiff --git a/ip/link_vti6.c b/ip/link_vti6.c\nindex 6ea1fc2..663ee03 100644\n--- a/ip/link_vti6.c\n+++ b/ip/link_vti6.c\n@@ -56,6 +56,7 @@ static int vti6_parse_opt(struct link_util *lu, int argc, char **argv,\n \t\t.i.ifi_family = preferred_family,\n \t\t.i.ifi_index = ifi->ifi_index,\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct rtattr *tb[IFLA_MAX + 1];\n \tstruct rtattr *linkinfo[IFLA_INFO_MAX+1];\n \tstruct rtattr *vtiinfo[IFLA_VTI_MAX + 1];\n@@ -68,19 +69,19 @@ static int vti6_parse_opt(struct link_util *lu, int argc, char **argv,\n \tint len;\n \n \tif (!(n->nlmsg_flags & NLM_F_CREATE)) {\n-\t\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0) {\n+\t\tif (rtnl_talk(&rth, &req.n, &answer) < 0) {\n get_failed:\n \t\t\tfprintf(stderr,\n \t\t\t\t\"Failed to get existing tunnel info.\\n\");\n \t\t\treturn -1;\n \t\t}\n \n-\t\tlen = req.n.nlmsg_len;\n+\t\tlen = answer->nlmsg_len;\n \t\tlen -= NLMSG_LENGTH(sizeof(*ifi));\n \t\tif (len < 0)\n \t\t\tgoto get_failed;\n \n-\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(&req.i), len);\n+\t\tparse_rtattr(tb, IFLA_MAX, IFLA_RTA(NLMSG_DATA(answer)), len);\n \n \t\tif (!tb[IFLA_LINKINFO])\n \t\t\tgoto get_failed;\ndiff --git a/ip/tcp_metrics.c b/ip/tcp_metrics.c\nindex 8972acd..547d791 100644\n--- a/ip/tcp_metrics.c\n+++ b/ip/tcp_metrics.c\n@@ -306,6 +306,7 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,\n static int tcpm_do_cmd(int cmd, int argc, char **argv)\n {\n \tTCPM_REQUEST(req, 1024, TCP_METRICS_CMD_GET, NLM_F_REQUEST);\n+\tstruct nlmsghdr *answer = NULL;\n \tint atype = -1, stype = -1;\n \tint ack;\n \n@@ -457,12 +458,12 @@ static int tcpm_do_cmd(int cmd, int argc, char **argv)\n \t}\n \n \tif (ack) {\n-\t\tif (rtnl_talk(&grth, &req.n, NULL, 0) < 0)\n+\t\tif (rtnl_talk(&grth, &req.n, NULL) < 0)\n \t\t\treturn -2;\n \t} else if (atype >= 0) {\n-\t\tif (rtnl_talk(&grth, &req.n, &req.n, sizeof(req)) < 0)\n+\t\tif (rtnl_talk(&grth, &req.n, &answer) < 0)\n \t\t\treturn -2;\n-\t\tif (process_msg(NULL, &req.n, stdout) < 0) {\n+\t\tif (process_msg(NULL, answer, stdout) < 0) {\n \t\t\tfprintf(stderr, \"Dump terminated\\n\");\n \t\t\texit(1);\n \t\t}\ndiff --git a/ip/xfrm_policy.c b/ip/xfrm_policy.c\nindex de689c4..c794779 100644\n--- a/ip/xfrm_policy.c\n+++ b/ip/xfrm_policy.c\n@@ -386,7 +386,7 @@ static int xfrm_policy_modify(int cmd, unsigned int flags, int argc, char **argv\n \tif (req.xpinfo.sel.family == AF_UNSPEC)\n \t\treq.xpinfo.sel.family = AF_INET;\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\texit(2);\n \n \trtnl_close(&rth);\n@@ -548,7 +548,7 @@ int xfrm_policy_print(const struct sockaddr_nl *who, struct nlmsghdr *n,\n }\n \n static int xfrm_policy_get_or_delete(int argc, char **argv, int delete,\n-\t\t\t\t void *res_nlbuf, size_t res_size)\n+\t\t\t\t struct nlmsghdr **answer)\n {\n \tstruct rtnl_handle rth;\n \tstruct {\n@@ -659,7 +659,7 @@ static int xfrm_policy_get_or_delete(int argc, char **argv, int delete,\n \t\t\t (void *)&ctx, ctx.sctx.len);\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, res_nlbuf, res_size) < 0)\n+\tif (rtnl_talk(&rth, &req.n, answer) < 0)\n \t\texit(2);\n \n \trtnl_close(&rth);\n@@ -669,15 +669,14 @@ static int xfrm_policy_get_or_delete(int argc, char **argv, int delete,\n \n static int xfrm_policy_delete(int argc, char **argv)\n {\n-\treturn xfrm_policy_get_or_delete(argc, argv, 1, NULL, 0);\n+\treturn xfrm_policy_get_or_delete(argc, argv, 1, NULL);\n }\n \n static int xfrm_policy_get(int argc, char **argv)\n {\n-\tchar buf[NLMSG_BUF_SIZE] = {};\n-\tstruct nlmsghdr *n = (struct nlmsghdr *)buf;\n+\tstruct nlmsghdr *n = NULL;\n \n-\txfrm_policy_get_or_delete(argc, argv, 0, n, sizeof(buf));\n+\txfrm_policy_get_or_delete(argc, argv, 0, &n);\n \n \tif (xfrm_policy_print(NULL, n, (void *)stdout) < 0) {\n \t\tfprintf(stderr, \"An error :-)\\n\");\n@@ -1049,7 +1048,7 @@ static int xfrm_spd_setinfo(int argc, char **argv)\n \tif (rtnl_open_byproto(&rth, 0, NETLINK_XFRM) < 0)\n \t\texit(1);\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\texit(2);\n \n \trtnl_close(&rth);\n@@ -1070,14 +1069,15 @@ static int xfrm_spd_getinfo(int argc, char **argv)\n \t\t.n.nlmsg_type = XFRM_MSG_GETSPDINFO,\n \t\t.flags = 0XFFFFFFFF,\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \n \tif (rtnl_open_byproto(&rth, 0, NETLINK_XFRM) < 0)\n \t\texit(1);\n \n-\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0)\n+\tif (rtnl_talk(&rth, &req.n, &answer) < 0)\n \t\texit(2);\n \n-\tprint_spdinfo(&req.n, (void *)stdout);\n+\tprint_spdinfo(answer, (void *)stdout);\n \n \trtnl_close(&rth);\n \n@@ -1123,7 +1123,7 @@ static int xfrm_policy_flush(int argc, char **argv)\n \tif (show_stats > 1)\n \t\tfprintf(stderr, \"Flush policy\\n\");\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\texit(2);\n \n \trtnl_close(&rth);\ndiff --git a/ip/xfrm_state.c b/ip/xfrm_state.c\nindex 4483fb8..02d3efa 100644\n--- a/ip/xfrm_state.c\n+++ b/ip/xfrm_state.c\n@@ -726,7 +726,7 @@ static int xfrm_state_modify(int cmd, unsigned int flags, int argc, char **argv)\n \tif (req.xsinfo.family == AF_UNSPEC)\n \t\treq.xsinfo.family = AF_INET;\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\texit(2);\n \n \trtnl_close(&rth);\n@@ -757,8 +757,7 @@ static int xfrm_state_allocspi(int argc, char **argv)\n \tchar *minp = NULL;\n \tchar *maxp = NULL;\n \tstruct xfrm_mark mark = {0, 0};\n-\tchar res_buf[NLMSG_BUF_SIZE] = {};\n-\tstruct nlmsghdr *res_n = (struct nlmsghdr *)res_buf;\n+\tstruct nlmsghdr *answer = NULL;\n \n \twhile (argc > 0) {\n \t\tif (strcmp(*argv, \"mode\") == 0) {\n@@ -858,10 +857,10 @@ static int xfrm_state_allocspi(int argc, char **argv)\n \t\treq.xspi.info.family = AF_INET;\n \n \n-\tif (rtnl_talk(&rth, &req.n, res_n, sizeof(res_buf)) < 0)\n+\tif (rtnl_talk(&rth, &req.n, &answer) < 0)\n \t\texit(2);\n \n-\tif (xfrm_state_print(NULL, res_n, (void *)stdout) < 0) {\n+\tif (xfrm_state_print(NULL, answer, (void *)stdout) < 0) {\n \t\tfprintf(stderr, \"An error :-)\\n\");\n \t\texit(1);\n \t}\n@@ -1046,16 +1045,15 @@ static int xfrm_state_get_or_delete(int argc, char **argv, int delete)\n \t\treq.xsid.family = AF_INET;\n \n \tif (delete) {\n-\t\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\t\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\t\texit(2);\n \t} else {\n-\t\tchar buf[NLMSG_BUF_SIZE] = {};\n-\t\tstruct nlmsghdr *res_n = (struct nlmsghdr *)buf;\n+\t\tstruct nlmsghdr *answer = NULL;\n \n-\t\tif (rtnl_talk(&rth, &req.n, res_n, sizeof(req)) < 0)\n+\t\tif (rtnl_talk(&rth, &req.n, &answer) < 0)\n \t\t\texit(2);\n \n-\t\tif (xfrm_state_print(NULL, res_n, (void *)stdout) < 0) {\n+\t\tif (xfrm_state_print(NULL, answer, (void *)stdout) < 0) {\n \t\t\tfprintf(stderr, \"An error :-)\\n\");\n \t\t\texit(1);\n \t\t}\n@@ -1321,14 +1319,15 @@ static int xfrm_sad_getinfo(int argc, char **argv)\n \t\t.n.nlmsg_type = XFRM_MSG_GETSADINFO,\n \t\t.flags = 0XFFFFFFFF,\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \n \tif (rtnl_open_byproto(&rth, 0, NETLINK_XFRM) < 0)\n \t\texit(1);\n \n-\tif (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0)\n+\tif (rtnl_talk(&rth, &req.n, &answer) < 0)\n \t\texit(2);\n \n-\tprint_sadinfo(&req.n, (void *)stdout);\n+\tprint_sadinfo(answer, (void *)stdout);\n \n \trtnl_close(&rth);\n \n@@ -1376,7 +1375,7 @@ static int xfrm_state_flush(int argc, char **argv)\n \t\tfprintf(stderr, \"Flush state with XFRM-PROTO value \\\"%s\\\"\\n\",\n \t\t\tstrxf_xfrmproto(req.xsf.proto));\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\texit(2);\n \n \trtnl_close(&rth);\ndiff --git a/lib/libgenl.c b/lib/libgenl.c\nindex 50d2d92..9994469 100644\n--- a/lib/libgenl.c\n+++ b/lib/libgenl.c\n@@ -49,16 +49,17 @@ int genl_resolve_family(struct rtnl_handle *grth, const char *family)\n {\n \tGENL_REQUEST(req, 1024, GENL_ID_CTRL, 0, 0, CTRL_CMD_GETFAMILY,\n \t\t NLM_F_REQUEST);\n+\tstruct nlmsghdr *answer = NULL;\n \n \taddattr_l(&req.n, sizeof(req), CTRL_ATTR_FAMILY_NAME,\n \t\t family, strlen(family) + 1);\n \n-\tif (rtnl_talk(grth, &req.n, &req.n, sizeof(req)) < 0) {\n+\tif (rtnl_talk(grth, &req.n, &answer) < 0) {\n \t\tfprintf(stderr, \"Error talking to the kernel\\n\");\n \t\treturn -2;\n \t}\n \n-\treturn genl_parse_getfamily(&req.n);\n+\treturn genl_parse_getfamily(answer);\n }\n \n int genl_init_handle(struct rtnl_handle *grth, const char *family,\ndiff --git a/lib/libnetlink.c b/lib/libnetlink.c\nindex 37cfb5a..ff986d4 100644\n--- a/lib/libnetlink.c\n+++ b/lib/libnetlink.c\n@@ -568,7 +568,7 @@ static void rtnl_talk_error(struct nlmsghdr *h, struct nlmsgerr *err,\n }\n \n static int __rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n-\t\t struct nlmsghdr *answer, size_t maxlen,\n+\t\t struct nlmsghdr **answer,\n \t\t bool show_rtnl_err, nl_ext_ack_fn_t errfn)\n {\n \tint status;\n@@ -643,8 +643,7 @@ static int __rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n \t\t\t\t\tfprintf(stderr, \"ERROR truncated\\n\");\n \t\t\t\t} else if (!err->error) {\n \t\t\t\t\tif (answer)\n-\t\t\t\t\t\tmemcpy(answer, h,\n-\t\t\t\t\t\t MIN(maxlen, h->nlmsg_len));\n+\t\t\t\t\t\t*answer= h;\n \t\t\t\t\treturn 0;\n \t\t\t\t}\n \n@@ -657,8 +656,7 @@ static int __rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n \t\t\t}\n \n \t\t\tif (answer) {\n-\t\t\t\tmemcpy(answer, h,\n-\t\t\t\t MIN(maxlen, h->nlmsg_len));\n+\t\t\t\t*answer= h;\n \t\t\t\treturn 0;\n \t\t\t}\n \n@@ -681,22 +679,22 @@ static int __rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n }\n \n int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n-\t struct nlmsghdr *answer, size_t maxlen)\n+\t struct nlmsghdr **answer)\n {\n-\treturn __rtnl_talk(rtnl, n, answer, maxlen, true, NULL);\n+\treturn __rtnl_talk(rtnl, n, answer, true, NULL);\n }\n \n int rtnl_talk_extack(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n-\t\t struct nlmsghdr *answer, size_t maxlen,\n+\t\t struct nlmsghdr **answer,\n \t\t nl_ext_ack_fn_t errfn)\n {\n-\treturn __rtnl_talk(rtnl, n, answer, maxlen, true, errfn);\n+\treturn __rtnl_talk(rtnl, n, answer, true, errfn);\n }\n \n int rtnl_talk_suppress_rtnl_errmsg(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n-\t\t\t\t struct nlmsghdr *answer, size_t maxlen)\n+\t\t\t\t struct nlmsghdr **answer)\n {\n-\treturn __rtnl_talk(rtnl, n, answer, maxlen, false, NULL);\n+\treturn __rtnl_talk(rtnl, n, answer, false, NULL);\n }\n \n int rtnl_listen_all_nsid(struct rtnl_handle *rth)\ndiff --git a/misc/ss.c b/misc/ss.c\nindex dd8dfaa..bf21d80 100644\n--- a/misc/ss.c\n+++ b/misc/ss.c\n@@ -2597,7 +2597,7 @@ static int kill_inet_sock(struct nlmsghdr *h, void *arg, struct sockstat *s)\n \t\traw->sdiag_raw_protocol = s->raw_prot;\n \t}\n \n-\treturn rtnl_talk(rth, &req.nlh, NULL, 0);\n+\treturn rtnl_talk(rth, &req.nlh, NULL);\n }\n \n static int show_one_inet_sock(const struct sockaddr_nl *addr,\ndiff --git a/tc/m_action.c b/tc/m_action.c\nindex 6ebe85e..12e033b 100644\n--- a/tc/m_action.c\n+++ b/tc/m_action.c\n@@ -507,14 +507,13 @@ static int tc_action_gd(int cmd, unsigned int flags, int *argc_p, char ***argv_p\n \n \treq.n.nlmsg_seq = rth.dump = ++rth.seq;\n \tif (cmd == RTM_GETACTION)\n-\t\tans = &req.n;\n \n-\tif (rtnl_talk(&rth, &req.n, ans, MAX_MSG) < 0) {\n+\tif (rtnl_talk(&rth, &req.n, &ans) < 0) {\n \t\tfprintf(stderr, \"We have an error talking to the kernel\\n\");\n \t\treturn 1;\n \t}\n \n-\tif (ans && print_action(NULL, &req.n, (void *)stdout) < 0) {\n+\tif (ans && print_action(NULL, ans, (void *)stdout) < 0) {\n \t\tfprintf(stderr, \"Dump terminated\\n\");\n \t\treturn 1;\n \t}\n@@ -550,7 +549,7 @@ static int tc_action_modify(int cmd, unsigned int flags, int *argc_p, char ***ar\n \t}\n \ttail->rta_len = (void *) NLMSG_TAIL(&req.n) - (void *) tail;\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0) {\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0) {\n \t\tfprintf(stderr, \"We have an error talking to the kernel\\n\");\n \t\tret = -1;\n \t}\n@@ -617,7 +616,7 @@ static int tc_act_list_or_flush(int argc, char **argv, int event)\n \t\treq.n.nlmsg_type = RTM_DELACTION;\n \t\treq.n.nlmsg_flags |= NLM_F_ROOT;\n \t\treq.n.nlmsg_flags |= NLM_F_REQUEST;\n-\t\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0) {\n+\t\tif (rtnl_talk(&rth, &req.n, NULL) < 0) {\n \t\t\tfprintf(stderr, \"We have an error flushing\\n\");\n \t\t\treturn 1;\n \t\t}\ndiff --git a/tc/tc_class.c b/tc/tc_class.c\nindex 1a1f1fa..0214775 100644\n--- a/tc/tc_class.c\n+++ b/tc/tc_class.c\n@@ -149,7 +149,7 @@ static int tc_class_modify(int cmd, unsigned int flags, int argc, char **argv)\n \t\t}\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn 2;\n \n \treturn 0;\ndiff --git a/tc/tc_filter.c b/tc/tc_filter.c\nindex cf290ae..c43d1b2 100644\n--- a/tc/tc_filter.c\n+++ b/tc/tc_filter.c\n@@ -194,7 +194,7 @@ static int tc_filter_modify(int cmd, unsigned int flags, int argc, char **argv)\n \t\t}\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0) {\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0) {\n \t\tfprintf(stderr, \"We have an error talking to the kernel\\n\");\n \t\treturn 2;\n \t}\n@@ -331,6 +331,7 @@ static int tc_filter_get(int cmd, unsigned int flags, int argc, char **argv)\n \t\t.t.tcm_parent = TC_H_UNSPEC,\n \t\t.t.tcm_family = AF_UNSPEC,\n \t};\n+\tstruct nlmsghdr *answer = NULL;\n \tstruct filter_util *q = NULL;\n \t__u32 prio = 0;\n \t__u32 protocol = 0;\n@@ -484,12 +485,12 @@ static int tc_filter_get(int cmd, unsigned int flags, int argc, char **argv)\n \t\treturn -1;\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, &req.n, MAX_MSG) < 0) {\n+\tif (rtnl_talk(&rth, &req.n, &answer) < 0) {\n \t\tfprintf(stderr, \"We have an error talking to the kernel\\n\");\n \t\treturn 2;\n \t}\n \n-\tprint_filter(NULL, &req.n, (void *)stdout);\n+\tprint_filter(NULL, answer, (void *)stdout);\n \n \treturn 0;\n }\ndiff --git a/tc/tc_qdisc.c b/tc/tc_qdisc.c\nindex 1e9d909..c52114a 100644\n--- a/tc/tc_qdisc.c\n+++ b/tc/tc_qdisc.c\n@@ -190,7 +190,7 @@ static int tc_qdisc_modify(int cmd, unsigned int flags, int argc, char **argv)\n \t\treq.t.tcm_ifindex = idx;\n \t}\n \n-\tif (rtnl_talk(&rth, &req.n, NULL, 0) < 0)\n+\tif (rtnl_talk(&rth, &req.n, NULL) < 0)\n \t\treturn 2;\n \n \treturn 0;\n", "prefixes": [ "iproute2", "2/2" ] }