netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH iproute2] fix print_0xhex on 32 bit
@ 2018-12-10 22:27 Stephen Hemminger
  2018-12-11  9:05 ` Hans Dedecker
  2018-12-19 20:00 ` Serhey Popovych
  0 siblings, 2 replies; 4+ messages in thread
From: Stephen Hemminger @ 2018-12-10 22:27 UTC (permalink / raw)
  To: netdev; +Cc: Stephen Hemminger

The argument to print_0xhex is converted to unsigned long long
so the format string give for normal printout has to be some
variant of %llx. Otherwise, bogus values will be printed on
32 bit platforms.

Reported-by: Hans Dedecker <dedeckeh@gmail.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 bridge/link.c            | 2 +-
 ip/ipaddress.c           | 2 +-
 ip/iplink_bridge.c       | 2 +-
 ip/iplink_bridge_slave.c | 6 +++---
 ip/iplink_geneve.c       | 5 ++---
 ip/iplink_vxlan.c        | 8 +++-----
 ip/ipntable.c            | 2 +-
 ip/iproute.c             | 8 ++++----
 ip/iproute_lwtunnel.c    | 2 +-
 ip/iprule.c              | 6 +++---
 ip/iptuntap.c            | 2 +-
 ip/link_gre.c            | 6 +++---
 ip/link_gre6.c           | 4 ++--
 ip/link_ip6tnl.c         | 2 +-
 ip/link_iptnl.c          | 4 ++--
 ip/link_vti.c            | 2 +-
 ip/link_vti6.c           | 2 +-
 tc/m_ife.c               | 2 +-
 tc/q_htb.c               | 2 +-
 tc/q_taprio.c            | 2 +-
 20 files changed, 34 insertions(+), 37 deletions(-)

diff --git a/bridge/link.c b/bridge/link.c
index 3290c16f0951..32317e53b036 100644
--- a/bridge/link.c
+++ b/bridge/link.c
@@ -90,7 +90,7 @@ static void print_hwmode(__u16 mode)
 {
 	if (mode >= ARRAY_SIZE(hw_mode))
 		print_0xhex(PRINT_ANY, "hwmode",
-			    "hwmode %#hx ", mode);
+			    "hwmode %#llx ", mode);
 	else
 		print_string(PRINT_ANY, "hwmode",
 			     "hwmode %s ", hw_mode[mode]);
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index 21985a5ee6f3..016662e910e9 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -129,7 +129,7 @@ static void print_operstate(FILE *f, __u8 state)
 		if (is_json_context())
 			print_uint(PRINT_JSON, "operstate_index", NULL, state);
 		else
-			print_0xhex(PRINT_FP, NULL, "state %#x", state);
+			print_0xhex(PRINT_FP, NULL, "state %#llx", state);
 	} else if (brief) {
 		print_color_string(PRINT_ANY,
 				   oper_state_color(state),
diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 0ba6be3f47da..fbf8a79bfbbb 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -524,7 +524,7 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_GROUP_FWD_MASK])
 		print_0xhex(PRINT_ANY,
 			    "group_fwd_mask",
-			    "group_fwd_mask %#x ",
+			    "group_fwd_mask %#llx ",
 			    rta_getattr_u16(tb[IFLA_BR_GROUP_FWD_MASK]));
 
 	if (tb[IFLA_BR_GROUP_ADDR]) {
diff --git a/ip/iplink_bridge_slave.c b/ip/iplink_bridge_slave.c
index 8b4f93f265be..85e6b424315f 100644
--- a/ip/iplink_bridge_slave.c
+++ b/ip/iplink_bridge_slave.c
@@ -168,11 +168,11 @@ static void bridge_slave_print_opt(struct link_util *lu, FILE *f,
 			     rta_getattr_u8(tb[IFLA_BRPORT_UNICAST_FLOOD]));
 
 	if (tb[IFLA_BRPORT_ID])
-		print_0xhex(PRINT_ANY, "id", "port_id 0x%x ",
+		print_0xhex(PRINT_ANY, "id", "port_id %#llx ",
 			    rta_getattr_u16(tb[IFLA_BRPORT_ID]));
 
 	if (tb[IFLA_BRPORT_NO])
-		print_0xhex(PRINT_ANY, "no", "port_no 0x%x ",
+		print_0xhex(PRINT_ANY, "no", "port_no %#llx ",
 			   rta_getattr_u16(tb[IFLA_BRPORT_NO]));
 
 	if (tb[IFLA_BRPORT_DESIGNATED_PORT])
@@ -267,7 +267,7 @@ static void bridge_slave_print_opt(struct link_util *lu, FILE *f,
 
 		fwd_mask = rta_getattr_u16(tb[IFLA_BRPORT_GROUP_FWD_MASK]);
 		print_0xhex(PRINT_ANY, "group_fwd_mask",
-			    "group_fwd_mask 0x%x ", fwd_mask);
+			    "group_fwd_mask %#llx ", fwd_mask);
 		_bitmask2str(fwd_mask, convbuf, sizeof(convbuf), fwd_mask_tbl);
 		print_string(PRINT_ANY, "group_fwd_mask_str",
 			     "group_fwd_mask_str %s ", convbuf);
diff --git a/ip/iplink_geneve.c b/ip/iplink_geneve.c
index c417842b2a5b..f1a12f454ab7 100644
--- a/ip/iplink_geneve.c
+++ b/ip/iplink_geneve.c
@@ -282,7 +282,7 @@ static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 		tos = rta_getattr_u8(tb[IFLA_GENEVE_TOS]);
 	if (tos) {
 		if (is_json_context() || tos != 1)
-			print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos);
+			print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos);
 		else
 			print_string(PRINT_FP, NULL, "tos %s ", "inherit");
 	}
@@ -292,8 +292,7 @@ static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 
 		if (label)
 			print_0xhex(PRINT_ANY,
-				    "label",
-				    "flowlabel %#x ",
+				    "label", "flowlabel %#llx ",
 				    ntohl(label));
 	}
 
diff --git a/ip/iplink_vxlan.c b/ip/iplink_vxlan.c
index 7fc0e2b4eb06..62e769430c5d 100644
--- a/ip/iplink_vxlan.c
+++ b/ip/iplink_vxlan.c
@@ -522,7 +522,7 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 		tos = rta_getattr_u8(tb[IFLA_VXLAN_TOS]);
 	if (tos) {
 		if (is_json_context() || tos != 1)
-			print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos);
+			print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos);
 		else
 			print_string(PRINT_FP, NULL, "tos %s ", "inherit");
 	}
@@ -542,10 +542,8 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 		__u32 label = rta_getattr_u32(tb[IFLA_VXLAN_LABEL]);
 
 		if (label)
-			print_0xhex(PRINT_ANY,
-				    "label",
-				    "flowlabel %#x ",
-				    ntohl(label));
+			print_0xhex(PRINT_ANY, "label",
+				    "flowlabel %#llx ", ntohl(label));
 	}
 
 	if (tb[IFLA_VXLAN_AGEING]) {
diff --git a/ip/ipntable.c b/ip/ipntable.c
index 5b61dd5cb001..50fc949f1fcc 100644
--- a/ip/ipntable.c
+++ b/ip/ipntable.c
@@ -360,7 +360,7 @@ static void print_ndtconfig(const struct ndt_config *ndtc)
 	print_uint(PRINT_ANY, "hash_rnd",
 		   "        hash_rnd %u ", ndtc->ndtc_hash_rnd);
 	print_0xhex(PRINT_ANY, "hash_mask",
-		    "hash_mask %08x ", ndtc->ndtc_hash_mask);
+		    "hash_mask %08llx ", ndtc->ndtc_hash_mask);
 
 	print_uint(PRINT_ANY, "hash_chain_gc",
 		   "hash_chain_gc %u ", ndtc->ndtc_hash_chain_gc);
diff --git a/ip/iproute.c b/ip/iproute.c
index b039f35b0ccd..fa6a84b59a5c 100644
--- a/ip/iproute.c
+++ b/ip/iproute.c
@@ -346,7 +346,7 @@ static void print_rtax_features(FILE *fp, unsigned int features)
 
 	if (features)
 		print_0xhex(PRINT_ANY,
-			    "features", "0x%x ", of);
+			    "features", "%#llx ", of);
 }
 
 static void print_rt_flags(FILE *fp, unsigned int flags)
@@ -483,10 +483,10 @@ static void print_rta_cacheinfo(FILE *fp, const struct rta_cacheinfo *ci)
 	}
 	if (ci->rta_id)
 		print_0xhex(PRINT_ANY, "ipid",
-			    "ipid 0x%04x ", ci->rta_id);
+			    "ipid 0x%04llx ", ci->rta_id);
 	if (ci->rta_ts || ci->rta_tsage) {
 		print_0xhex(PRINT_ANY, "ts",
-			    "ts 0x%x", ci->rta_ts);
+			    "ts 0x%llx", ci->rta_ts);
 		print_uint(PRINT_ANY, "tsage",
 			   "tsage %usec ", ci->rta_tsage);
 	}
@@ -885,7 +885,7 @@ int print_route(struct nlmsghdr *n, void *arg)
 				print_uint(PRINT_JSON, "mark", NULL, mark);
 			else if (mark >= 16)
 				print_0xhex(PRINT_FP, NULL,
-					    "mark 0x%x ", mark);
+					    "mark 0x%llx ", mark);
 			else
 				print_uint(PRINT_FP, NULL,
 					   "mark %u ", mark);
diff --git a/ip/iproute_lwtunnel.c b/ip/iproute_lwtunnel.c
index 85ab13cb3174..aee18ac558b5 100644
--- a/ip/iproute_lwtunnel.c
+++ b/ip/iproute_lwtunnel.c
@@ -115,7 +115,7 @@ static void print_srh(FILE *fp, struct ipv6_sr_hdr *srh)
 
 		tlv = (struct sr6_tlv_hmac *)((char *)srh + offset);
 		print_0xhex(PRINT_ANY, "hmac",
-			    "hmac 0x%X ", ntohl(tlv->hmackeyid));
+			    "hmac %llX ", ntohl(tlv->hmackeyid));
 	}
 }
 
diff --git a/ip/iprule.c b/ip/iprule.c
index a85a43904e6e..0f8fc6d99136 100644
--- a/ip/iprule.c
+++ b/ip/iprule.c
@@ -263,10 +263,10 @@ int print_rule(struct nlmsghdr *n, void *arg)
 
 		if (tb[FRA_FWMASK] &&
 		    (mask = rta_getattr_u32(tb[FRA_FWMASK])) != 0xFFFFFFFF) {
-			print_0xhex(PRINT_ANY, "fwmark", "fwmark 0x%x", mark);
-			print_0xhex(PRINT_ANY, "fwmask", "/0x%x ", mask);
+			print_0xhex(PRINT_ANY, "fwmark", "fwmark %#llx", mark);
+			print_0xhex(PRINT_ANY, "fwmask", "/%#llx ", mask);
 		} else {
-			print_0xhex(PRINT_ANY, "fwmark", "fwmark 0x%x ", mark);
+			print_0xhex(PRINT_ANY, "fwmark", "fwmark %#llx ", mark);
 		}
 	}
 
diff --git a/ip/iptuntap.c b/ip/iptuntap.c
index 528055a0bf46..03238c3f6518 100644
--- a/ip/iptuntap.c
+++ b/ip/iptuntap.c
@@ -254,7 +254,7 @@ static void print_flags(long flags)
 	flags &= ~(IFF_TUN | IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE |
 		   IFF_VNET_HDR | IFF_PERSIST | IFF_NOFILTER);
 	if (flags)
-		print_0xhex(PRINT_ANY, NULL, "%#x", flags);
+		print_0xhex(PRINT_ANY, NULL, "%#llx", flags);
 
 	close_json_array(PRINT_JSON, NULL);
 }
diff --git a/ip/link_gre.c b/ip/link_gre.c
index 1ee7ee13ab6c..d754fa9a3425 100644
--- a/ip/link_gre.c
+++ b/ip/link_gre.c
@@ -463,7 +463,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 		tos = rta_getattr_u8(tb[IFLA_GRE_TOS]);
 	if (tos) {
 		if (is_json_context() || tos != 1)
-			print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos);
+			print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos);
 		else
 			print_string(PRINT_FP, NULL, "tos %s ", "inherit");
 	}
@@ -508,7 +508,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 
 		if (fwmark) {
 			print_0xhex(PRINT_ANY,
-				    "fwmark", "fwmark 0x%x ", fwmark);
+				    "fwmark", "fwmark %#llx ", fwmark);
 		}
 	}
 
@@ -541,7 +541,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 		__u16 erspan_hwid = rta_getattr_u16(tb[IFLA_GRE_ERSPAN_HWID]);
 
 		print_0xhex(PRINT_ANY,
-			    "erspan_hwid", "erspan_hwid 0x%x ", erspan_hwid);
+			    "erspan_hwid", "erspan_hwid %#llx ", erspan_hwid);
 	}
 
 	tnl_print_encap(tb,
diff --git a/ip/link_gre6.c b/ip/link_gre6.c
index 20f930596027..6c4671e5a820 100644
--- a/ip/link_gre6.c
+++ b/ip/link_gre6.c
@@ -576,7 +576,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 
 		if (fwmark) {
 			print_0xhex(PRINT_ANY,
-				    "fwmark", "fwmark 0x%x ", fwmark);
+				    "fwmark", "fwmark %#llx ", fwmark);
 		}
 	}
 
@@ -609,7 +609,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 		__u16 erspan_hwid = rta_getattr_u16(tb[IFLA_GRE_ERSPAN_HWID]);
 
 		print_0xhex(PRINT_ANY,
-			    "erspan_hwid", "erspan_hwid 0x%x ", erspan_hwid);
+			    "erspan_hwid", "erspan_hwid %#llx ", erspan_hwid);
 	}
 
 	tnl_print_encap(tb,
diff --git a/ip/link_ip6tnl.c b/ip/link_ip6tnl.c
index cfe2c5aa3724..711988a150a5 100644
--- a/ip/link_ip6tnl.c
+++ b/ip/link_ip6tnl.c
@@ -457,7 +457,7 @@ static void ip6tunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb
 
 		if (fwmark) {
 			print_0xhex(PRINT_ANY,
-				    "fwmark", "fwmark 0x%x ", fwmark);
+				    "fwmark", "fwmark %#llx ", fwmark);
 		}
 	}
 
diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c
index 7ec1594d0716..d4a56de40061 100644
--- a/ip/link_iptnl.c
+++ b/ip/link_iptnl.c
@@ -418,7 +418,7 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[
 		tos = rta_getattr_u8(tb[IFLA_IPTUN_TOS]);
 	if (tos) {
 		if (is_json_context() || tos != 1)
-			print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos);
+			print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos);
 		else
 			print_string(PRINT_FP, NULL, "tos %s ", "inherit");
 	}
@@ -476,7 +476,7 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[
 
 		if (fwmark) {
 			print_0xhex(PRINT_ANY,
-				    "fwmark", "fwmark 0x%x ", fwmark);
+				    "fwmark", "fwmark %#llx ", fwmark);
 		}
 	}
 
diff --git a/ip/link_vti.c b/ip/link_vti.c
index 3fff4417de11..b974c62b2754 100644
--- a/ip/link_vti.c
+++ b/ip/link_vti.c
@@ -208,7 +208,7 @@ static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 
 		if (fwmark) {
 			print_0xhex(PRINT_ANY,
-				    "fwmark", "fwmark 0x%x ", fwmark);
+				    "fwmark", "fwmark %#llx ", fwmark);
 		}
 	}
 }
diff --git a/ip/link_vti6.c b/ip/link_vti6.c
index f5a267a81d9d..f13c08583103 100644
--- a/ip/link_vti6.c
+++ b/ip/link_vti6.c
@@ -210,7 +210,7 @@ static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 
 		if (fwmark) {
 			print_0xhex(PRINT_ANY,
-				    "fwmark", "fwmark 0x%x ", fwmark);
+				    "fwmark", "fwmark %#llx ", fwmark);
 		}
 	}
 }
diff --git a/tc/m_ife.c b/tc/m_ife.c
index 20e9c73d9a0e..2bf9f2047b46 100644
--- a/tc/m_ife.c
+++ b/tc/m_ife.c
@@ -247,7 +247,7 @@ static int print_ife(struct action_util *au, FILE *f, struct rtattr *arg)
 	if (tb[TCA_IFE_TYPE]) {
 		ife_type = rta_getattr_u16(tb[TCA_IFE_TYPE]);
 		has_optional = 1;
-		print_0xhex(PRINT_ANY, "type", "type 0x%X ", ife_type);
+		print_0xhex(PRINT_ANY, "type", "type %#llX ", ife_type);
 	}
 
 	if (has_optional)
diff --git a/tc/q_htb.c b/tc/q_htb.c
index 5fb11d28c5c3..520522266e00 100644
--- a/tc/q_htb.c
+++ b/tc/q_htb.c
@@ -332,7 +332,7 @@ static int htb_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
 		if (RTA_PAYLOAD(tb[TCA_HTB_INIT])  < sizeof(*gopt)) return -1;
 
 		print_int(PRINT_ANY, "r2q", "r2q %d", gopt->rate2quantum);
-		print_0xhex(PRINT_ANY, "default", " default %x", gopt->defcls);
+		print_0xhex(PRINT_ANY, "default", " default %#llx", gopt->defcls);
 		print_uint(PRINT_ANY, "direct_packets_stat",
 			   " direct_packets_stat %u", gopt->direct_pkts);
 		if (show_details) {
diff --git a/tc/q_taprio.c b/tc/q_taprio.c
index 562dacb874f0..8f6b263a4141 100644
--- a/tc/q_taprio.c
+++ b/tc/q_taprio.c
@@ -328,7 +328,7 @@ static int print_sched_list(FILE *f, struct rtattr *list)
 		open_json_object(NULL);
 		print_uint(PRINT_ANY, "index", "\tindex %u", index);
 		print_string(PRINT_ANY, "cmd", " cmd %s", entry_cmd_to_str(command));
-		print_0xhex(PRINT_ANY, "gatemask", " gatemask %#x", gatemask);
+		print_0xhex(PRINT_ANY, "gatemask", " gatemask %#llx", gatemask);
 		print_uint(PRINT_ANY, "interval", " interval %u", interval);
 		close_json_object();
 
-- 
2.19.2

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH iproute2] fix print_0xhex on 32 bit
  2018-12-10 22:27 [PATCH iproute2] fix print_0xhex on 32 bit Stephen Hemminger
@ 2018-12-11  9:05 ` Hans Dedecker
  2018-12-19 20:00 ` Serhey Popovych
  1 sibling, 0 replies; 4+ messages in thread
From: Hans Dedecker @ 2018-12-11  9:05 UTC (permalink / raw)
  To: stephen, netdev

On Mon, Dec 10, 2018 at 11:29 PM Stephen Hemminger
<stephen@networkplumber.org> wrote:
>
> The argument to print_0xhex is converted to unsigned long long
> so the format string give for normal printout has to be some
> variant of %llx. Otherwise, bogus values will be printed on
> 32 bit platforms.
>
> Reported-by: Hans Dedecker <dedeckeh@gmail.com>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Tested-by: Hans Dedecker <dedeckeh@gmail.com>
> ---
>  bridge/link.c            | 2 +-
>  ip/ipaddress.c           | 2 +-
>  ip/iplink_bridge.c       | 2 +-
>  ip/iplink_bridge_slave.c | 6 +++---
>  ip/iplink_geneve.c       | 5 ++---
>  ip/iplink_vxlan.c        | 8 +++-----
>  ip/ipntable.c            | 2 +-
>  ip/iproute.c             | 8 ++++----
>  ip/iproute_lwtunnel.c    | 2 +-
>  ip/iprule.c              | 6 +++---
>  ip/iptuntap.c            | 2 +-
>  ip/link_gre.c            | 6 +++---
>  ip/link_gre6.c           | 4 ++--
>  ip/link_ip6tnl.c         | 2 +-
>  ip/link_iptnl.c          | 4 ++--
>  ip/link_vti.c            | 2 +-
>  ip/link_vti6.c           | 2 +-
>  tc/m_ife.c               | 2 +-
>  tc/q_htb.c               | 2 +-
>  tc/q_taprio.c            | 2 +-
>  20 files changed, 34 insertions(+), 37 deletions(-)
>
> diff --git a/bridge/link.c b/bridge/link.c
> index 3290c16f0951..32317e53b036 100644
> --- a/bridge/link.c
> +++ b/bridge/link.c
> @@ -90,7 +90,7 @@ static void print_hwmode(__u16 mode)
>  {
>         if (mode >= ARRAY_SIZE(hw_mode))
>                 print_0xhex(PRINT_ANY, "hwmode",
> -                           "hwmode %#hx ", mode);
> +                           "hwmode %#llx ", mode);
>         else
>                 print_string(PRINT_ANY, "hwmode",
>                              "hwmode %s ", hw_mode[mode]);
> diff --git a/ip/ipaddress.c b/ip/ipaddress.c
> index 21985a5ee6f3..016662e910e9 100644
> --- a/ip/ipaddress.c
> +++ b/ip/ipaddress.c
> @@ -129,7 +129,7 @@ static void print_operstate(FILE *f, __u8 state)
>                 if (is_json_context())
>                         print_uint(PRINT_JSON, "operstate_index", NULL, state);
>                 else
> -                       print_0xhex(PRINT_FP, NULL, "state %#x", state);
> +                       print_0xhex(PRINT_FP, NULL, "state %#llx", state);
>         } else if (brief) {
>                 print_color_string(PRINT_ANY,
>                                    oper_state_color(state),
> diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
> index 0ba6be3f47da..fbf8a79bfbbb 100644
> --- a/ip/iplink_bridge.c
> +++ b/ip/iplink_bridge.c
> @@ -524,7 +524,7 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>         if (tb[IFLA_BR_GROUP_FWD_MASK])
>                 print_0xhex(PRINT_ANY,
>                             "group_fwd_mask",
> -                           "group_fwd_mask %#x ",
> +                           "group_fwd_mask %#llx ",
>                             rta_getattr_u16(tb[IFLA_BR_GROUP_FWD_MASK]));
>
>         if (tb[IFLA_BR_GROUP_ADDR]) {
> diff --git a/ip/iplink_bridge_slave.c b/ip/iplink_bridge_slave.c
> index 8b4f93f265be..85e6b424315f 100644
> --- a/ip/iplink_bridge_slave.c
> +++ b/ip/iplink_bridge_slave.c
> @@ -168,11 +168,11 @@ static void bridge_slave_print_opt(struct link_util *lu, FILE *f,
>                              rta_getattr_u8(tb[IFLA_BRPORT_UNICAST_FLOOD]));
>
>         if (tb[IFLA_BRPORT_ID])
> -               print_0xhex(PRINT_ANY, "id", "port_id 0x%x ",
> +               print_0xhex(PRINT_ANY, "id", "port_id %#llx ",
>                             rta_getattr_u16(tb[IFLA_BRPORT_ID]));
>
>         if (tb[IFLA_BRPORT_NO])
> -               print_0xhex(PRINT_ANY, "no", "port_no 0x%x ",
> +               print_0xhex(PRINT_ANY, "no", "port_no %#llx ",
>                            rta_getattr_u16(tb[IFLA_BRPORT_NO]));
>
>         if (tb[IFLA_BRPORT_DESIGNATED_PORT])
> @@ -267,7 +267,7 @@ static void bridge_slave_print_opt(struct link_util *lu, FILE *f,
>
>                 fwd_mask = rta_getattr_u16(tb[IFLA_BRPORT_GROUP_FWD_MASK]);
>                 print_0xhex(PRINT_ANY, "group_fwd_mask",
> -                           "group_fwd_mask 0x%x ", fwd_mask);
> +                           "group_fwd_mask %#llx ", fwd_mask);
>                 _bitmask2str(fwd_mask, convbuf, sizeof(convbuf), fwd_mask_tbl);
>                 print_string(PRINT_ANY, "group_fwd_mask_str",
>                              "group_fwd_mask_str %s ", convbuf);
> diff --git a/ip/iplink_geneve.c b/ip/iplink_geneve.c
> index c417842b2a5b..f1a12f454ab7 100644
> --- a/ip/iplink_geneve.c
> +++ b/ip/iplink_geneve.c
> @@ -282,7 +282,7 @@ static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>                 tos = rta_getattr_u8(tb[IFLA_GENEVE_TOS]);
>         if (tos) {
>                 if (is_json_context() || tos != 1)
> -                       print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos);
> +                       print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos);
>                 else
>                         print_string(PRINT_FP, NULL, "tos %s ", "inherit");
>         }
> @@ -292,8 +292,7 @@ static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>
>                 if (label)
>                         print_0xhex(PRINT_ANY,
> -                                   "label",
> -                                   "flowlabel %#x ",
> +                                   "label", "flowlabel %#llx ",
>                                     ntohl(label));
>         }
>
> diff --git a/ip/iplink_vxlan.c b/ip/iplink_vxlan.c
> index 7fc0e2b4eb06..62e769430c5d 100644
> --- a/ip/iplink_vxlan.c
> +++ b/ip/iplink_vxlan.c
> @@ -522,7 +522,7 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>                 tos = rta_getattr_u8(tb[IFLA_VXLAN_TOS]);
>         if (tos) {
>                 if (is_json_context() || tos != 1)
> -                       print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos);
> +                       print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos);
>                 else
>                         print_string(PRINT_FP, NULL, "tos %s ", "inherit");
>         }
> @@ -542,10 +542,8 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>                 __u32 label = rta_getattr_u32(tb[IFLA_VXLAN_LABEL]);
>
>                 if (label)
> -                       print_0xhex(PRINT_ANY,
> -                                   "label",
> -                                   "flowlabel %#x ",
> -                                   ntohl(label));
> +                       print_0xhex(PRINT_ANY, "label",
> +                                   "flowlabel %#llx ", ntohl(label));
>         }
>
>         if (tb[IFLA_VXLAN_AGEING]) {
> diff --git a/ip/ipntable.c b/ip/ipntable.c
> index 5b61dd5cb001..50fc949f1fcc 100644
> --- a/ip/ipntable.c
> +++ b/ip/ipntable.c
> @@ -360,7 +360,7 @@ static void print_ndtconfig(const struct ndt_config *ndtc)
>         print_uint(PRINT_ANY, "hash_rnd",
>                    "        hash_rnd %u ", ndtc->ndtc_hash_rnd);
>         print_0xhex(PRINT_ANY, "hash_mask",
> -                   "hash_mask %08x ", ndtc->ndtc_hash_mask);
> +                   "hash_mask %08llx ", ndtc->ndtc_hash_mask);
>
>         print_uint(PRINT_ANY, "hash_chain_gc",
>                    "hash_chain_gc %u ", ndtc->ndtc_hash_chain_gc);
> diff --git a/ip/iproute.c b/ip/iproute.c
> index b039f35b0ccd..fa6a84b59a5c 100644
> --- a/ip/iproute.c
> +++ b/ip/iproute.c
> @@ -346,7 +346,7 @@ static void print_rtax_features(FILE *fp, unsigned int features)
>
>         if (features)
>                 print_0xhex(PRINT_ANY,
> -                           "features", "0x%x ", of);
> +                           "features", "%#llx ", of);
>  }
>
>  static void print_rt_flags(FILE *fp, unsigned int flags)
> @@ -483,10 +483,10 @@ static void print_rta_cacheinfo(FILE *fp, const struct rta_cacheinfo *ci)
>         }
>         if (ci->rta_id)
>                 print_0xhex(PRINT_ANY, "ipid",
> -                           "ipid 0x%04x ", ci->rta_id);
> +                           "ipid 0x%04llx ", ci->rta_id);
>         if (ci->rta_ts || ci->rta_tsage) {
>                 print_0xhex(PRINT_ANY, "ts",
> -                           "ts 0x%x", ci->rta_ts);
> +                           "ts 0x%llx", ci->rta_ts);
>                 print_uint(PRINT_ANY, "tsage",
>                            "tsage %usec ", ci->rta_tsage);
>         }
> @@ -885,7 +885,7 @@ int print_route(struct nlmsghdr *n, void *arg)
>                                 print_uint(PRINT_JSON, "mark", NULL, mark);
>                         else if (mark >= 16)
>                                 print_0xhex(PRINT_FP, NULL,
> -                                           "mark 0x%x ", mark);
> +                                           "mark 0x%llx ", mark);
>                         else
>                                 print_uint(PRINT_FP, NULL,
>                                            "mark %u ", mark);
> diff --git a/ip/iproute_lwtunnel.c b/ip/iproute_lwtunnel.c
> index 85ab13cb3174..aee18ac558b5 100644
> --- a/ip/iproute_lwtunnel.c
> +++ b/ip/iproute_lwtunnel.c
> @@ -115,7 +115,7 @@ static void print_srh(FILE *fp, struct ipv6_sr_hdr *srh)
>
>                 tlv = (struct sr6_tlv_hmac *)((char *)srh + offset);
>                 print_0xhex(PRINT_ANY, "hmac",
> -                           "hmac 0x%X ", ntohl(tlv->hmackeyid));
> +                           "hmac %llX ", ntohl(tlv->hmackeyid));
>         }
>  }
>
> diff --git a/ip/iprule.c b/ip/iprule.c
> index a85a43904e6e..0f8fc6d99136 100644
> --- a/ip/iprule.c
> +++ b/ip/iprule.c
> @@ -263,10 +263,10 @@ int print_rule(struct nlmsghdr *n, void *arg)
>
>                 if (tb[FRA_FWMASK] &&
>                     (mask = rta_getattr_u32(tb[FRA_FWMASK])) != 0xFFFFFFFF) {
> -                       print_0xhex(PRINT_ANY, "fwmark", "fwmark 0x%x", mark);
> -                       print_0xhex(PRINT_ANY, "fwmask", "/0x%x ", mask);
> +                       print_0xhex(PRINT_ANY, "fwmark", "fwmark %#llx", mark);
> +                       print_0xhex(PRINT_ANY, "fwmask", "/%#llx ", mask);
>                 } else {
> -                       print_0xhex(PRINT_ANY, "fwmark", "fwmark 0x%x ", mark);
> +                       print_0xhex(PRINT_ANY, "fwmark", "fwmark %#llx ", mark);
>                 }
>         }
>
> diff --git a/ip/iptuntap.c b/ip/iptuntap.c
> index 528055a0bf46..03238c3f6518 100644
> --- a/ip/iptuntap.c
> +++ b/ip/iptuntap.c
> @@ -254,7 +254,7 @@ static void print_flags(long flags)
>         flags &= ~(IFF_TUN | IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE |
>                    IFF_VNET_HDR | IFF_PERSIST | IFF_NOFILTER);
>         if (flags)
> -               print_0xhex(PRINT_ANY, NULL, "%#x", flags);
> +               print_0xhex(PRINT_ANY, NULL, "%#llx", flags);
>
>         close_json_array(PRINT_JSON, NULL);
>  }
> diff --git a/ip/link_gre.c b/ip/link_gre.c
> index 1ee7ee13ab6c..d754fa9a3425 100644
> --- a/ip/link_gre.c
> +++ b/ip/link_gre.c
> @@ -463,7 +463,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>                 tos = rta_getattr_u8(tb[IFLA_GRE_TOS]);
>         if (tos) {
>                 if (is_json_context() || tos != 1)
> -                       print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos);
> +                       print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos);
>                 else
>                         print_string(PRINT_FP, NULL, "tos %s ", "inherit");
>         }
> @@ -508,7 +508,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>
>                 if (fwmark) {
>                         print_0xhex(PRINT_ANY,
> -                                   "fwmark", "fwmark 0x%x ", fwmark);
> +                                   "fwmark", "fwmark %#llx ", fwmark);
>                 }
>         }
>
> @@ -541,7 +541,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>                 __u16 erspan_hwid = rta_getattr_u16(tb[IFLA_GRE_ERSPAN_HWID]);
>
>                 print_0xhex(PRINT_ANY,
> -                           "erspan_hwid", "erspan_hwid 0x%x ", erspan_hwid);
> +                           "erspan_hwid", "erspan_hwid %#llx ", erspan_hwid);
>         }
>
>         tnl_print_encap(tb,
> diff --git a/ip/link_gre6.c b/ip/link_gre6.c
> index 20f930596027..6c4671e5a820 100644
> --- a/ip/link_gre6.c
> +++ b/ip/link_gre6.c
> @@ -576,7 +576,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>
>                 if (fwmark) {
>                         print_0xhex(PRINT_ANY,
> -                                   "fwmark", "fwmark 0x%x ", fwmark);
> +                                   "fwmark", "fwmark %#llx ", fwmark);
>                 }
>         }
>
> @@ -609,7 +609,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>                 __u16 erspan_hwid = rta_getattr_u16(tb[IFLA_GRE_ERSPAN_HWID]);
>
>                 print_0xhex(PRINT_ANY,
> -                           "erspan_hwid", "erspan_hwid 0x%x ", erspan_hwid);
> +                           "erspan_hwid", "erspan_hwid %#llx ", erspan_hwid);
>         }
>
>         tnl_print_encap(tb,
> diff --git a/ip/link_ip6tnl.c b/ip/link_ip6tnl.c
> index cfe2c5aa3724..711988a150a5 100644
> --- a/ip/link_ip6tnl.c
> +++ b/ip/link_ip6tnl.c
> @@ -457,7 +457,7 @@ static void ip6tunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb
>
>                 if (fwmark) {
>                         print_0xhex(PRINT_ANY,
> -                                   "fwmark", "fwmark 0x%x ", fwmark);
> +                                   "fwmark", "fwmark %#llx ", fwmark);
>                 }
>         }
>
> diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c
> index 7ec1594d0716..d4a56de40061 100644
> --- a/ip/link_iptnl.c
> +++ b/ip/link_iptnl.c
> @@ -418,7 +418,7 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[
>                 tos = rta_getattr_u8(tb[IFLA_IPTUN_TOS]);
>         if (tos) {
>                 if (is_json_context() || tos != 1)
> -                       print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos);
> +                       print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos);
>                 else
>                         print_string(PRINT_FP, NULL, "tos %s ", "inherit");
>         }
> @@ -476,7 +476,7 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[
>
>                 if (fwmark) {
>                         print_0xhex(PRINT_ANY,
> -                                   "fwmark", "fwmark 0x%x ", fwmark);
> +                                   "fwmark", "fwmark %#llx ", fwmark);
>                 }
>         }
>
> diff --git a/ip/link_vti.c b/ip/link_vti.c
> index 3fff4417de11..b974c62b2754 100644
> --- a/ip/link_vti.c
> +++ b/ip/link_vti.c
> @@ -208,7 +208,7 @@ static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>
>                 if (fwmark) {
>                         print_0xhex(PRINT_ANY,
> -                                   "fwmark", "fwmark 0x%x ", fwmark);
> +                                   "fwmark", "fwmark %#llx ", fwmark);
>                 }
>         }
>  }
> diff --git a/ip/link_vti6.c b/ip/link_vti6.c
> index f5a267a81d9d..f13c08583103 100644
> --- a/ip/link_vti6.c
> +++ b/ip/link_vti6.c
> @@ -210,7 +210,7 @@ static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>
>                 if (fwmark) {
>                         print_0xhex(PRINT_ANY,
> -                                   "fwmark", "fwmark 0x%x ", fwmark);
> +                                   "fwmark", "fwmark %#llx ", fwmark);
>                 }
>         }
>  }
> diff --git a/tc/m_ife.c b/tc/m_ife.c
> index 20e9c73d9a0e..2bf9f2047b46 100644
> --- a/tc/m_ife.c
> +++ b/tc/m_ife.c
> @@ -247,7 +247,7 @@ static int print_ife(struct action_util *au, FILE *f, struct rtattr *arg)
>         if (tb[TCA_IFE_TYPE]) {
>                 ife_type = rta_getattr_u16(tb[TCA_IFE_TYPE]);
>                 has_optional = 1;
> -               print_0xhex(PRINT_ANY, "type", "type 0x%X ", ife_type);
> +               print_0xhex(PRINT_ANY, "type", "type %#llX ", ife_type);
>         }
>
>         if (has_optional)
> diff --git a/tc/q_htb.c b/tc/q_htb.c
> index 5fb11d28c5c3..520522266e00 100644
> --- a/tc/q_htb.c
> +++ b/tc/q_htb.c
> @@ -332,7 +332,7 @@ static int htb_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
>                 if (RTA_PAYLOAD(tb[TCA_HTB_INIT])  < sizeof(*gopt)) return -1;
>
>                 print_int(PRINT_ANY, "r2q", "r2q %d", gopt->rate2quantum);
> -               print_0xhex(PRINT_ANY, "default", " default %x", gopt->defcls);
> +               print_0xhex(PRINT_ANY, "default", " default %#llx", gopt->defcls);
>                 print_uint(PRINT_ANY, "direct_packets_stat",
>                            " direct_packets_stat %u", gopt->direct_pkts);
>                 if (show_details) {
> diff --git a/tc/q_taprio.c b/tc/q_taprio.c
> index 562dacb874f0..8f6b263a4141 100644
> --- a/tc/q_taprio.c
> +++ b/tc/q_taprio.c
> @@ -328,7 +328,7 @@ static int print_sched_list(FILE *f, struct rtattr *list)
>                 open_json_object(NULL);
>                 print_uint(PRINT_ANY, "index", "\tindex %u", index);
>                 print_string(PRINT_ANY, "cmd", " cmd %s", entry_cmd_to_str(command));
> -               print_0xhex(PRINT_ANY, "gatemask", " gatemask %#x", gatemask);
> +               print_0xhex(PRINT_ANY, "gatemask", " gatemask %#llx", gatemask);
>                 print_uint(PRINT_ANY, "interval", " interval %u", interval);
>                 close_json_object();
>
> --
> 2.19.2
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH iproute2] fix print_0xhex on 32 bit
  2018-12-10 22:27 [PATCH iproute2] fix print_0xhex on 32 bit Stephen Hemminger
  2018-12-11  9:05 ` Hans Dedecker
@ 2018-12-19 20:00 ` Serhey Popovych
  2018-12-19 22:02   ` Stephen Hemminger
  1 sibling, 1 reply; 4+ messages in thread
From: Serhey Popovych @ 2018-12-19 20:00 UTC (permalink / raw)
  To: Stephen Hemminger, netdev; +Cc: dedeckeh


[-- Attachment #1.1: Type: text/plain, Size: 669 bytes --]

Stephen Hemminger wrote:

> The argument to print_0xhex is converted to unsigned long long
> so the format string give for normal printout has to be some
> variant of %llx. Otherwise, bogus values will be printed on
> 32 bit platforms.

Sorry it is too late and change is merged as commit 90c5c969f0b9
("fix print_0xhex on 32 bit") but I want to ask following:

  $ printf '0x%llx != %#llx\n' 0 0
  0x0 != 0

So we potentially can get "tos 0" vs "tos 0x0" previously. Is that
expected and will not cause any compatibility problems?

It is clear that 0 is always zero, but some code may rely on 0x form
even for zero. What do you think?

Thanks.



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH iproute2] fix print_0xhex on 32 bit
  2018-12-19 20:00 ` Serhey Popovych
@ 2018-12-19 22:02   ` Stephen Hemminger
  0 siblings, 0 replies; 4+ messages in thread
From: Stephen Hemminger @ 2018-12-19 22:02 UTC (permalink / raw)
  To: Serhey Popovych; +Cc: netdev, dedeckeh

[-- Attachment #1: Type: text/plain, Size: 991 bytes --]

On Wed, 19 Dec 2018 22:00:38 +0200
Serhey Popovych <serhe.popovych@gmail.com> wrote:

> Stephen Hemminger wrote:
> 
> > The argument to print_0xhex is converted to unsigned long long
> > so the format string give for normal printout has to be some
> > variant of %llx. Otherwise, bogus values will be printed on
> > 32 bit platforms.  
> 
> Sorry it is too late and change is merged as commit 90c5c969f0b9
> ("fix print_0xhex on 32 bit") but I want to ask following:
> 
>   $ printf '0x%llx != %#llx\n' 0 0
>   0x0 != 0
> 
> So we potentially can get "tos 0" vs "tos 0x0" previously. Is that
> expected and will not cause any compatibility problems?
> 
> It is clear that 0 is always zero, but some code may rely on 0x form
> even for zero. What do you think?
> 
> Thanks.
> 
> 

Hmm. that is a surprise. we can change back if it matters.
Was just trying to be consistent.  Since most code that scraps is going to use strtoul(str, NULL, 16)
it shouldn't matter.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-12-19 22:02 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-10 22:27 [PATCH iproute2] fix print_0xhex on 32 bit Stephen Hemminger
2018-12-11  9:05 ` Hans Dedecker
2018-12-19 20:00 ` Serhey Popovych
2018-12-19 22:02   ` Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).