Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759673AbYHVKpN (ORCPT ); Fri, 22 Aug 2008 06:45:13 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754695AbYHVKo4 (ORCPT ); Fri, 22 Aug 2008 06:44:56 -0400 Received: from 74-93-104-97-Washington.hfc.comcastbusiness.net ([74.93.104.97]:45381 "EHLO sunset.davemloft.net" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1753346AbYHVKoz (ORCPT ); Fri, 22 Aug 2008 06:44:55 -0400 Date: Fri, 22 Aug 2008 03:44:54 -0700 (PDT) Message-Id: <20080822.034454.107392192.davem@davemloft.net> To: alexander.duyck@gmail.com Cc: shemminger@vyatta.com, jeffrey.t.kirsher@intel.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, alexander.h.duyck@intel.com, tgraf@suug.ch Subject: Re: [PATCH] IPROUTE: correct nla nested message generated by netem_parse_opt From: David Miller In-Reply-To: <5f2db9d90808211937o1d9b33t9ad933938872e08d@mail.gmail.com> References: <20080822005011.4615.98303.stgit@jtkirshe-mobile.jf.intel.com> <20080821211941.66090862@speedy> <5f2db9d90808211937o1d9b33t9ad933938872e08d@mail.gmail.com> X-Mailer: Mew version 5.2 on Emacs 22.1 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3332 Lines: 82 From: "Alexander Duyck" Date: Thu, 21 Aug 2008 19:37:08 -0700 Thomas Graf added to CC:. > On Thu, Aug 21, 2008 at 6:19 PM, Stephen Hemminger > wrote: > > On Thu, 21 Aug 2008 17:50:11 -0700 > > Jeff Kirsher wrote: > > > >> From: Alexander Duyck > >> > >> netem_parse_opt was generating a malformed nested compat message. This patch > >> corrects it so that the nested arguments are contained within a nested nla > >> header. > >> > >> Signed-off-by: Alexander Duyck > >> Signed-off-by: Jeff Kirsher > >> --- > >> > >> tc/q_netem.c | 9 +++------ > >> 1 files changed, 3 insertions(+), 6 deletions(-) > >> > >> diff --git a/tc/q_netem.c b/tc/q_netem.c > >> index d06932e..a3365c1 100644 > >> --- a/tc/q_netem.c > >> +++ b/tc/q_netem.c > >> @@ -128,7 +128,7 @@ static int netem_parse_opt(struct qdisc_util *qu, int argc, char **argv, > >> struct nlmsghdr *n) > >> { > >> size_t dist_size = 0; > >> - struct rtattr *tail; > >> + struct rtattr *nest; > >> struct tc_netem_qopt opt; > >> struct tc_netem_corr cor; > >> struct tc_netem_reorder reorder; > >> @@ -257,8 +257,6 @@ static int netem_parse_opt(struct qdisc_util *qu, int argc, char **argv, > >> argc--; argv++; > >> } > >> > >> - tail = NLMSG_TAIL(n); > >> - > >> if (reorder.probability) { > >> if (opt.latency == 0) { > >> fprintf(stderr, "reordering not possible without specifying some delay\n"); > >> @@ -277,8 +275,7 @@ static int netem_parse_opt(struct qdisc_util *qu, int argc, char **argv, > >> return -1; > >> } > >> > >> - if (addattr_l(n, 1024, TCA_OPTIONS, &opt, sizeof(opt)) < 0) > >> - return -1; > >> + nest = addattr_nest_compat(n, 1024, TCA_OPTIONS, &opt, sizeof(opt)); > >> > >> if (present[TCA_NETEM_CORR] && > >> addattr_l(n, 1024, TCA_NETEM_CORR, &cor, sizeof(cor)) < 0) > >> @@ -299,7 +296,7 @@ static int netem_parse_opt(struct qdisc_util *qu, int argc, char **argv, > >> return -1; > >> free(dist_data); > >> } > >> - tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail; > >> + addattr_nest_compat_end(n, nest); > >> return 0; > >> } > >> > >> > > > > The kernel ABI can not change? The nested attribute order should not change. > > The problem is the current kernel ABI was changed in commit > b9a2f2e450b0f770bb4347ae8d48eb2dea701e24 "netlink: Fix > nla_parse_nested_compat() to call nla_parse() directly" to support a > format that I have only seen generated in netem_parse_opt. The kernel > and prio_parse_opt qdisc both generate the other format which includes > the extra attribute header to contain the nested attributes. This > patch fixes tc so that netem will use the correct nested attribute > order for kernels prior to this commit and once this commit has been > reverted. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/