From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from host.76.145.23.62.rev.coltfrance.com ([62.23.145.76]:55818 "EHLO proxy.6wind.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752469AbcDZIGo (ORCPT ); Tue, 26 Apr 2016 04:06:44 -0400 From: Nicolas Dichtel To: netdev@vger.kernel.org Cc: davem@davemloft.net, sd@queasysnail.net, johannes@sipsolutions.net, kvalo@codeaurora.org, linux-wireless@vger.kernel.org, jack@suse.com, linux-kernel@vger.kernel.org, pshelar@nicira.com, dev@openvswitch.org, jhs@mojatatu.com, philipp.reisner@linbit.com, lars.ellenberg@linbit.com, drbd-dev@lists.linbit.com, Nicolas Dichtel Subject: [PATCH net-next 8/8] sched: align nlattr properly when needed Date: Tue, 26 Apr 2016 10:06:18 +0200 Message-Id: <1461657978-13360-9-git-send-email-nicolas.dichtel@6wind.com> (sfid-20160426_100846_067026_A4277B7F) In-Reply-To: <1461657978-13360-1-git-send-email-nicolas.dichtel@6wind.com> References: <1461657978-13360-1-git-send-email-nicolas.dichtel@6wind.com> Sender: linux-wireless-owner@vger.kernel.org List-ID: Signed-off-by: Nicolas Dichtel --- Documentation/networking/gen_stats.txt | 6 ++++-- include/net/gen_stats.h | 6 ++++-- include/uapi/linux/gen_stats.h | 1 + include/uapi/linux/pkt_cls.h | 2 ++ include/uapi/linux/rtnetlink.h | 1 + include/uapi/linux/tc_act/tc_bpf.h | 1 + include/uapi/linux/tc_act/tc_connmark.h | 1 + include/uapi/linux/tc_act/tc_csum.h | 1 + include/uapi/linux/tc_act/tc_defact.h | 1 + include/uapi/linux/tc_act/tc_gact.h | 1 + include/uapi/linux/tc_act/tc_ife.h | 1 + include/uapi/linux/tc_act/tc_ipt.h | 1 + include/uapi/linux/tc_act/tc_mirred.h | 1 + include/uapi/linux/tc_act/tc_nat.h | 1 + include/uapi/linux/tc_act/tc_pedit.h | 1 + include/uapi/linux/tc_act/tc_skbedit.h | 1 + include/uapi/linux/tc_act/tc_vlan.h | 1 + net/core/gen_stats.c | 35 ++++++++++++++++++++------------- net/sched/act_api.c | 7 +++++-- net/sched/act_bpf.c | 3 ++- net/sched/act_connmark.c | 3 ++- net/sched/act_csum.c | 2 +- net/sched/act_gact.c | 2 +- net/sched/act_ife.c | 2 +- net/sched/act_ipt.c | 2 +- net/sched/act_mirred.c | 2 +- net/sched/act_nat.c | 2 +- net/sched/act_pedit.c | 2 +- net/sched/act_simple.c | 2 +- net/sched/act_skbedit.c | 2 +- net/sched/act_vlan.c | 2 +- net/sched/cls_u32.c | 7 ++++--- net/sched/sch_api.c | 6 ++++-- 33 files changed, 72 insertions(+), 37 deletions(-) diff --git a/Documentation/networking/gen_stats.txt b/Documentation/networking/gen_stats.txt index 70e6275b757a..ff630a87b511 100644 --- a/Documentation/networking/gen_stats.txt +++ b/Documentation/networking/gen_stats.txt @@ -33,7 +33,8 @@ my_dumping_routine(struct sk_buff *skb, ...) { struct gnet_dump dump; - if (gnet_stats_start_copy(skb, TCA_STATS2, &mystruct->lock, &dump) < 0) + if (gnet_stats_start_copy(skb, TCA_STATS2, &mystruct->lock, &dump, + TCA_PAD) < 0) goto rtattr_failure; if (gnet_stats_copy_basic(&dump, &mystruct->bstats) < 0 || @@ -56,7 +57,8 @@ existing TLV types. my_dumping_routine(struct sk_buff *skb, ...) { if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, - TCA_XSTATS, &mystruct->lock, &dump) < 0) + TCA_XSTATS, &mystruct->lock, &dump, + TCA_PAD) < 0) goto rtattr_failure; ... } diff --git a/include/net/gen_stats.h b/include/net/gen_stats.h index cbafa3768d48..610cd397890e 100644 --- a/include/net/gen_stats.h +++ b/include/net/gen_stats.h @@ -19,17 +19,19 @@ struct gnet_dump { /* Backward compatibility */ int compat_tc_stats; int compat_xstats; + int padattr; void * xstats; int xstats_len; struct tc_stats tc_stats; }; int gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock, - struct gnet_dump *d); + struct gnet_dump *d, int padattr); int gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int tc_stats_type, int xstats_type, - spinlock_t *lock, struct gnet_dump *d); + spinlock_t *lock, struct gnet_dump *d, + int padattr); int gnet_stats_copy_basic(struct gnet_dump *d, struct gnet_stats_basic_cpu __percpu *cpu, diff --git a/include/uapi/linux/gen_stats.h b/include/uapi/linux/gen_stats.h index 6487317ea619..52deccc2128e 100644 --- a/include/uapi/linux/gen_stats.h +++ b/include/uapi/linux/gen_stats.h @@ -10,6 +10,7 @@ enum { TCA_STATS_QUEUE, TCA_STATS_APP, TCA_STATS_RATE_EST64, + TCA_STATS_PAD, __TCA_STATS_MAX, }; #define TCA_STATS_MAX (__TCA_STATS_MAX - 1) diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h index c43c5f78b9c4..84660905fedf 100644 --- a/include/uapi/linux/pkt_cls.h +++ b/include/uapi/linux/pkt_cls.h @@ -66,6 +66,7 @@ enum { TCA_ACT_OPTIONS, TCA_ACT_INDEX, TCA_ACT_STATS, + TCA_ACT_PAD, __TCA_ACT_MAX }; @@ -173,6 +174,7 @@ enum { TCA_U32_PCNT, TCA_U32_MARK, TCA_U32_FLAGS, + TCA_U32_PAD, __TCA_U32_MAX }; diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h index a94e0b69c769..262f0379d83a 100644 --- a/include/uapi/linux/rtnetlink.h +++ b/include/uapi/linux/rtnetlink.h @@ -542,6 +542,7 @@ enum { TCA_FCNT, TCA_STATS2, TCA_STAB, + TCA_PAD, __TCA_MAX }; diff --git a/include/uapi/linux/tc_act/tc_bpf.h b/include/uapi/linux/tc_act/tc_bpf.h index 07f17cc70bb3..063d9d465119 100644 --- a/include/uapi/linux/tc_act/tc_bpf.h +++ b/include/uapi/linux/tc_act/tc_bpf.h @@ -26,6 +26,7 @@ enum { TCA_ACT_BPF_OPS, TCA_ACT_BPF_FD, TCA_ACT_BPF_NAME, + TCA_ACT_BPF_PAD, __TCA_ACT_BPF_MAX, }; #define TCA_ACT_BPF_MAX (__TCA_ACT_BPF_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_connmark.h b/include/uapi/linux/tc_act/tc_connmark.h index 994b0971bce2..62a5e944c554 100644 --- a/include/uapi/linux/tc_act/tc_connmark.h +++ b/include/uapi/linux/tc_act/tc_connmark.h @@ -15,6 +15,7 @@ enum { TCA_CONNMARK_UNSPEC, TCA_CONNMARK_PARMS, TCA_CONNMARK_TM, + TCA_CONNMARK_PAD, __TCA_CONNMARK_MAX }; #define TCA_CONNMARK_MAX (__TCA_CONNMARK_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_csum.h b/include/uapi/linux/tc_act/tc_csum.h index a047c49a3153..8ac8041ab5f1 100644 --- a/include/uapi/linux/tc_act/tc_csum.h +++ b/include/uapi/linux/tc_act/tc_csum.h @@ -10,6 +10,7 @@ enum { TCA_CSUM_UNSPEC, TCA_CSUM_PARMS, TCA_CSUM_TM, + TCA_CSUM_PAD, __TCA_CSUM_MAX }; #define TCA_CSUM_MAX (__TCA_CSUM_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_defact.h b/include/uapi/linux/tc_act/tc_defact.h index 17dddb40f740..d2a3abb77aeb 100644 --- a/include/uapi/linux/tc_act/tc_defact.h +++ b/include/uapi/linux/tc_act/tc_defact.h @@ -12,6 +12,7 @@ enum { TCA_DEF_TM, TCA_DEF_PARMS, TCA_DEF_DATA, + TCA_DEF_PAD, __TCA_DEF_MAX }; #define TCA_DEF_MAX (__TCA_DEF_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_gact.h b/include/uapi/linux/tc_act/tc_gact.h index f7bf94eed510..70b536a8f8b2 100644 --- a/include/uapi/linux/tc_act/tc_gact.h +++ b/include/uapi/linux/tc_act/tc_gact.h @@ -25,6 +25,7 @@ enum { TCA_GACT_TM, TCA_GACT_PARMS, TCA_GACT_PROB, + TCA_GACT_PAD, __TCA_GACT_MAX }; #define TCA_GACT_MAX (__TCA_GACT_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_ife.h b/include/uapi/linux/tc_act/tc_ife.h index d648ff66586f..4ece02a77b9a 100644 --- a/include/uapi/linux/tc_act/tc_ife.h +++ b/include/uapi/linux/tc_act/tc_ife.h @@ -23,6 +23,7 @@ enum { TCA_IFE_SMAC, TCA_IFE_TYPE, TCA_IFE_METALST, + TCA_IFE_PAD, __TCA_IFE_MAX }; #define TCA_IFE_MAX (__TCA_IFE_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_ipt.h b/include/uapi/linux/tc_act/tc_ipt.h index 130aaadf6fac..7c6e155dd981 100644 --- a/include/uapi/linux/tc_act/tc_ipt.h +++ b/include/uapi/linux/tc_act/tc_ipt.h @@ -14,6 +14,7 @@ enum { TCA_IPT_CNT, TCA_IPT_TM, TCA_IPT_TARG, + TCA_IPT_PAD, __TCA_IPT_MAX }; #define TCA_IPT_MAX (__TCA_IPT_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_mirred.h b/include/uapi/linux/tc_act/tc_mirred.h index 7561750e8fd6..3d7a2b352a62 100644 --- a/include/uapi/linux/tc_act/tc_mirred.h +++ b/include/uapi/linux/tc_act/tc_mirred.h @@ -20,6 +20,7 @@ enum { TCA_MIRRED_UNSPEC, TCA_MIRRED_TM, TCA_MIRRED_PARMS, + TCA_MIRRED_PAD, __TCA_MIRRED_MAX }; #define TCA_MIRRED_MAX (__TCA_MIRRED_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_nat.h b/include/uapi/linux/tc_act/tc_nat.h index 6663aeba0b9a..923457c9ebf0 100644 --- a/include/uapi/linux/tc_act/tc_nat.h +++ b/include/uapi/linux/tc_act/tc_nat.h @@ -10,6 +10,7 @@ enum { TCA_NAT_UNSPEC, TCA_NAT_PARMS, TCA_NAT_TM, + TCA_NAT_PAD, __TCA_NAT_MAX }; #define TCA_NAT_MAX (__TCA_NAT_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_pedit.h b/include/uapi/linux/tc_act/tc_pedit.h index 716cfabcd5b2..6389959a5157 100644 --- a/include/uapi/linux/tc_act/tc_pedit.h +++ b/include/uapi/linux/tc_act/tc_pedit.h @@ -10,6 +10,7 @@ enum { TCA_PEDIT_UNSPEC, TCA_PEDIT_TM, TCA_PEDIT_PARMS, + TCA_PEDIT_PAD, __TCA_PEDIT_MAX }; #define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_skbedit.h b/include/uapi/linux/tc_act/tc_skbedit.h index 7a2e910a5f08..fecb5cc48c40 100644 --- a/include/uapi/linux/tc_act/tc_skbedit.h +++ b/include/uapi/linux/tc_act/tc_skbedit.h @@ -39,6 +39,7 @@ enum { TCA_SKBEDIT_PRIORITY, TCA_SKBEDIT_QUEUE_MAPPING, TCA_SKBEDIT_MARK, + TCA_SKBEDIT_PAD, __TCA_SKBEDIT_MAX }; #define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_vlan.h b/include/uapi/linux/tc_act/tc_vlan.h index f7b8d448b960..31151ff6264f 100644 --- a/include/uapi/linux/tc_act/tc_vlan.h +++ b/include/uapi/linux/tc_act/tc_vlan.h @@ -28,6 +28,7 @@ enum { TCA_VLAN_PARMS, TCA_VLAN_PUSH_VLAN_ID, TCA_VLAN_PUSH_VLAN_PROTOCOL, + TCA_VLAN_PAD, __TCA_VLAN_MAX, }; #define TCA_VLAN_MAX (__TCA_VLAN_MAX - 1) diff --git a/net/core/gen_stats.c b/net/core/gen_stats.c index e640462ea8bf..f96ee8b9478d 100644 --- a/net/core/gen_stats.c +++ b/net/core/gen_stats.c @@ -25,9 +25,9 @@ static inline int -gnet_stats_copy(struct gnet_dump *d, int type, void *buf, int size) +gnet_stats_copy(struct gnet_dump *d, int type, void *buf, int size, int padattr) { - if (nla_put(d->skb, type, size, buf)) + if (nla_put_64bit(d->skb, type, size, buf, padattr)) goto nla_put_failure; return 0; @@ -59,7 +59,8 @@ nla_put_failure: */ int gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int tc_stats_type, - int xstats_type, spinlock_t *lock, struct gnet_dump *d) + int xstats_type, spinlock_t *lock, + struct gnet_dump *d, int padattr) __acquires(lock) { memset(d, 0, sizeof(*d)); @@ -71,16 +72,17 @@ gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int tc_stats_type, d->skb = skb; d->compat_tc_stats = tc_stats_type; d->compat_xstats = xstats_type; + d->padattr = padattr; if (d->tail) - return gnet_stats_copy(d, type, NULL, 0); + return gnet_stats_copy(d, type, NULL, 0, padattr); return 0; } EXPORT_SYMBOL(gnet_stats_start_copy_compat); /** - * gnet_stats_start_copy_compat - start dumping procedure in compatibility mode + * gnet_stats_start_copy - start dumping procedure in compatibility mode * @skb: socket buffer to put statistics TLVs into * @type: TLV type for top level statistic TLV * @lock: statistics lock @@ -94,9 +96,9 @@ EXPORT_SYMBOL(gnet_stats_start_copy_compat); */ int gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock, - struct gnet_dump *d) + struct gnet_dump *d, int padattr) { - return gnet_stats_start_copy_compat(skb, type, 0, 0, lock, d); + return gnet_stats_start_copy_compat(skb, type, 0, 0, lock, d, padattr); } EXPORT_SYMBOL(gnet_stats_start_copy); @@ -169,7 +171,8 @@ gnet_stats_copy_basic(struct gnet_dump *d, memset(&sb, 0, sizeof(sb)); sb.bytes = bstats.bytes; sb.packets = bstats.packets; - return gnet_stats_copy(d, TCA_STATS_BASIC, &sb, sizeof(sb)); + return gnet_stats_copy(d, TCA_STATS_BASIC, &sb, sizeof(sb), + TCA_STATS_PAD); } return 0; } @@ -208,11 +211,13 @@ gnet_stats_copy_rate_est(struct gnet_dump *d, } if (d->tail) { - res = gnet_stats_copy(d, TCA_STATS_RATE_EST, &est, sizeof(est)); + res = gnet_stats_copy(d, TCA_STATS_RATE_EST, &est, sizeof(est), + TCA_STATS_PAD); if (res < 0 || est.bps == r->bps) return res; /* emit 64bit stats only if needed */ - return gnet_stats_copy(d, TCA_STATS_RATE_EST64, r, sizeof(*r)); + return gnet_stats_copy(d, TCA_STATS_RATE_EST64, r, sizeof(*r), + TCA_STATS_PAD); } return 0; @@ -286,7 +291,8 @@ gnet_stats_copy_queue(struct gnet_dump *d, if (d->tail) return gnet_stats_copy(d, TCA_STATS_QUEUE, - &qstats, sizeof(qstats)); + &qstats, sizeof(qstats), + TCA_STATS_PAD); return 0; } @@ -316,7 +322,8 @@ gnet_stats_copy_app(struct gnet_dump *d, void *st, int len) } if (d->tail) - return gnet_stats_copy(d, TCA_STATS_APP, st, len); + return gnet_stats_copy(d, TCA_STATS_APP, st, len, + TCA_STATS_PAD); return 0; @@ -347,12 +354,12 @@ gnet_stats_finish_copy(struct gnet_dump *d) if (d->compat_tc_stats) if (gnet_stats_copy(d, d->compat_tc_stats, &d->tc_stats, - sizeof(d->tc_stats)) < 0) + sizeof(d->tc_stats), d->padattr) < 0) return -1; if (d->compat_xstats && d->xstats) { if (gnet_stats_copy(d, d->compat_xstats, d->xstats, - d->xstats_len) < 0) + d->xstats_len, d->padattr) < 0) return -1; } diff --git a/net/sched/act_api.c b/net/sched/act_api.c index 96066665e376..336774a535c3 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c @@ -657,12 +657,15 @@ int tcf_action_copy_stats(struct sk_buff *skb, struct tc_action *a, if (compat_mode) { if (a->type == TCA_OLD_COMPAT) err = gnet_stats_start_copy_compat(skb, 0, - TCA_STATS, TCA_XSTATS, &p->tcfc_lock, &d); + TCA_STATS, + TCA_XSTATS, + &p->tcfc_lock, &d, + TCA_PAD); else return 0; } else err = gnet_stats_start_copy(skb, TCA_ACT_STATS, - &p->tcfc_lock, &d); + &p->tcfc_lock, &d, TCA_ACT_PAD); if (err < 0) goto errout; diff --git a/net/sched/act_bpf.c b/net/sched/act_bpf.c index 8c9f1f0459ab..4fd703362563 100644 --- a/net/sched/act_bpf.c +++ b/net/sched/act_bpf.c @@ -156,7 +156,8 @@ static int tcf_bpf_dump(struct sk_buff *skb, struct tc_action *act, tm.lastuse = jiffies_to_clock_t(jiffies - prog->tcf_tm.lastuse); tm.expires = jiffies_to_clock_t(prog->tcf_tm.expires); - if (nla_put(skb, TCA_ACT_BPF_TM, sizeof(tm), &tm)) + if (nla_put_64bit(skb, TCA_ACT_BPF_TM, sizeof(tm), &tm, + TCA_ACT_BPF_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_connmark.c b/net/sched/act_connmark.c index c0ed93ce2391..2ba700c765e0 100644 --- a/net/sched/act_connmark.c +++ b/net/sched/act_connmark.c @@ -163,7 +163,8 @@ static inline int tcf_connmark_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - ci->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - ci->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(ci->tcf_tm.expires); - if (nla_put(skb, TCA_CONNMARK_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_CONNMARK_TM, sizeof(t), &t, + TCA_CONNMARK_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_csum.c b/net/sched/act_csum.c index d22426cdebc0..28e934ed038a 100644 --- a/net/sched/act_csum.c +++ b/net/sched/act_csum.c @@ -549,7 +549,7 @@ static int tcf_csum_dump(struct sk_buff *skb, t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(p->tcf_tm.expires); - if (nla_put(skb, TCA_CSUM_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_CSUM_TM, sizeof(t), &t, TCA_CSUM_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_gact.c b/net/sched/act_gact.c index 887fc1f209ff..1a6e09fbb2a5 100644 --- a/net/sched/act_gact.c +++ b/net/sched/act_gact.c @@ -177,7 +177,7 @@ static int tcf_gact_dump(struct sk_buff *skb, struct tc_action *a, int bind, int t.install = jiffies_to_clock_t(jiffies - gact->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - gact->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(gact->tcf_tm.expires); - if (nla_put(skb, TCA_GACT_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_GACT_TM, sizeof(t), &t, TCA_GACT_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_ife.c b/net/sched/act_ife.c index c589a9ba506a..556f44c9c454 100644 --- a/net/sched/act_ife.c +++ b/net/sched/act_ife.c @@ -550,7 +550,7 @@ static int tcf_ife_dump(struct sk_buff *skb, struct tc_action *a, int bind, t.install = jiffies_to_clock_t(jiffies - ife->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - ife->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(ife->tcf_tm.expires); - if (nla_put(skb, TCA_IFE_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_IFE_TM, sizeof(t), &t, TCA_IFE_PAD)) goto nla_put_failure; if (!is_zero_ether_addr(ife->eth_dst)) { diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c index 350e134cffb3..1464f6a09446 100644 --- a/net/sched/act_ipt.c +++ b/net/sched/act_ipt.c @@ -275,7 +275,7 @@ static int tcf_ipt_dump(struct sk_buff *skb, struct tc_action *a, int bind, int tm.install = jiffies_to_clock_t(jiffies - ipt->tcf_tm.install); tm.lastuse = jiffies_to_clock_t(jiffies - ipt->tcf_tm.lastuse); tm.expires = jiffies_to_clock_t(ipt->tcf_tm.expires); - if (nla_put(skb, TCA_IPT_TM, sizeof (tm), &tm)) + if (nla_put_64bit(skb, TCA_IPT_TM, sizeof(tm), &tm, TCA_IPT_PAD)) goto nla_put_failure; kfree(t); return skb->len; diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c index e8a760cf7775..dea57c1ec90c 100644 --- a/net/sched/act_mirred.c +++ b/net/sched/act_mirred.c @@ -214,7 +214,7 @@ static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, i t.install = jiffies_to_clock_t(jiffies - m->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - m->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(m->tcf_tm.expires); - if (nla_put(skb, TCA_MIRRED_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_MIRRED_TM, sizeof(t), &t, TCA_MIRRED_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c index 0f65cdfbfb1d..c0a879f940de 100644 --- a/net/sched/act_nat.c +++ b/net/sched/act_nat.c @@ -267,7 +267,7 @@ static int tcf_nat_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(p->tcf_tm.expires); - if (nla_put(skb, TCA_NAT_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_NAT_TM, sizeof(t), &t, TCA_NAT_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c index 429c3ab65142..c6e18f230af6 100644 --- a/net/sched/act_pedit.c +++ b/net/sched/act_pedit.c @@ -203,7 +203,7 @@ static int tcf_pedit_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(p->tcf_tm.expires); - if (nla_put(skb, TCA_PEDIT_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_PEDIT_TM, sizeof(t), &t, TCA_PEDIT_PAD)) goto nla_put_failure; kfree(opt); return skb->len; diff --git a/net/sched/act_simple.c b/net/sched/act_simple.c index 75b2be13fbcc..2057fd56d74c 100644 --- a/net/sched/act_simple.c +++ b/net/sched/act_simple.c @@ -155,7 +155,7 @@ static int tcf_simp_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(d->tcf_tm.expires); - if (nla_put(skb, TCA_DEF_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_DEF_TM, sizeof(t), &t, TCA_DEF_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_skbedit.c b/net/sched/act_skbedit.c index cfcdbdc00c9b..51b24998904f 100644 --- a/net/sched/act_skbedit.c +++ b/net/sched/act_skbedit.c @@ -167,7 +167,7 @@ static int tcf_skbedit_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(d->tcf_tm.expires); - if (nla_put(skb, TCA_SKBEDIT_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_SKBEDIT_TM, sizeof(t), &t, TCA_SKBEDIT_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_vlan.c b/net/sched/act_vlan.c index bab8ae0cefc0..c1682ab9bc7e 100644 --- a/net/sched/act_vlan.c +++ b/net/sched/act_vlan.c @@ -175,7 +175,7 @@ static int tcf_vlan_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - v->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - v->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(v->tcf_tm.expires); - if (nla_put(skb, TCA_VLAN_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_VLAN_TM, sizeof(t), &t, TCA_VLAN_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 563cdad76448..e64877a3c084 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -1140,9 +1140,10 @@ static int u32_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, gpf->kcnts[i] += pf->kcnts[i]; } - if (nla_put(skb, TCA_U32_PCNT, - sizeof(struct tc_u32_pcnt) + n->sel.nkeys*sizeof(u64), - gpf)) { + if (nla_put_64bit(skb, TCA_U32_PCNT, + sizeof(struct tc_u32_pcnt) + + n->sel.nkeys * sizeof(u64), + gpf, TCA_U32_PAD)) { kfree(gpf); goto nla_put_failure; } diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 3b180ff72f79..64f71a2155f3 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -1365,7 +1365,8 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid, goto nla_put_failure; if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, TCA_XSTATS, - qdisc_root_sleeping_lock(q), &d) < 0) + qdisc_root_sleeping_lock(q), &d, + TCA_PAD) < 0) goto nla_put_failure; if (q->ops->dump_stats && q->ops->dump_stats(q, &d) < 0) @@ -1679,7 +1680,8 @@ static int tc_fill_tclass(struct sk_buff *skb, struct Qdisc *q, goto nla_put_failure; if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, TCA_XSTATS, - qdisc_root_sleeping_lock(q), &d) < 0) + qdisc_root_sleeping_lock(q), &d, + TCA_PAD) < 0) goto nla_put_failure; if (cl_ops->dump_stats && cl_ops->dump_stats(q, cl, &d) < 0) -- 2.8.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from zimbra13.linbit.com (zimbra.linbit.com [212.69.161.123]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by mail09.linbit.com (LINBIT Mail Daemon) with ESMTPS id 2BA991056448 for ; Tue, 26 Apr 2016 14:36:05 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by zimbra13.linbit.com (Postfix) with ESMTP id 0AE053E9716 for ; Tue, 26 Apr 2016 14:36:04 +0200 (CEST) Received: from zimbra13.linbit.com ([127.0.0.1]) by localhost (zimbra13.linbit.com [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Fq3X2ljWrUxs for ; Tue, 26 Apr 2016 14:36:03 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by zimbra13.linbit.com (Postfix) with ESMTP id DDDF03F79B5 for ; Tue, 26 Apr 2016 14:36:03 +0200 (CEST) Received: from zimbra13.linbit.com ([127.0.0.1]) by localhost (zimbra13.linbit.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id oKaD7aDyic9V for ; Tue, 26 Apr 2016 14:36:03 +0200 (CEST) Received: from soda.linbit (tuerlsteher.linbit.com [86.59.100.100]) by zimbra13.linbit.com (Postfix) with ESMTPS id A899C3EFFFB for ; Tue, 26 Apr 2016 14:36:03 +0200 (CEST) Resent-Message-ID: <20160426123603.GF20950@soda.linbit> Received: from proxy.6wind.com (host.76.145.23.62.rev.coltfrance.com [62.23.145.76]) by mail09.linbit.com (LINBIT Mail Daemon) with ESMTP id 7C2041056446 for ; Tue, 26 Apr 2016 10:12:12 +0200 (CEST) From: Nicolas Dichtel To: netdev@vger.kernel.org Date: Tue, 26 Apr 2016 10:06:18 +0200 Message-Id: <1461657978-13360-9-git-send-email-nicolas.dichtel@6wind.com> In-Reply-To: <1461657978-13360-1-git-send-email-nicolas.dichtel@6wind.com> References: <1461657978-13360-1-git-send-email-nicolas.dichtel@6wind.com> Cc: dev@openvswitch.org, Nicolas Dichtel , sd@queasysnail.net, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, jhs@mojatatu.com, pshelar@nicira.com, lars.ellenberg@linbit.com, jack@suse.com, johannes@sipsolutions.net, philipp.reisner@linbit.com, davem@davemloft.net, kvalo@codeaurora.org, drbd-dev@lists.linbit.com Subject: [Drbd-dev] [PATCH net-next 8/8] sched: align nlattr properly when needed List-Id: "*Coordination* of development, patches, contributions -- *Questions* \(even to developers\) go to drbd-user, please." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Signed-off-by: Nicolas Dichtel --- Documentation/networking/gen_stats.txt | 6 ++++-- include/net/gen_stats.h | 6 ++++-- include/uapi/linux/gen_stats.h | 1 + include/uapi/linux/pkt_cls.h | 2 ++ include/uapi/linux/rtnetlink.h | 1 + include/uapi/linux/tc_act/tc_bpf.h | 1 + include/uapi/linux/tc_act/tc_connmark.h | 1 + include/uapi/linux/tc_act/tc_csum.h | 1 + include/uapi/linux/tc_act/tc_defact.h | 1 + include/uapi/linux/tc_act/tc_gact.h | 1 + include/uapi/linux/tc_act/tc_ife.h | 1 + include/uapi/linux/tc_act/tc_ipt.h | 1 + include/uapi/linux/tc_act/tc_mirred.h | 1 + include/uapi/linux/tc_act/tc_nat.h | 1 + include/uapi/linux/tc_act/tc_pedit.h | 1 + include/uapi/linux/tc_act/tc_skbedit.h | 1 + include/uapi/linux/tc_act/tc_vlan.h | 1 + net/core/gen_stats.c | 35 ++++++++++++++++++++------------- net/sched/act_api.c | 7 +++++-- net/sched/act_bpf.c | 3 ++- net/sched/act_connmark.c | 3 ++- net/sched/act_csum.c | 2 +- net/sched/act_gact.c | 2 +- net/sched/act_ife.c | 2 +- net/sched/act_ipt.c | 2 +- net/sched/act_mirred.c | 2 +- net/sched/act_nat.c | 2 +- net/sched/act_pedit.c | 2 +- net/sched/act_simple.c | 2 +- net/sched/act_skbedit.c | 2 +- net/sched/act_vlan.c | 2 +- net/sched/cls_u32.c | 7 ++++--- net/sched/sch_api.c | 6 ++++-- 33 files changed, 72 insertions(+), 37 deletions(-) diff --git a/Documentation/networking/gen_stats.txt b/Documentation/networking/gen_stats.txt index 70e6275b757a..ff630a87b511 100644 --- a/Documentation/networking/gen_stats.txt +++ b/Documentation/networking/gen_stats.txt @@ -33,7 +33,8 @@ my_dumping_routine(struct sk_buff *skb, ...) { struct gnet_dump dump; - if (gnet_stats_start_copy(skb, TCA_STATS2, &mystruct->lock, &dump) < 0) + if (gnet_stats_start_copy(skb, TCA_STATS2, &mystruct->lock, &dump, + TCA_PAD) < 0) goto rtattr_failure; if (gnet_stats_copy_basic(&dump, &mystruct->bstats) < 0 || @@ -56,7 +57,8 @@ existing TLV types. my_dumping_routine(struct sk_buff *skb, ...) { if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, - TCA_XSTATS, &mystruct->lock, &dump) < 0) + TCA_XSTATS, &mystruct->lock, &dump, + TCA_PAD) < 0) goto rtattr_failure; ... } diff --git a/include/net/gen_stats.h b/include/net/gen_stats.h index cbafa3768d48..610cd397890e 100644 --- a/include/net/gen_stats.h +++ b/include/net/gen_stats.h @@ -19,17 +19,19 @@ struct gnet_dump { /* Backward compatibility */ int compat_tc_stats; int compat_xstats; + int padattr; void * xstats; int xstats_len; struct tc_stats tc_stats; }; int gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock, - struct gnet_dump *d); + struct gnet_dump *d, int padattr); int gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int tc_stats_type, int xstats_type, - spinlock_t *lock, struct gnet_dump *d); + spinlock_t *lock, struct gnet_dump *d, + int padattr); int gnet_stats_copy_basic(struct gnet_dump *d, struct gnet_stats_basic_cpu __percpu *cpu, diff --git a/include/uapi/linux/gen_stats.h b/include/uapi/linux/gen_stats.h index 6487317ea619..52deccc2128e 100644 --- a/include/uapi/linux/gen_stats.h +++ b/include/uapi/linux/gen_stats.h @@ -10,6 +10,7 @@ enum { TCA_STATS_QUEUE, TCA_STATS_APP, TCA_STATS_RATE_EST64, + TCA_STATS_PAD, __TCA_STATS_MAX, }; #define TCA_STATS_MAX (__TCA_STATS_MAX - 1) diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h index c43c5f78b9c4..84660905fedf 100644 --- a/include/uapi/linux/pkt_cls.h +++ b/include/uapi/linux/pkt_cls.h @@ -66,6 +66,7 @@ enum { TCA_ACT_OPTIONS, TCA_ACT_INDEX, TCA_ACT_STATS, + TCA_ACT_PAD, __TCA_ACT_MAX }; @@ -173,6 +174,7 @@ enum { TCA_U32_PCNT, TCA_U32_MARK, TCA_U32_FLAGS, + TCA_U32_PAD, __TCA_U32_MAX }; diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h index a94e0b69c769..262f0379d83a 100644 --- a/include/uapi/linux/rtnetlink.h +++ b/include/uapi/linux/rtnetlink.h @@ -542,6 +542,7 @@ enum { TCA_FCNT, TCA_STATS2, TCA_STAB, + TCA_PAD, __TCA_MAX }; diff --git a/include/uapi/linux/tc_act/tc_bpf.h b/include/uapi/linux/tc_act/tc_bpf.h index 07f17cc70bb3..063d9d465119 100644 --- a/include/uapi/linux/tc_act/tc_bpf.h +++ b/include/uapi/linux/tc_act/tc_bpf.h @@ -26,6 +26,7 @@ enum { TCA_ACT_BPF_OPS, TCA_ACT_BPF_FD, TCA_ACT_BPF_NAME, + TCA_ACT_BPF_PAD, __TCA_ACT_BPF_MAX, }; #define TCA_ACT_BPF_MAX (__TCA_ACT_BPF_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_connmark.h b/include/uapi/linux/tc_act/tc_connmark.h index 994b0971bce2..62a5e944c554 100644 --- a/include/uapi/linux/tc_act/tc_connmark.h +++ b/include/uapi/linux/tc_act/tc_connmark.h @@ -15,6 +15,7 @@ enum { TCA_CONNMARK_UNSPEC, TCA_CONNMARK_PARMS, TCA_CONNMARK_TM, + TCA_CONNMARK_PAD, __TCA_CONNMARK_MAX }; #define TCA_CONNMARK_MAX (__TCA_CONNMARK_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_csum.h b/include/uapi/linux/tc_act/tc_csum.h index a047c49a3153..8ac8041ab5f1 100644 --- a/include/uapi/linux/tc_act/tc_csum.h +++ b/include/uapi/linux/tc_act/tc_csum.h @@ -10,6 +10,7 @@ enum { TCA_CSUM_UNSPEC, TCA_CSUM_PARMS, TCA_CSUM_TM, + TCA_CSUM_PAD, __TCA_CSUM_MAX }; #define TCA_CSUM_MAX (__TCA_CSUM_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_defact.h b/include/uapi/linux/tc_act/tc_defact.h index 17dddb40f740..d2a3abb77aeb 100644 --- a/include/uapi/linux/tc_act/tc_defact.h +++ b/include/uapi/linux/tc_act/tc_defact.h @@ -12,6 +12,7 @@ enum { TCA_DEF_TM, TCA_DEF_PARMS, TCA_DEF_DATA, + TCA_DEF_PAD, __TCA_DEF_MAX }; #define TCA_DEF_MAX (__TCA_DEF_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_gact.h b/include/uapi/linux/tc_act/tc_gact.h index f7bf94eed510..70b536a8f8b2 100644 --- a/include/uapi/linux/tc_act/tc_gact.h +++ b/include/uapi/linux/tc_act/tc_gact.h @@ -25,6 +25,7 @@ enum { TCA_GACT_TM, TCA_GACT_PARMS, TCA_GACT_PROB, + TCA_GACT_PAD, __TCA_GACT_MAX }; #define TCA_GACT_MAX (__TCA_GACT_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_ife.h b/include/uapi/linux/tc_act/tc_ife.h index d648ff66586f..4ece02a77b9a 100644 --- a/include/uapi/linux/tc_act/tc_ife.h +++ b/include/uapi/linux/tc_act/tc_ife.h @@ -23,6 +23,7 @@ enum { TCA_IFE_SMAC, TCA_IFE_TYPE, TCA_IFE_METALST, + TCA_IFE_PAD, __TCA_IFE_MAX }; #define TCA_IFE_MAX (__TCA_IFE_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_ipt.h b/include/uapi/linux/tc_act/tc_ipt.h index 130aaadf6fac..7c6e155dd981 100644 --- a/include/uapi/linux/tc_act/tc_ipt.h +++ b/include/uapi/linux/tc_act/tc_ipt.h @@ -14,6 +14,7 @@ enum { TCA_IPT_CNT, TCA_IPT_TM, TCA_IPT_TARG, + TCA_IPT_PAD, __TCA_IPT_MAX }; #define TCA_IPT_MAX (__TCA_IPT_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_mirred.h b/include/uapi/linux/tc_act/tc_mirred.h index 7561750e8fd6..3d7a2b352a62 100644 --- a/include/uapi/linux/tc_act/tc_mirred.h +++ b/include/uapi/linux/tc_act/tc_mirred.h @@ -20,6 +20,7 @@ enum { TCA_MIRRED_UNSPEC, TCA_MIRRED_TM, TCA_MIRRED_PARMS, + TCA_MIRRED_PAD, __TCA_MIRRED_MAX }; #define TCA_MIRRED_MAX (__TCA_MIRRED_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_nat.h b/include/uapi/linux/tc_act/tc_nat.h index 6663aeba0b9a..923457c9ebf0 100644 --- a/include/uapi/linux/tc_act/tc_nat.h +++ b/include/uapi/linux/tc_act/tc_nat.h @@ -10,6 +10,7 @@ enum { TCA_NAT_UNSPEC, TCA_NAT_PARMS, TCA_NAT_TM, + TCA_NAT_PAD, __TCA_NAT_MAX }; #define TCA_NAT_MAX (__TCA_NAT_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_pedit.h b/include/uapi/linux/tc_act/tc_pedit.h index 716cfabcd5b2..6389959a5157 100644 --- a/include/uapi/linux/tc_act/tc_pedit.h +++ b/include/uapi/linux/tc_act/tc_pedit.h @@ -10,6 +10,7 @@ enum { TCA_PEDIT_UNSPEC, TCA_PEDIT_TM, TCA_PEDIT_PARMS, + TCA_PEDIT_PAD, __TCA_PEDIT_MAX }; #define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_skbedit.h b/include/uapi/linux/tc_act/tc_skbedit.h index 7a2e910a5f08..fecb5cc48c40 100644 --- a/include/uapi/linux/tc_act/tc_skbedit.h +++ b/include/uapi/linux/tc_act/tc_skbedit.h @@ -39,6 +39,7 @@ enum { TCA_SKBEDIT_PRIORITY, TCA_SKBEDIT_QUEUE_MAPPING, TCA_SKBEDIT_MARK, + TCA_SKBEDIT_PAD, __TCA_SKBEDIT_MAX }; #define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1) diff --git a/include/uapi/linux/tc_act/tc_vlan.h b/include/uapi/linux/tc_act/tc_vlan.h index f7b8d448b960..31151ff6264f 100644 --- a/include/uapi/linux/tc_act/tc_vlan.h +++ b/include/uapi/linux/tc_act/tc_vlan.h @@ -28,6 +28,7 @@ enum { TCA_VLAN_PARMS, TCA_VLAN_PUSH_VLAN_ID, TCA_VLAN_PUSH_VLAN_PROTOCOL, + TCA_VLAN_PAD, __TCA_VLAN_MAX, }; #define TCA_VLAN_MAX (__TCA_VLAN_MAX - 1) diff --git a/net/core/gen_stats.c b/net/core/gen_stats.c index e640462ea8bf..f96ee8b9478d 100644 --- a/net/core/gen_stats.c +++ b/net/core/gen_stats.c @@ -25,9 +25,9 @@ static inline int -gnet_stats_copy(struct gnet_dump *d, int type, void *buf, int size) +gnet_stats_copy(struct gnet_dump *d, int type, void *buf, int size, int padattr) { - if (nla_put(d->skb, type, size, buf)) + if (nla_put_64bit(d->skb, type, size, buf, padattr)) goto nla_put_failure; return 0; @@ -59,7 +59,8 @@ nla_put_failure: */ int gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int tc_stats_type, - int xstats_type, spinlock_t *lock, struct gnet_dump *d) + int xstats_type, spinlock_t *lock, + struct gnet_dump *d, int padattr) __acquires(lock) { memset(d, 0, sizeof(*d)); @@ -71,16 +72,17 @@ gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int tc_stats_type, d->skb = skb; d->compat_tc_stats = tc_stats_type; d->compat_xstats = xstats_type; + d->padattr = padattr; if (d->tail) - return gnet_stats_copy(d, type, NULL, 0); + return gnet_stats_copy(d, type, NULL, 0, padattr); return 0; } EXPORT_SYMBOL(gnet_stats_start_copy_compat); /** - * gnet_stats_start_copy_compat - start dumping procedure in compatibility mode + * gnet_stats_start_copy - start dumping procedure in compatibility mode * @skb: socket buffer to put statistics TLVs into * @type: TLV type for top level statistic TLV * @lock: statistics lock @@ -94,9 +96,9 @@ EXPORT_SYMBOL(gnet_stats_start_copy_compat); */ int gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock, - struct gnet_dump *d) + struct gnet_dump *d, int padattr) { - return gnet_stats_start_copy_compat(skb, type, 0, 0, lock, d); + return gnet_stats_start_copy_compat(skb, type, 0, 0, lock, d, padattr); } EXPORT_SYMBOL(gnet_stats_start_copy); @@ -169,7 +171,8 @@ gnet_stats_copy_basic(struct gnet_dump *d, memset(&sb, 0, sizeof(sb)); sb.bytes = bstats.bytes; sb.packets = bstats.packets; - return gnet_stats_copy(d, TCA_STATS_BASIC, &sb, sizeof(sb)); + return gnet_stats_copy(d, TCA_STATS_BASIC, &sb, sizeof(sb), + TCA_STATS_PAD); } return 0; } @@ -208,11 +211,13 @@ gnet_stats_copy_rate_est(struct gnet_dump *d, } if (d->tail) { - res = gnet_stats_copy(d, TCA_STATS_RATE_EST, &est, sizeof(est)); + res = gnet_stats_copy(d, TCA_STATS_RATE_EST, &est, sizeof(est), + TCA_STATS_PAD); if (res < 0 || est.bps == r->bps) return res; /* emit 64bit stats only if needed */ - return gnet_stats_copy(d, TCA_STATS_RATE_EST64, r, sizeof(*r)); + return gnet_stats_copy(d, TCA_STATS_RATE_EST64, r, sizeof(*r), + TCA_STATS_PAD); } return 0; @@ -286,7 +291,8 @@ gnet_stats_copy_queue(struct gnet_dump *d, if (d->tail) return gnet_stats_copy(d, TCA_STATS_QUEUE, - &qstats, sizeof(qstats)); + &qstats, sizeof(qstats), + TCA_STATS_PAD); return 0; } @@ -316,7 +322,8 @@ gnet_stats_copy_app(struct gnet_dump *d, void *st, int len) } if (d->tail) - return gnet_stats_copy(d, TCA_STATS_APP, st, len); + return gnet_stats_copy(d, TCA_STATS_APP, st, len, + TCA_STATS_PAD); return 0; @@ -347,12 +354,12 @@ gnet_stats_finish_copy(struct gnet_dump *d) if (d->compat_tc_stats) if (gnet_stats_copy(d, d->compat_tc_stats, &d->tc_stats, - sizeof(d->tc_stats)) < 0) + sizeof(d->tc_stats), d->padattr) < 0) return -1; if (d->compat_xstats && d->xstats) { if (gnet_stats_copy(d, d->compat_xstats, d->xstats, - d->xstats_len) < 0) + d->xstats_len, d->padattr) < 0) return -1; } diff --git a/net/sched/act_api.c b/net/sched/act_api.c index 96066665e376..336774a535c3 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c @@ -657,12 +657,15 @@ int tcf_action_copy_stats(struct sk_buff *skb, struct tc_action *a, if (compat_mode) { if (a->type == TCA_OLD_COMPAT) err = gnet_stats_start_copy_compat(skb, 0, - TCA_STATS, TCA_XSTATS, &p->tcfc_lock, &d); + TCA_STATS, + TCA_XSTATS, + &p->tcfc_lock, &d, + TCA_PAD); else return 0; } else err = gnet_stats_start_copy(skb, TCA_ACT_STATS, - &p->tcfc_lock, &d); + &p->tcfc_lock, &d, TCA_ACT_PAD); if (err < 0) goto errout; diff --git a/net/sched/act_bpf.c b/net/sched/act_bpf.c index 8c9f1f0459ab..4fd703362563 100644 --- a/net/sched/act_bpf.c +++ b/net/sched/act_bpf.c @@ -156,7 +156,8 @@ static int tcf_bpf_dump(struct sk_buff *skb, struct tc_action *act, tm.lastuse = jiffies_to_clock_t(jiffies - prog->tcf_tm.lastuse); tm.expires = jiffies_to_clock_t(prog->tcf_tm.expires); - if (nla_put(skb, TCA_ACT_BPF_TM, sizeof(tm), &tm)) + if (nla_put_64bit(skb, TCA_ACT_BPF_TM, sizeof(tm), &tm, + TCA_ACT_BPF_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_connmark.c b/net/sched/act_connmark.c index c0ed93ce2391..2ba700c765e0 100644 --- a/net/sched/act_connmark.c +++ b/net/sched/act_connmark.c @@ -163,7 +163,8 @@ static inline int tcf_connmark_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - ci->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - ci->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(ci->tcf_tm.expires); - if (nla_put(skb, TCA_CONNMARK_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_CONNMARK_TM, sizeof(t), &t, + TCA_CONNMARK_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_csum.c b/net/sched/act_csum.c index d22426cdebc0..28e934ed038a 100644 --- a/net/sched/act_csum.c +++ b/net/sched/act_csum.c @@ -549,7 +549,7 @@ static int tcf_csum_dump(struct sk_buff *skb, t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(p->tcf_tm.expires); - if (nla_put(skb, TCA_CSUM_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_CSUM_TM, sizeof(t), &t, TCA_CSUM_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_gact.c b/net/sched/act_gact.c index 887fc1f209ff..1a6e09fbb2a5 100644 --- a/net/sched/act_gact.c +++ b/net/sched/act_gact.c @@ -177,7 +177,7 @@ static int tcf_gact_dump(struct sk_buff *skb, struct tc_action *a, int bind, int t.install = jiffies_to_clock_t(jiffies - gact->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - gact->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(gact->tcf_tm.expires); - if (nla_put(skb, TCA_GACT_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_GACT_TM, sizeof(t), &t, TCA_GACT_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_ife.c b/net/sched/act_ife.c index c589a9ba506a..556f44c9c454 100644 --- a/net/sched/act_ife.c +++ b/net/sched/act_ife.c @@ -550,7 +550,7 @@ static int tcf_ife_dump(struct sk_buff *skb, struct tc_action *a, int bind, t.install = jiffies_to_clock_t(jiffies - ife->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - ife->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(ife->tcf_tm.expires); - if (nla_put(skb, TCA_IFE_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_IFE_TM, sizeof(t), &t, TCA_IFE_PAD)) goto nla_put_failure; if (!is_zero_ether_addr(ife->eth_dst)) { diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c index 350e134cffb3..1464f6a09446 100644 --- a/net/sched/act_ipt.c +++ b/net/sched/act_ipt.c @@ -275,7 +275,7 @@ static int tcf_ipt_dump(struct sk_buff *skb, struct tc_action *a, int bind, int tm.install = jiffies_to_clock_t(jiffies - ipt->tcf_tm.install); tm.lastuse = jiffies_to_clock_t(jiffies - ipt->tcf_tm.lastuse); tm.expires = jiffies_to_clock_t(ipt->tcf_tm.expires); - if (nla_put(skb, TCA_IPT_TM, sizeof (tm), &tm)) + if (nla_put_64bit(skb, TCA_IPT_TM, sizeof(tm), &tm, TCA_IPT_PAD)) goto nla_put_failure; kfree(t); return skb->len; diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c index e8a760cf7775..dea57c1ec90c 100644 --- a/net/sched/act_mirred.c +++ b/net/sched/act_mirred.c @@ -214,7 +214,7 @@ static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, i t.install = jiffies_to_clock_t(jiffies - m->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - m->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(m->tcf_tm.expires); - if (nla_put(skb, TCA_MIRRED_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_MIRRED_TM, sizeof(t), &t, TCA_MIRRED_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c index 0f65cdfbfb1d..c0a879f940de 100644 --- a/net/sched/act_nat.c +++ b/net/sched/act_nat.c @@ -267,7 +267,7 @@ static int tcf_nat_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(p->tcf_tm.expires); - if (nla_put(skb, TCA_NAT_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_NAT_TM, sizeof(t), &t, TCA_NAT_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c index 429c3ab65142..c6e18f230af6 100644 --- a/net/sched/act_pedit.c +++ b/net/sched/act_pedit.c @@ -203,7 +203,7 @@ static int tcf_pedit_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(p->tcf_tm.expires); - if (nla_put(skb, TCA_PEDIT_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_PEDIT_TM, sizeof(t), &t, TCA_PEDIT_PAD)) goto nla_put_failure; kfree(opt); return skb->len; diff --git a/net/sched/act_simple.c b/net/sched/act_simple.c index 75b2be13fbcc..2057fd56d74c 100644 --- a/net/sched/act_simple.c +++ b/net/sched/act_simple.c @@ -155,7 +155,7 @@ static int tcf_simp_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(d->tcf_tm.expires); - if (nla_put(skb, TCA_DEF_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_DEF_TM, sizeof(t), &t, TCA_DEF_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_skbedit.c b/net/sched/act_skbedit.c index cfcdbdc00c9b..51b24998904f 100644 --- a/net/sched/act_skbedit.c +++ b/net/sched/act_skbedit.c @@ -167,7 +167,7 @@ static int tcf_skbedit_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(d->tcf_tm.expires); - if (nla_put(skb, TCA_SKBEDIT_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_SKBEDIT_TM, sizeof(t), &t, TCA_SKBEDIT_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/act_vlan.c b/net/sched/act_vlan.c index bab8ae0cefc0..c1682ab9bc7e 100644 --- a/net/sched/act_vlan.c +++ b/net/sched/act_vlan.c @@ -175,7 +175,7 @@ static int tcf_vlan_dump(struct sk_buff *skb, struct tc_action *a, t.install = jiffies_to_clock_t(jiffies - v->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - v->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(v->tcf_tm.expires); - if (nla_put(skb, TCA_VLAN_TM, sizeof(t), &t)) + if (nla_put_64bit(skb, TCA_VLAN_TM, sizeof(t), &t, TCA_VLAN_PAD)) goto nla_put_failure; return skb->len; diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 563cdad76448..e64877a3c084 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -1140,9 +1140,10 @@ static int u32_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, gpf->kcnts[i] += pf->kcnts[i]; } - if (nla_put(skb, TCA_U32_PCNT, - sizeof(struct tc_u32_pcnt) + n->sel.nkeys*sizeof(u64), - gpf)) { + if (nla_put_64bit(skb, TCA_U32_PCNT, + sizeof(struct tc_u32_pcnt) + + n->sel.nkeys * sizeof(u64), + gpf, TCA_U32_PAD)) { kfree(gpf); goto nla_put_failure; } diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 3b180ff72f79..64f71a2155f3 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -1365,7 +1365,8 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid, goto nla_put_failure; if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, TCA_XSTATS, - qdisc_root_sleeping_lock(q), &d) < 0) + qdisc_root_sleeping_lock(q), &d, + TCA_PAD) < 0) goto nla_put_failure; if (q->ops->dump_stats && q->ops->dump_stats(q, &d) < 0) @@ -1679,7 +1680,8 @@ static int tc_fill_tclass(struct sk_buff *skb, struct Qdisc *q, goto nla_put_failure; if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, TCA_XSTATS, - qdisc_root_sleeping_lock(q), &d) < 0) + qdisc_root_sleeping_lock(q), &d, + TCA_PAD) < 0) goto nla_put_failure; if (cl_ops->dump_stats && cl_ops->dump_stats(q, cl, &d) < 0) -- 2.8.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Dichtel Subject: [PATCH net-next 8/8] sched: align nlattr properly when needed Date: Tue, 26 Apr 2016 10:06:18 +0200 Message-ID: <1461657978-13360-9-git-send-email-nicolas.dichtel@6wind.com> References: <1461657978-13360-1-git-send-email-nicolas.dichtel@6wind.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: dev-yBygre7rU0TnMu66kgdUjQ@public.gmane.org, Nicolas Dichtel , sd-y1jBWg8GRStKuXlAQpz2QA@public.gmane.org, linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, jhs-jkUAjuhPggJWk0Htik3J/w@public.gmane.org, lars.ellenberg-63ez5xqkn6DQT0dZR+AlfA@public.gmane.org, jack-IBi9RG/b67k@public.gmane.org, johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org, philipp.reisner-63ez5xqkn6DQT0dZR+AlfA@public.gmane.org, davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org, kvalo-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, drbd-dev-cunTk1MwBs8qoQakbn7OcQ@public.gmane.org To: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Return-path: In-Reply-To: <1461657978-13360-1-git-send-email-nicolas.dichtel-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-yBygre7rU0TnMu66kgdUjQ@public.gmane.org Sender: "dev" List-Id: netdev.vger.kernel.org U2lnbmVkLW9mZi1ieTogTmljb2xhcyBEaWNodGVsIDxuaWNvbGFzLmRpY2h0ZWxANndpbmQuY29t PgotLS0KIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9nZW5fc3RhdHMudHh0ICB8ICA2ICsrKyst LQogaW5jbHVkZS9uZXQvZ2VuX3N0YXRzLmggICAgICAgICAgICAgICAgIHwgIDYgKysrKy0tCiBp bmNsdWRlL3VhcGkvbGludXgvZ2VuX3N0YXRzLmggICAgICAgICAgfCAgMSArCiBpbmNsdWRlL3Vh cGkvbGludXgvcGt0X2Nscy5oICAgICAgICAgICAgfCAgMiArKwogaW5jbHVkZS91YXBpL2xpbnV4 L3J0bmV0bGluay5oICAgICAgICAgIHwgIDEgKwogaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90 Y19icGYuaCAgICAgIHwgIDEgKwogaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19jb25ubWFy ay5oIHwgIDEgKwogaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19jc3VtLmggICAgIHwgIDEg KwogaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19kZWZhY3QuaCAgIHwgIDEgKwogaW5jbHVk ZS91YXBpL2xpbnV4L3RjX2FjdC90Y19nYWN0LmggICAgIHwgIDEgKwogaW5jbHVkZS91YXBpL2xp bnV4L3RjX2FjdC90Y19pZmUuaCAgICAgIHwgIDEgKwogaW5jbHVkZS91YXBpL2xpbnV4L3RjX2Fj dC90Y19pcHQuaCAgICAgIHwgIDEgKwogaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19taXJy ZWQuaCAgIHwgIDEgKwogaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19uYXQuaCAgICAgIHwg IDEgKwogaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19wZWRpdC5oICAgIHwgIDEgKwogaW5j bHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19za2JlZGl0LmggIHwgIDEgKwogaW5jbHVkZS91YXBp L2xpbnV4L3RjX2FjdC90Y192bGFuLmggICAgIHwgIDEgKwogbmV0L2NvcmUvZ2VuX3N0YXRzLmMg ICAgICAgICAgICAgICAgICAgIHwgMzUgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t CiBuZXQvc2NoZWQvYWN0X2FwaS5jICAgICAgICAgICAgICAgICAgICAgfCAgNyArKysrKy0tCiBu ZXQvc2NoZWQvYWN0X2JwZi5jICAgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KIG5ldC9zY2hl ZC9hY3RfY29ubm1hcmsuYyAgICAgICAgICAgICAgICB8ICAzICsrLQogbmV0L3NjaGVkL2FjdF9j c3VtLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIG5ldC9zY2hlZC9hY3RfZ2FjdC5jICAg ICAgICAgICAgICAgICAgICB8ICAyICstCiBuZXQvc2NoZWQvYWN0X2lmZS5jICAgICAgICAgICAg ICAgICAgICAgfCAgMiArLQogbmV0L3NjaGVkL2FjdF9pcHQuYyAgICAgICAgICAgICAgICAgICAg IHwgIDIgKy0KIG5ldC9zY2hlZC9hY3RfbWlycmVkLmMgICAgICAgICAgICAgICAgICB8ICAyICst CiBuZXQvc2NoZWQvYWN0X25hdC5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQogbmV0L3Nj aGVkL2FjdF9wZWRpdC5jICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIG5ldC9zY2hlZC9hY3Rf c2ltcGxlLmMgICAgICAgICAgICAgICAgICB8ICAyICstCiBuZXQvc2NoZWQvYWN0X3NrYmVkaXQu YyAgICAgICAgICAgICAgICAgfCAgMiArLQogbmV0L3NjaGVkL2FjdF92bGFuLmMgICAgICAgICAg ICAgICAgICAgIHwgIDIgKy0KIG5ldC9zY2hlZC9jbHNfdTMyLmMgICAgICAgICAgICAgICAgICAg ICB8ICA3ICsrKystLS0KIG5ldC9zY2hlZC9zY2hfYXBpLmMgICAgICAgICAgICAgICAgICAgICB8 ICA2ICsrKystLQogMzMgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbl9zdGF0cy50 eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZ2VuX3N0YXRzLnR4dAppbmRleCA3MGU2Mjc1 Yjc1N2EuLmZmNjMwYTg3YjUxMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5n L2dlbl9zdGF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbl9zdGF0cy50 eHQKQEAgLTMzLDcgKzMzLDggQEAgbXlfZHVtcGluZ19yb3V0aW5lKHN0cnVjdCBza19idWZmICpz a2IsIC4uLikKIHsKIAlzdHJ1Y3QgZ25ldF9kdW1wIGR1bXA7CiAKLQlpZiAoZ25ldF9zdGF0c19z dGFydF9jb3B5KHNrYiwgVENBX1NUQVRTMiwgJm15c3RydWN0LT5sb2NrLCAmZHVtcCkgPCAwKQor CWlmIChnbmV0X3N0YXRzX3N0YXJ0X2NvcHkoc2tiLCBUQ0FfU1RBVFMyLCAmbXlzdHJ1Y3QtPmxv Y2ssICZkdW1wLAorCQkJCSAgVENBX1BBRCkgPCAwKQogCQlnb3RvIHJ0YXR0cl9mYWlsdXJlOwog CiAJaWYgKGduZXRfc3RhdHNfY29weV9iYXNpYygmZHVtcCwgJm15c3RydWN0LT5ic3RhdHMpIDwg MCB8fApAQCAtNTYsNyArNTcsOCBAQCBleGlzdGluZyBUTFYgdHlwZXMuCiBteV9kdW1waW5nX3Jv dXRpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgLi4uKQogewogICAgIGlmIChnbmV0X3N0YXRzX3N0 YXJ0X2NvcHlfY29tcGF0KHNrYiwgVENBX1NUQVRTMiwgVENBX1NUQVRTLAotCQlUQ0FfWFNUQVRT LCAmbXlzdHJ1Y3QtPmxvY2ssICZkdW1wKSA8IDApCisJCQkJICAgICBUQ0FfWFNUQVRTLCAmbXlz dHJ1Y3QtPmxvY2ssICZkdW1wLAorCQkJCSAgICAgVENBX1BBRCkgPCAwKQogCQlnb3RvIHJ0YXR0 cl9mYWlsdXJlOwogCS4uLgogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZ2VuX3N0YXRzLmgg Yi9pbmNsdWRlL25ldC9nZW5fc3RhdHMuaAppbmRleCBjYmFmYTM3NjhkNDguLjYxMGNkMzk3ODkw ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZ2VuX3N0YXRzLmgKKysrIGIvaW5jbHVkZS9uZXQv Z2VuX3N0YXRzLmgKQEAgLTE5LDE3ICsxOSwxOSBAQCBzdHJ1Y3QgZ25ldF9kdW1wIHsKIAkvKiBC YWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAJaW50ICAgICAgICAgICAgICAgY29tcGF0X3RjX3N0 YXRzOwogCWludCAgICAgICAgICAgICAgIGNvbXBhdF94c3RhdHM7CisJaW50ICAgICAgICAgICAg ICAgcGFkYXR0cjsKIAl2b2lkICogICAgICAgICAgICB4c3RhdHM7CiAJaW50ICAgICAgICAgICAg ICAgeHN0YXRzX2xlbjsKIAlzdHJ1Y3QgdGNfc3RhdHMgICB0Y19zdGF0czsKIH07CiAKIGludCBn bmV0X3N0YXRzX3N0YXJ0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHR5cGUsIHNwaW5s b2NrX3QgKmxvY2ssCi0JCQkgIHN0cnVjdCBnbmV0X2R1bXAgKmQpOworCQkJICBzdHJ1Y3QgZ25l dF9kdW1wICpkLCBpbnQgcGFkYXR0cik7CiAKIGludCBnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29t cGF0KHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLAogCQkJCSBpbnQgdGNfc3RhdHNfdHlw ZSwgaW50IHhzdGF0c190eXBlLAotCQkJCSBzcGlubG9ja190ICpsb2NrLCBzdHJ1Y3QgZ25ldF9k dW1wICpkKTsKKwkJCQkgc3BpbmxvY2tfdCAqbG9jaywgc3RydWN0IGduZXRfZHVtcCAqZCwKKwkJ CQkgaW50IHBhZGF0dHIpOwogCiBpbnQgZ25ldF9zdGF0c19jb3B5X2Jhc2ljKHN0cnVjdCBnbmV0 X2R1bXAgKmQsCiAJCQkgIHN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljX2NwdSBfX3BlcmNwdSAqY3B1 LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2dlbl9zdGF0cy5oIGIvaW5jbHVkZS91 YXBpL2xpbnV4L2dlbl9zdGF0cy5oCmluZGV4IDY0ODczMTdlYTYxOS4uNTJkZWNjYzIxMjhlIDEw MDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZ2VuX3N0YXRzLmgKKysrIGIvaW5jbHVkZS91 YXBpL2xpbnV4L2dlbl9zdGF0cy5oCkBAIC0xMCw2ICsxMCw3IEBAIGVudW0gewogCVRDQV9TVEFU U19RVUVVRSwKIAlUQ0FfU1RBVFNfQVBQLAogCVRDQV9TVEFUU19SQVRFX0VTVDY0LAorCVRDQV9T VEFUU19QQUQsCiAJX19UQ0FfU1RBVFNfTUFYLAogfTsKICNkZWZpbmUgVENBX1NUQVRTX01BWCAo X19UQ0FfU1RBVFNfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rf Y2xzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcGt0X2Nscy5oCmluZGV4IGM0M2M1Zjc4YjljNC4u ODQ2NjA5MDVmZWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcGt0X2Nscy5oCisr KyBiL2luY2x1ZGUvdWFwaS9saW51eC9wa3RfY2xzLmgKQEAgLTY2LDYgKzY2LDcgQEAgZW51bSB7 CiAJVENBX0FDVF9PUFRJT05TLAogCVRDQV9BQ1RfSU5ERVgsCiAJVENBX0FDVF9TVEFUUywKKwlU Q0FfQUNUX1BBRCwKIAlfX1RDQV9BQ1RfTUFYCiB9OwogCkBAIC0xNzMsNiArMTc0LDcgQEAgZW51 bSB7CiAJVENBX1UzMl9QQ05ULAogCVRDQV9VMzJfTUFSSywKIAlUQ0FfVTMyX0ZMQUdTLAorCVRD QV9VMzJfUEFELAogCV9fVENBX1UzMl9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFw aS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAppbmRl eCBhOTRlMGI2OWM3NjkuLjI2MmYwMzc5ZDgzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xp bnV4L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaApAQCAt NTQyLDYgKzU0Miw3IEBAIGVudW0gewogCVRDQV9GQ05ULAogCVRDQV9TVEFUUzIsCiAJVENBX1NU QUIsCisJVENBX1BBRCwKIAlfX1RDQV9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFw aS9saW51eC90Y19hY3QvdGNfYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2Jw Zi5oCmluZGV4IDA3ZjE3Y2M3MGJiMy4uMDYzZDlkNDY1MTE5IDEwMDY0NAotLS0gYS9pbmNsdWRl L3VhcGkvbGludXgvdGNfYWN0L3RjX2JwZi5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC90Y19h Y3QvdGNfYnBmLmgKQEAgLTI2LDYgKzI2LDcgQEAgZW51bSB7CiAJVENBX0FDVF9CUEZfT1BTLAog CVRDQV9BQ1RfQlBGX0ZELAogCVRDQV9BQ1RfQlBGX05BTUUsCisJVENBX0FDVF9CUEZfUEFELAog CV9fVENBX0FDVF9CUEZfTUFYLAogfTsKICNkZWZpbmUgVENBX0FDVF9CUEZfTUFYIChfX1RDQV9B Q1RfQlBGX01BWCAtIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3Rj X2Nvbm5tYXJrLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2Nvbm5tYXJrLmgKaW5k ZXggOTk0YjA5NzFiY2UyLi42MmE1ZTk0NGM1NTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9s aW51eC90Y19hY3QvdGNfY29ubm1hcmsuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0 L3RjX2Nvbm5tYXJrLmgKQEAgLTE1LDYgKzE1LDcgQEAgZW51bSB7CiAJVENBX0NPTk5NQVJLX1VO U1BFQywKIAlUQ0FfQ09OTk1BUktfUEFSTVMsCiAJVENBX0NPTk5NQVJLX1RNLAorCVRDQV9DT05O TUFSS19QQUQsCiAJX19UQ0FfQ09OTk1BUktfTUFYCiB9OwogI2RlZmluZSBUQ0FfQ09OTk1BUktf TUFYIChfX1RDQV9DT05OTUFSS19NQVggLSAxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xp bnV4L3RjX2FjdC90Y19jc3VtLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2NzdW0u aAppbmRleCBhMDQ3YzQ5YTMxNTMuLjhhYzgwNDFhYjVmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91 YXBpL2xpbnV4L3RjX2FjdC90Y19jc3VtLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2Fj dC90Y19jc3VtLmgKQEAgLTEwLDYgKzEwLDcgQEAgZW51bSB7CiAJVENBX0NTVU1fVU5TUEVDLAog CVRDQV9DU1VNX1BBUk1TLAogCVRDQV9DU1VNX1RNLAorCVRDQV9DU1VNX1BBRCwKIAlfX1RDQV9D U1VNX01BWAogfTsKICNkZWZpbmUgVENBX0NTVU1fTUFYIChfX1RDQV9DU1VNX01BWCAtIDEpCmRp ZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2RlZmFjdC5oIGIvaW5jbHVk ZS91YXBpL2xpbnV4L3RjX2FjdC90Y19kZWZhY3QuaAppbmRleCAxN2RkZGI0MGY3NDAuLmQyYTNh YmI3N2FlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19kZWZhY3Qu aAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2RlZmFjdC5oCkBAIC0xMiw2ICsx Miw3IEBAIGVudW0gewogCVRDQV9ERUZfVE0sCiAJVENBX0RFRl9QQVJNUywKIAlUQ0FfREVGX0RB VEEsCisJVENBX0RFRl9QQUQsCiAJX19UQ0FfREVGX01BWAogfTsKICNkZWZpbmUgVENBX0RFRl9N QVggKF9fVENBX0RFRl9NQVggLSAxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3Rj X2FjdC90Y19nYWN0LmggYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2dhY3QuaAppbmRl eCBmN2JmOTRlZWQ1MTAuLjcwYjUzNmE4ZjhiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xp bnV4L3RjX2FjdC90Y19nYWN0LmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19n YWN0LmgKQEAgLTI1LDYgKzI1LDcgQEAgZW51bSB7CiAJVENBX0dBQ1RfVE0sCiAJVENBX0dBQ1Rf UEFSTVMsCiAJVENBX0dBQ1RfUFJPQiwKKwlUQ0FfR0FDVF9QQUQsCiAJX19UQ0FfR0FDVF9NQVgK IH07CiAjZGVmaW5lIFRDQV9HQUNUX01BWCAoX19UQ0FfR0FDVF9NQVggLSAxKQpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19pZmUuaCBiL2luY2x1ZGUvdWFwaS9saW51 eC90Y19hY3QvdGNfaWZlLmgKaW5kZXggZDY0OGZmNjY1ODZmLi40ZWNlMDJhNzdiOWEgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfaWZlLmgKKysrIGIvaW5jbHVkZS91 YXBpL2xpbnV4L3RjX2FjdC90Y19pZmUuaApAQCAtMjMsNiArMjMsNyBAQCBlbnVtIHsKIAlUQ0Ff SUZFX1NNQUMsCiAJVENBX0lGRV9UWVBFLAogCVRDQV9JRkVfTUVUQUxTVCwKKwlUQ0FfSUZFX1BB RCwKIAlfX1RDQV9JRkVfTUFYCiB9OwogI2RlZmluZSBUQ0FfSUZFX01BWCAoX19UQ0FfSUZFX01B WCAtIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2lwdC5oIGIv aW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19pcHQuaAppbmRleCAxMzBhYWFkZjZmYWMuLjdj NmUxNTVkZDk4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19pcHQu aAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2lwdC5oCkBAIC0xNCw2ICsxNCw3 IEBAIGVudW0gewogCVRDQV9JUFRfQ05ULAogCVRDQV9JUFRfVE0sCiAJVENBX0lQVF9UQVJHLAor CVRDQV9JUFRfUEFELAogCV9fVENBX0lQVF9NQVgKIH07CiAjZGVmaW5lIFRDQV9JUFRfTUFYIChf X1RDQV9JUFRfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3Qv dGNfbWlycmVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX21pcnJlZC5oCmluZGV4 IDc1NjE3NTBlOGZkNi4uM2Q3YTJiMzUyYTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGlu dXgvdGNfYWN0L3RjX21pcnJlZC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNf bWlycmVkLmgKQEAgLTIwLDYgKzIwLDcgQEAgZW51bSB7CiAJVENBX01JUlJFRF9VTlNQRUMsCiAJ VENBX01JUlJFRF9UTSwKIAlUQ0FfTUlSUkVEX1BBUk1TLAorCVRDQV9NSVJSRURfUEFELAogCV9f VENBX01JUlJFRF9NQVgKIH07CiAjZGVmaW5lIFRDQV9NSVJSRURfTUFYIChfX1RDQV9NSVJSRURf TUFYIC0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfbmF0Lmgg Yi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX25hdC5oCmluZGV4IDY2NjNhZWJhMGI5YS4u OTIzNDU3YzllYmYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX25h dC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfbmF0LmgKQEAgLTEwLDYgKzEw LDcgQEAgZW51bSB7CiAJVENBX05BVF9VTlNQRUMsCiAJVENBX05BVF9QQVJNUywKIAlUQ0FfTkFU X1RNLAorCVRDQV9OQVRfUEFELAogCV9fVENBX05BVF9NQVgKIH07CiAjZGVmaW5lIFRDQV9OQVRf TUFYIChfX1RDQV9OQVRfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90 Y19hY3QvdGNfcGVkaXQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfcGVkaXQuaApp bmRleCA3MTZjZmFiY2Q1YjIuLjYzODk5NTlhNTE1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBp L2xpbnV4L3RjX2FjdC90Y19wZWRpdC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3Qv dGNfcGVkaXQuaApAQCAtMTAsNiArMTAsNyBAQCBlbnVtIHsKIAlUQ0FfUEVESVRfVU5TUEVDLAog CVRDQV9QRURJVF9UTSwKIAlUQ0FfUEVESVRfUEFSTVMsCisJVENBX1BFRElUX1BBRCwKIAlfX1RD QV9QRURJVF9NQVgKIH07CiAjZGVmaW5lIFRDQV9QRURJVF9NQVggKF9fVENBX1BFRElUX01BWCAt IDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX3NrYmVkaXQuaCBi L2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfc2tiZWRpdC5oCmluZGV4IDdhMmU5MTBhNWYw OC4uZmVjYjVjYzQ4YzQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3Rj X3NrYmVkaXQuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX3NrYmVkaXQuaApA QCAtMzksNiArMzksNyBAQCBlbnVtIHsKIAlUQ0FfU0tCRURJVF9QUklPUklUWSwKIAlUQ0FfU0tC RURJVF9RVUVVRV9NQVBQSU5HLAogCVRDQV9TS0JFRElUX01BUkssCisJVENBX1NLQkVESVRfUEFE LAogCV9fVENBX1NLQkVESVRfTUFYCiB9OwogI2RlZmluZSBUQ0FfU0tCRURJVF9NQVggKF9fVENB X1NLQkVESVRfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3Qv dGNfdmxhbi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y192bGFuLmgKaW5kZXggZjdi OGQ0NDhiOTYwLi4zMTE1MWZmNjI2NGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC90 Y19hY3QvdGNfdmxhbi5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfdmxhbi5o CkBAIC0yOCw2ICsyOCw3IEBAIGVudW0gewogCVRDQV9WTEFOX1BBUk1TLAogCVRDQV9WTEFOX1BV U0hfVkxBTl9JRCwKIAlUQ0FfVkxBTl9QVVNIX1ZMQU5fUFJPVE9DT0wsCisJVENBX1ZMQU5fUEFE LAogCV9fVENBX1ZMQU5fTUFYLAogfTsKICNkZWZpbmUgVENBX1ZMQU5fTUFYIChfX1RDQV9WTEFO X01BWCAtIDEpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9nZW5fc3RhdHMuYyBiL25ldC9jb3JlL2dl bl9zdGF0cy5jCmluZGV4IGU2NDA0NjJlYThiZi4uZjk2ZWU4Yjk0NzhkIDEwMDY0NAotLS0gYS9u ZXQvY29yZS9nZW5fc3RhdHMuYworKysgYi9uZXQvY29yZS9nZW5fc3RhdHMuYwpAQCAtMjUsOSAr MjUsOSBAQAogCiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1nbmV0X3N0YXRzX2NvcHkoc3RydWN0IGdu ZXRfZHVtcCAqZCwgaW50IHR5cGUsIHZvaWQgKmJ1ZiwgaW50IHNpemUpCitnbmV0X3N0YXRzX2Nv cHkoc3RydWN0IGduZXRfZHVtcCAqZCwgaW50IHR5cGUsIHZvaWQgKmJ1ZiwgaW50IHNpemUsIGlu dCBwYWRhdHRyKQogewotCWlmIChubGFfcHV0KGQtPnNrYiwgdHlwZSwgc2l6ZSwgYnVmKSkKKwlp ZiAobmxhX3B1dF82NGJpdChkLT5za2IsIHR5cGUsIHNpemUsIGJ1ZiwgcGFkYXR0cikpCiAJCWdv dG8gbmxhX3B1dF9mYWlsdXJlOwogCXJldHVybiAwOwogCkBAIC01OSw3ICs1OSw4IEBAIG5sYV9w dXRfZmFpbHVyZToKICAqLwogaW50CiBnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29tcGF0KHN0cnVj dCBza19idWZmICpza2IsIGludCB0eXBlLCBpbnQgdGNfc3RhdHNfdHlwZSwKLQlpbnQgeHN0YXRz X3R5cGUsIHNwaW5sb2NrX3QgKmxvY2ssIHN0cnVjdCBnbmV0X2R1bXAgKmQpCisJCQkgICAgIGlu dCB4c3RhdHNfdHlwZSwgc3BpbmxvY2tfdCAqbG9jaywKKwkJCSAgICAgc3RydWN0IGduZXRfZHVt cCAqZCwgaW50IHBhZGF0dHIpCiAJX19hY3F1aXJlcyhsb2NrKQogewogCW1lbXNldChkLCAwLCBz aXplb2YoKmQpKTsKQEAgLTcxLDE2ICs3MiwxNyBAQCBnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29t cGF0KHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLCBpbnQgdGNfc3RhdHNfdHlwZSwKIAlk LT5za2IgPSBza2I7CiAJZC0+Y29tcGF0X3RjX3N0YXRzID0gdGNfc3RhdHNfdHlwZTsKIAlkLT5j b21wYXRfeHN0YXRzID0geHN0YXRzX3R5cGU7CisJZC0+cGFkYXR0ciA9IHBhZGF0dHI7CiAKIAlp ZiAoZC0+dGFpbCkKLQkJcmV0dXJuIGduZXRfc3RhdHNfY29weShkLCB0eXBlLCBOVUxMLCAwKTsK KwkJcmV0dXJuIGduZXRfc3RhdHNfY29weShkLCB0eXBlLCBOVUxMLCAwLCBwYWRhdHRyKTsKIAog CXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29tcGF0 KTsKIAogLyoqCi0gKiBnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29tcGF0IC0gc3RhcnQgZHVtcGlu ZyBwcm9jZWR1cmUgaW4gY29tcGF0aWJpbGl0eSBtb2RlCisgKiBnbmV0X3N0YXRzX3N0YXJ0X2Nv cHkgLSBzdGFydCBkdW1waW5nIHByb2NlZHVyZSBpbiBjb21wYXRpYmlsaXR5IG1vZGUKICAqIEBz a2I6IHNvY2tldCBidWZmZXIgdG8gcHV0IHN0YXRpc3RpY3MgVExWcyBpbnRvCiAgKiBAdHlwZTog VExWIHR5cGUgZm9yIHRvcCBsZXZlbCBzdGF0aXN0aWMgVExWCiAgKiBAbG9jazogc3RhdGlzdGlj cyBsb2NrCkBAIC05NCw5ICs5Niw5IEBAIEVYUE9SVF9TWU1CT0woZ25ldF9zdGF0c19zdGFydF9j b3B5X2NvbXBhdCk7CiAgKi8KIGludAogZ25ldF9zdGF0c19zdGFydF9jb3B5KHN0cnVjdCBza19i dWZmICpza2IsIGludCB0eXBlLCBzcGlubG9ja190ICpsb2NrLAotCXN0cnVjdCBnbmV0X2R1bXAg KmQpCisJCSAgICAgIHN0cnVjdCBnbmV0X2R1bXAgKmQsIGludCBwYWRhdHRyKQogewotCXJldHVy biBnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29tcGF0KHNrYiwgdHlwZSwgMCwgMCwgbG9jaywgZCk7 CisJcmV0dXJuIGduZXRfc3RhdHNfc3RhcnRfY29weV9jb21wYXQoc2tiLCB0eXBlLCAwLCAwLCBs b2NrLCBkLCBwYWRhdHRyKTsKIH0KIEVYUE9SVF9TWU1CT0woZ25ldF9zdGF0c19zdGFydF9jb3B5 KTsKIApAQCAtMTY5LDcgKzE3MSw4IEBAIGduZXRfc3RhdHNfY29weV9iYXNpYyhzdHJ1Y3QgZ25l dF9kdW1wICpkLAogCQltZW1zZXQoJnNiLCAwLCBzaXplb2Yoc2IpKTsKIAkJc2IuYnl0ZXMgPSBi c3RhdHMuYnl0ZXM7CiAJCXNiLnBhY2tldHMgPSBic3RhdHMucGFja2V0czsKLQkJcmV0dXJuIGdu ZXRfc3RhdHNfY29weShkLCBUQ0FfU1RBVFNfQkFTSUMsICZzYiwgc2l6ZW9mKHNiKSk7CisJCXJl dHVybiBnbmV0X3N0YXRzX2NvcHkoZCwgVENBX1NUQVRTX0JBU0lDLCAmc2IsIHNpemVvZihzYiks CisJCQkJICAgICAgIFRDQV9TVEFUU19QQUQpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIwOCwx MSArMjExLDEzIEBAIGduZXRfc3RhdHNfY29weV9yYXRlX2VzdChzdHJ1Y3QgZ25ldF9kdW1wICpk LAogCX0KIAogCWlmIChkLT50YWlsKSB7Ci0JCXJlcyA9IGduZXRfc3RhdHNfY29weShkLCBUQ0Ff U1RBVFNfUkFURV9FU1QsICZlc3QsIHNpemVvZihlc3QpKTsKKwkJcmVzID0gZ25ldF9zdGF0c19j b3B5KGQsIFRDQV9TVEFUU19SQVRFX0VTVCwgJmVzdCwgc2l6ZW9mKGVzdCksCisJCQkJICAgICAg VENBX1NUQVRTX1BBRCk7CiAJCWlmIChyZXMgPCAwIHx8IGVzdC5icHMgPT0gci0+YnBzKQogCQkJ cmV0dXJuIHJlczsKIAkJLyogZW1pdCA2NGJpdCBzdGF0cyBvbmx5IGlmIG5lZWRlZCAqLwotCQly ZXR1cm4gZ25ldF9zdGF0c19jb3B5KGQsIFRDQV9TVEFUU19SQVRFX0VTVDY0LCByLCBzaXplb2Yo KnIpKTsKKwkJcmV0dXJuIGduZXRfc3RhdHNfY29weShkLCBUQ0FfU1RBVFNfUkFURV9FU1Q2NCwg ciwgc2l6ZW9mKCpyKSwKKwkJCQkgICAgICAgVENBX1NUQVRTX1BBRCk7CiAJfQogCiAJcmV0dXJu IDA7CkBAIC0yODYsNyArMjkxLDggQEAgZ25ldF9zdGF0c19jb3B5X3F1ZXVlKHN0cnVjdCBnbmV0 X2R1bXAgKmQsCiAKIAlpZiAoZC0+dGFpbCkKIAkJcmV0dXJuIGduZXRfc3RhdHNfY29weShkLCBU Q0FfU1RBVFNfUVVFVUUsCi0JCQkJICAgICAgICZxc3RhdHMsIHNpemVvZihxc3RhdHMpKTsKKwkJ CQkgICAgICAgJnFzdGF0cywgc2l6ZW9mKHFzdGF0cyksCisJCQkJICAgICAgIFRDQV9TVEFUU19Q QUQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMTYsNyArMzIyLDggQEAgZ25ldF9zdGF0c19jb3B5 X2FwcChzdHJ1Y3QgZ25ldF9kdW1wICpkLCB2b2lkICpzdCwgaW50IGxlbikKIAl9CiAKIAlpZiAo ZC0+dGFpbCkKLQkJcmV0dXJuIGduZXRfc3RhdHNfY29weShkLCBUQ0FfU1RBVFNfQVBQLCBzdCwg bGVuKTsKKwkJcmV0dXJuIGduZXRfc3RhdHNfY29weShkLCBUQ0FfU1RBVFNfQVBQLCBzdCwgbGVu LAorCQkJCSAgICAgICBUQ0FfU1RBVFNfUEFEKTsKIAogCXJldHVybiAwOwogCkBAIC0zNDcsMTIg KzM1NCwxMiBAQCBnbmV0X3N0YXRzX2ZpbmlzaF9jb3B5KHN0cnVjdCBnbmV0X2R1bXAgKmQpCiAK IAlpZiAoZC0+Y29tcGF0X3RjX3N0YXRzKQogCQlpZiAoZ25ldF9zdGF0c19jb3B5KGQsIGQtPmNv bXBhdF90Y19zdGF0cywgJmQtPnRjX3N0YXRzLAotCQkJc2l6ZW9mKGQtPnRjX3N0YXRzKSkgPCAw KQorCQkJCSAgICBzaXplb2YoZC0+dGNfc3RhdHMpLCBkLT5wYWRhdHRyKSA8IDApCiAJCQlyZXR1 cm4gLTE7CiAKIAlpZiAoZC0+Y29tcGF0X3hzdGF0cyAmJiBkLT54c3RhdHMpIHsKIAkJaWYgKGdu ZXRfc3RhdHNfY29weShkLCBkLT5jb21wYXRfeHN0YXRzLCBkLT54c3RhdHMsCi0JCQlkLT54c3Rh dHNfbGVuKSA8IDApCisJCQkJICAgIGQtPnhzdGF0c19sZW4sIGQtPnBhZGF0dHIpIDwgMCkKIAkJ CXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQv c2NoZWQvYWN0X2FwaS5jCmluZGV4IDk2MDY2NjY1ZTM3Ni4uMzM2Nzc0YTUzNWMzIDEwMDY0NAot LS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jCisrKyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKQEAgLTY1 NywxMiArNjU3LDE1IEBAIGludCB0Y2ZfYWN0aW9uX2NvcHlfc3RhdHMoc3RydWN0IHNrX2J1ZmYg KnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAlpZiAoY29tcGF0X21vZGUpIHsKIAkJaWYgKGEt PnR5cGUgPT0gVENBX09MRF9DT01QQVQpCiAJCQllcnIgPSBnbmV0X3N0YXRzX3N0YXJ0X2NvcHlf Y29tcGF0KHNrYiwgMCwKLQkJCQlUQ0FfU1RBVFMsIFRDQV9YU1RBVFMsICZwLT50Y2ZjX2xvY2ss ICZkKTsKKwkJCQkJCQkgICBUQ0FfU1RBVFMsCisJCQkJCQkJICAgVENBX1hTVEFUUywKKwkJCQkJ CQkgICAmcC0+dGNmY19sb2NrLCAmZCwKKwkJCQkJCQkgICBUQ0FfUEFEKTsKIAkJZWxzZQogCQkJ cmV0dXJuIDA7CiAJfSBlbHNlCiAJCWVyciA9IGduZXRfc3RhdHNfc3RhcnRfY29weShza2IsIFRD QV9BQ1RfU1RBVFMsCi0JCQkJCSAgICAmcC0+dGNmY19sb2NrLCAmZCk7CisJCQkJCSAgICAmcC0+ dGNmY19sb2NrLCAmZCwgVENBX0FDVF9QQUQpOwogCiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJy b3V0OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9icGYuYyBiL25ldC9zY2hlZC9hY3RfYnBm LmMKaW5kZXggOGM5ZjFmMDQ1OWFiLi40ZmQ3MDMzNjI1NjMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hl ZC9hY3RfYnBmLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9icGYuYwpAQCAtMTU2LDcgKzE1Niw4IEBA IHN0YXRpYyBpbnQgdGNmX2JwZl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19h Y3Rpb24gKmFjdCwKIAl0bS5sYXN0dXNlID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBw cm9nLT50Y2ZfdG0ubGFzdHVzZSk7CiAJdG0uZXhwaXJlcyA9IGppZmZpZXNfdG9fY2xvY2tfdChw cm9nLT50Y2ZfdG0uZXhwaXJlcyk7CiAKLQlpZiAobmxhX3B1dChza2IsIFRDQV9BQ1RfQlBGX1RN LCBzaXplb2YodG0pLCAmdG0pKQorCWlmIChubGFfcHV0XzY0Yml0KHNrYiwgVENBX0FDVF9CUEZf VE0sIHNpemVvZih0bSksICZ0bSwKKwkJCSAgVENBX0FDVF9CUEZfUEFEKSkKIAkJZ290byBubGFf cHV0X2ZhaWx1cmU7CiAKIAlyZXR1cm4gc2tiLT5sZW47CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQv YWN0X2Nvbm5tYXJrLmMgYi9uZXQvc2NoZWQvYWN0X2Nvbm5tYXJrLmMKaW5kZXggYzBlZDkzY2Uy MzkxLi4yYmE3MDBjNzY1ZTAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfY29ubm1hcmsuYwor KysgYi9uZXQvc2NoZWQvYWN0X2Nvbm5tYXJrLmMKQEAgLTE2Myw3ICsxNjMsOCBAQCBzdGF0aWMg aW5saW5lIGludCB0Y2ZfY29ubm1hcmtfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qg dGNfYWN0aW9uICphLAogCXQuaW5zdGFsbCA9IGppZmZpZXNfdG9fY2xvY2tfdChqaWZmaWVzIC0g Y2ktPnRjZl90bS5pbnN0YWxsKTsKIAl0Lmxhc3R1c2UgPSBqaWZmaWVzX3RvX2Nsb2NrX3Qoamlm ZmllcyAtIGNpLT50Y2ZfdG0ubGFzdHVzZSk7CiAJdC5leHBpcmVzID0gamlmZmllc190b19jbG9j a190KGNpLT50Y2ZfdG0uZXhwaXJlcyk7Ci0JaWYgKG5sYV9wdXQoc2tiLCBUQ0FfQ09OTk1BUktf VE0sIHNpemVvZih0KSwgJnQpKQorCWlmIChubGFfcHV0XzY0Yml0KHNrYiwgVENBX0NPTk5NQVJL X1RNLCBzaXplb2YodCksICZ0LAorCQkJICBUQ0FfQ09OTk1BUktfUEFEKSkKIAkJZ290byBubGFf cHV0X2ZhaWx1cmU7CiAKIAlyZXR1cm4gc2tiLT5sZW47CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQv YWN0X2NzdW0uYyBiL25ldC9zY2hlZC9hY3RfY3N1bS5jCmluZGV4IGQyMjQyNmNkZWJjMC4uMjhl OTM0ZWQwMzhhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2NzdW0uYworKysgYi9uZXQvc2No ZWQvYWN0X2NzdW0uYwpAQCAtNTQ5LDcgKzU0OSw3IEBAIHN0YXRpYyBpbnQgdGNmX2NzdW1fZHVt cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXQuaW5zdGFsbCA9IGppZmZpZXNfdG9fY2xvY2tfdChq aWZmaWVzIC0gcC0+dGNmX3RtLmluc3RhbGwpOwogCXQubGFzdHVzZSA9IGppZmZpZXNfdG9fY2xv Y2tfdChqaWZmaWVzIC0gcC0+dGNmX3RtLmxhc3R1c2UpOwogCXQuZXhwaXJlcyA9IGppZmZpZXNf dG9fY2xvY2tfdChwLT50Y2ZfdG0uZXhwaXJlcyk7Ci0JaWYgKG5sYV9wdXQoc2tiLCBUQ0FfQ1NV TV9UTSwgc2l6ZW9mKHQpLCAmdCkpCisJaWYgKG5sYV9wdXRfNjRiaXQoc2tiLCBUQ0FfQ1NVTV9U TSwgc2l6ZW9mKHQpLCAmdCwgVENBX0NTVU1fUEFEKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7 CiAKIAlyZXR1cm4gc2tiLT5sZW47CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhY3QuYyBi L25ldC9zY2hlZC9hY3RfZ2FjdC5jCmluZGV4IDg4N2ZjMWYyMDlmZi4uMWE2ZTA5ZmJiMmE1IDEw MDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2dhY3QuYworKysgYi9uZXQvc2NoZWQvYWN0X2dhY3Qu YwpAQCAtMTc3LDcgKzE3Nyw3IEBAIHN0YXRpYyBpbnQgdGNmX2dhY3RfZHVtcChzdHJ1Y3Qgc2tf YnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLCBpbnQgYmluZCwgaW50CiAJdC5pbnN0YWxs ID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBnYWN0LT50Y2ZfdG0uaW5zdGFsbCk7CiAJ dC5sYXN0dXNlID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBnYWN0LT50Y2ZfdG0ubGFz dHVzZSk7CiAJdC5leHBpcmVzID0gamlmZmllc190b19jbG9ja190KGdhY3QtPnRjZl90bS5leHBp cmVzKTsKLQlpZiAobmxhX3B1dChza2IsIFRDQV9HQUNUX1RNLCBzaXplb2YodCksICZ0KSkKKwlp ZiAobmxhX3B1dF82NGJpdChza2IsIFRDQV9HQUNUX1RNLCBzaXplb2YodCksICZ0LCBUQ0FfR0FD VF9QQUQpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAlyZXR1cm4gc2tiLT5sZW47CiAKZGlm ZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jCmluZGV4 IGM1ODlhOWJhNTA2YS4uNTU2ZjQ0YzljNDU0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lm ZS5jCisrKyBiL25ldC9zY2hlZC9hY3RfaWZlLmMKQEAgLTU1MCw3ICs1NTAsNyBAQCBzdGF0aWMg aW50IHRjZl9pZmVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICph LCBpbnQgYmluZCwKIAl0Lmluc3RhbGwgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmllcyAtIGlm ZS0+dGNmX3RtLmluc3RhbGwpOwogCXQubGFzdHVzZSA9IGppZmZpZXNfdG9fY2xvY2tfdChqaWZm aWVzIC0gaWZlLT50Y2ZfdG0ubGFzdHVzZSk7CiAJdC5leHBpcmVzID0gamlmZmllc190b19jbG9j a190KGlmZS0+dGNmX3RtLmV4cGlyZXMpOwotCWlmIChubGFfcHV0KHNrYiwgVENBX0lGRV9UTSwg c2l6ZW9mKHQpLCAmdCkpCisJaWYgKG5sYV9wdXRfNjRiaXQoc2tiLCBUQ0FfSUZFX1RNLCBzaXpl b2YodCksICZ0LCBUQ0FfSUZFX1BBRCkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJaWYg KCFpc196ZXJvX2V0aGVyX2FkZHIoaWZlLT5ldGhfZHN0KSkgewpkaWZmIC0tZ2l0IGEvbmV0L3Nj aGVkL2FjdF9pcHQuYyBiL25ldC9zY2hlZC9hY3RfaXB0LmMKaW5kZXggMzUwZTEzNGNmZmIzLi4x NDY0ZjZhMDk0NDYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfaXB0LmMKKysrIGIvbmV0L3Nj aGVkL2FjdF9pcHQuYwpAQCAtMjc1LDcgKzI3NSw3IEBAIHN0YXRpYyBpbnQgdGNmX2lwdF9kdW1w KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIGludCBiaW5kLCBpbnQK IAl0bS5pbnN0YWxsID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBpcHQtPnRjZl90bS5p bnN0YWxsKTsKIAl0bS5sYXN0dXNlID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBpcHQt PnRjZl90bS5sYXN0dXNlKTsKIAl0bS5leHBpcmVzID0gamlmZmllc190b19jbG9ja190KGlwdC0+ dGNmX3RtLmV4cGlyZXMpOwotCWlmIChubGFfcHV0KHNrYiwgVENBX0lQVF9UTSwgc2l6ZW9mICh0 bSksICZ0bSkpCisJaWYgKG5sYV9wdXRfNjRiaXQoc2tiLCBUQ0FfSVBUX1RNLCBzaXplb2YodG0p LCAmdG0sIFRDQV9JUFRfUEFEKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJa2ZyZWUodCk7 CiAJcmV0dXJuIHNrYi0+bGVuOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9taXJyZWQuYyBi L25ldC9zY2hlZC9hY3RfbWlycmVkLmMKaW5kZXggZThhNzYwY2Y3Nzc1Li5kZWE1N2MxZWM5MGMg MTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfbWlycmVkLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9t aXJyZWQuYwpAQCAtMjE0LDcgKzIxNCw3IEBAIHN0YXRpYyBpbnQgdGNmX21pcnJlZF9kdW1wKHN0 cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIGludCBiaW5kLCBpCiAJdC5p bnN0YWxsID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBtLT50Y2ZfdG0uaW5zdGFsbCk7 CiAJdC5sYXN0dXNlID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBtLT50Y2ZfdG0ubGFz dHVzZSk7CiAJdC5leHBpcmVzID0gamlmZmllc190b19jbG9ja190KG0tPnRjZl90bS5leHBpcmVz KTsKLQlpZiAobmxhX3B1dChza2IsIFRDQV9NSVJSRURfVE0sIHNpemVvZih0KSwgJnQpKQorCWlm IChubGFfcHV0XzY0Yml0KHNrYiwgVENBX01JUlJFRF9UTSwgc2l6ZW9mKHQpLCAmdCwgVENBX01J UlJFRF9QQUQpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAlyZXR1cm4gc2tiLT5sZW47CiAK ZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfbmF0LmMgYi9uZXQvc2NoZWQvYWN0X25hdC5jCmlu ZGV4IDBmNjVjZGZiZmIxZC4uYzBhODc5Zjk0MGRlIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0 X25hdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfbmF0LmMKQEAgLTI2Nyw3ICsyNjcsNyBAQCBzdGF0 aWMgaW50IHRjZl9uYXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9u ICphLAogCXQuaW5zdGFsbCA9IGppZmZpZXNfdG9fY2xvY2tfdChqaWZmaWVzIC0gcC0+dGNmX3Rt Lmluc3RhbGwpOwogCXQubGFzdHVzZSA9IGppZmZpZXNfdG9fY2xvY2tfdChqaWZmaWVzIC0gcC0+ dGNmX3RtLmxhc3R1c2UpOwogCXQuZXhwaXJlcyA9IGppZmZpZXNfdG9fY2xvY2tfdChwLT50Y2Zf dG0uZXhwaXJlcyk7Ci0JaWYgKG5sYV9wdXQoc2tiLCBUQ0FfTkFUX1RNLCBzaXplb2YodCksICZ0 KSkKKwlpZiAobmxhX3B1dF82NGJpdChza2IsIFRDQV9OQVRfVE0sIHNpemVvZih0KSwgJnQsIFRD QV9OQVRfUEFEKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlyZXR1cm4gc2tiLT5sZW47 CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMgYi9uZXQvc2NoZWQvYWN0X3BlZGl0 LmMKaW5kZXggNDI5YzNhYjY1MTQyLi5jNmUxOGYyMzBhZjYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hl ZC9hY3RfcGVkaXQuYworKysgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKQEAgLTIwMyw3ICsyMDMs NyBAQCBzdGF0aWMgaW50IHRjZl9wZWRpdF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVj dCB0Y19hY3Rpb24gKmEsCiAJdC5pbnN0YWxsID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMg LSBwLT50Y2ZfdG0uaW5zdGFsbCk7CiAJdC5sYXN0dXNlID0gamlmZmllc190b19jbG9ja190KGpp ZmZpZXMgLSBwLT50Y2ZfdG0ubGFzdHVzZSk7CiAJdC5leHBpcmVzID0gamlmZmllc190b19jbG9j a190KHAtPnRjZl90bS5leHBpcmVzKTsKLQlpZiAobmxhX3B1dChza2IsIFRDQV9QRURJVF9UTSwg c2l6ZW9mKHQpLCAmdCkpCisJaWYgKG5sYV9wdXRfNjRiaXQoc2tiLCBUQ0FfUEVESVRfVE0sIHNp emVvZih0KSwgJnQsIFRDQV9QRURJVF9QQUQpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAlr ZnJlZShvcHQpOwogCXJldHVybiBza2ItPmxlbjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rf c2ltcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jCmluZGV4IDc1YjJiZTEzZmJjYy4uMjA1 N2ZkNTZkNzRjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jCisrKyBiL25ldC9z Y2hlZC9hY3Rfc2ltcGxlLmMKQEAgLTE1NSw3ICsxNTUsNyBAQCBzdGF0aWMgaW50IHRjZl9zaW1w X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAl0Lmluc3Rh bGwgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmllcyAtIGQtPnRjZl90bS5pbnN0YWxsKTsKIAl0 Lmxhc3R1c2UgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmllcyAtIGQtPnRjZl90bS5sYXN0dXNl KTsKIAl0LmV4cGlyZXMgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoZC0+dGNmX3RtLmV4cGlyZXMpOwot CWlmIChubGFfcHV0KHNrYiwgVENBX0RFRl9UTSwgc2l6ZW9mKHQpLCAmdCkpCisJaWYgKG5sYV9w dXRfNjRiaXQoc2tiLCBUQ0FfREVGX1RNLCBzaXplb2YodCksICZ0LCBUQ0FfREVGX1BBRCkpCiAJ CWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCXJldHVybiBza2ItPmxlbjsKIApkaWZmIC0tZ2l0IGEv bmV0L3NjaGVkL2FjdF9za2JlZGl0LmMgYi9uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYwppbmRleCBj ZmNkYmRjMDBjOWIuLjUxYjI0OTk4OTA0ZiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9za2Jl ZGl0LmMKKysrIGIvbmV0L3NjaGVkL2FjdF9za2JlZGl0LmMKQEAgLTE2Nyw3ICsxNjcsNyBAQCBz dGF0aWMgaW50IHRjZl9za2JlZGl0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRj X2FjdGlvbiAqYSwKIAl0Lmluc3RhbGwgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmllcyAtIGQt PnRjZl90bS5pbnN0YWxsKTsKIAl0Lmxhc3R1c2UgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmll cyAtIGQtPnRjZl90bS5sYXN0dXNlKTsKIAl0LmV4cGlyZXMgPSBqaWZmaWVzX3RvX2Nsb2NrX3Qo ZC0+dGNmX3RtLmV4cGlyZXMpOwotCWlmIChubGFfcHV0KHNrYiwgVENBX1NLQkVESVRfVE0sIHNp emVvZih0KSwgJnQpKQorCWlmIChubGFfcHV0XzY0Yml0KHNrYiwgVENBX1NLQkVESVRfVE0sIHNp emVvZih0KSwgJnQsIFRDQV9TS0JFRElUX1BBRCkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwog CXJldHVybiBza2ItPmxlbjsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF92bGFuLmMgYi9u ZXQvc2NoZWQvYWN0X3ZsYW4uYwppbmRleCBiYWI4YWUwY2VmYzAuLmMxNjgyYWI5YmM3ZSAxMDA2 NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF92bGFuLmMKKysrIGIvbmV0L3NjaGVkL2FjdF92bGFuLmMK QEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0aWMgaW50IHRjZl92bGFuX2R1bXAoc3RydWN0IHNrX2J1 ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAl0Lmluc3RhbGwgPSBqaWZmaWVzX3RvX2Ns b2NrX3QoamlmZmllcyAtIHYtPnRjZl90bS5pbnN0YWxsKTsKIAl0Lmxhc3R1c2UgPSBqaWZmaWVz X3RvX2Nsb2NrX3QoamlmZmllcyAtIHYtPnRjZl90bS5sYXN0dXNlKTsKIAl0LmV4cGlyZXMgPSBq aWZmaWVzX3RvX2Nsb2NrX3Qodi0+dGNmX3RtLmV4cGlyZXMpOwotCWlmIChubGFfcHV0KHNrYiwg VENBX1ZMQU5fVE0sIHNpemVvZih0KSwgJnQpKQorCWlmIChubGFfcHV0XzY0Yml0KHNrYiwgVENB X1ZMQU5fVE0sIHNpemVvZih0KSwgJnQsIFRDQV9WTEFOX1BBRCkpCiAJCWdvdG8gbmxhX3B1dF9m YWlsdXJlOwogCXJldHVybiBza2ItPmxlbjsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191 MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKaW5kZXggNTYzY2RhZDc2NDQ4Li5lNjQ4NzdhM2Mw ODQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmMKKysrIGIvbmV0L3NjaGVkL2Nsc191 MzIuYwpAQCAtMTE0MCw5ICsxMTQwLDEwIEBAIHN0YXRpYyBpbnQgdTMyX2R1bXAoc3RydWN0IG5l dCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBmaCwKIAkJCQlncGYt PmtjbnRzW2ldICs9IHBmLT5rY250c1tpXTsKIAkJfQogCi0JCWlmIChubGFfcHV0KHNrYiwgVENB X1UzMl9QQ05ULAotCQkJICAgIHNpemVvZihzdHJ1Y3QgdGNfdTMyX3BjbnQpICsgbi0+c2VsLm5r ZXlzKnNpemVvZih1NjQpLAotCQkJICAgIGdwZikpIHsKKwkJaWYgKG5sYV9wdXRfNjRiaXQoc2ti LCBUQ0FfVTMyX1BDTlQsCisJCQkJICBzaXplb2Yoc3RydWN0IHRjX3UzMl9wY250KSArCisJCQkJ ICBuLT5zZWwubmtleXMgKiBzaXplb2YodTY0KSwKKwkJCQkgIGdwZiwgVENBX1UzMl9QQUQpKSB7 CiAJCQlrZnJlZShncGYpOwogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJCX0KZGlmZiAtLWdp dCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDNiMTgw ZmY3MmY3OS4uNjRmNzFhMjE1NWYzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCisr KyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTEzNjUsNyArMTM2NSw4IEBAIHN0YXRpYyBpbnQg dGNfZmlsbF9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnEsIHUzMiBj bGlkLAogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWlmIChnbmV0X3N0YXRzX3N0YXJ0X2Nv cHlfY29tcGF0KHNrYiwgVENBX1NUQVRTMiwgVENBX1NUQVRTLCBUQ0FfWFNUQVRTLAotCQkJCQkg cWRpc2Nfcm9vdF9zbGVlcGluZ19sb2NrKHEpLCAmZCkgPCAwKQorCQkJCQkgcWRpc2Nfcm9vdF9z bGVlcGluZ19sb2NrKHEpLCAmZCwKKwkJCQkJIFRDQV9QQUQpIDwgMCkKIAkJZ290byBubGFfcHV0 X2ZhaWx1cmU7CiAKIAlpZiAocS0+b3BzLT5kdW1wX3N0YXRzICYmIHEtPm9wcy0+ZHVtcF9zdGF0 cyhxLCAmZCkgPCAwKQpAQCAtMTY3OSw3ICsxNjgwLDggQEAgc3RhdGljIGludCB0Y19maWxsX3Rj bGFzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnEsCiAJCWdvdG8gbmxhX3B1 dF9mYWlsdXJlOwogCiAJaWYgKGduZXRfc3RhdHNfc3RhcnRfY29weV9jb21wYXQoc2tiLCBUQ0Ff U1RBVFMyLCBUQ0FfU1RBVFMsIFRDQV9YU1RBVFMsCi0JCQkJCSBxZGlzY19yb290X3NsZWVwaW5n X2xvY2socSksICZkKSA8IDApCisJCQkJCSBxZGlzY19yb290X3NsZWVwaW5nX2xvY2socSksICZk LAorCQkJCQkgVENBX1BBRCkgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWlmIChj bF9vcHMtPmR1bXBfc3RhdHMgJiYgY2xfb3BzLT5kdW1wX3N0YXRzKHEsIGNsLCAmZCkgPCAwKQot LSAKMi44LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRldiBtYWlsaW5nIGxpc3QKZGV2QG9wZW52c3dpdGNoLm9yZwpodHRwOi8vb3BlbnZzd2l0Y2gu b3JnL21haWxtYW4vbGlzdGluZm8vZGV2Cg==