Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760673AbYHVCh3 (ORCPT ); Thu, 21 Aug 2008 22:37:29 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753450AbYHVChM (ORCPT ); Thu, 21 Aug 2008 22:37:12 -0400 Received: from mail-gx0-f29.google.com ([209.85.217.29]:54616 "EHLO mail-gx0-f29.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753217AbYHVChK (ORCPT ); Thu, 21 Aug 2008 22:37:10 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=rfEZeNwdgN4h4MRuF6OmHqxVG7IT7TKlnVobBqeMKCWSpJgqGR6OEhi7XOyvDCcLa0 t5fMXi8tB5ZTkAQTRGN1HMbay/gxx5WjfcYx9KqF4HWJXKKGjsVhs1UH3+xTmWC9h9ho IqT0jWFA67bIHRVjIvMo8pSe9e5nnHx7s2Brc= Message-ID: <5f2db9d90808211937o1d9b33t9ad933938872e08d@mail.gmail.com> Date: Thu, 21 Aug 2008 19:37:08 -0700 From: "Alexander Duyck" To: "Stephen Hemminger" Subject: Re: [PATCH] IPROUTE: correct nla nested message generated by netem_parse_opt Cc: "Jeff Kirsher" , davem@davemloft.net, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, "Alexander Duyck" In-Reply-To: <20080821211941.66090862@speedy> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <20080822005011.4615.98303.stgit@jtkirshe-mobile.jf.intel.com> <20080821211941.66090862@speedy> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3070 Lines: 77 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/