From e4448b6c7de934f26654d4db84119c0423923719 Mon Sep 17 00:00:00 2001 From: Andrea Claudi Date: Tue, 25 Jun 2019 12:29:56 +0200 Subject: [PATCH] ip address: do not set home option for IPv4 addresses 'home' option designates a IPv6 address as "home address" as defined in RFC 6275. This option should be available only for IPv6 addresses, as correctly stated in the manpage. However it is possible to set home on IPv4 addresses, too: $ ip link add dummy0 type dummy $ ip -4 addr add 192.168.1.1 dev dummy0 home $ ip a 1: dummy0: mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 1a:6d:c6:96:ca:f8 brd ff:ff:ff:ff:ff:ff inet 192.168.1.1/32 scope global home dummy0 valid_lft forever preferred_lft forever Fix this adding a check on the protocol family before setting IFA_F_HOMEADDRESS flag. Fixes: bac735c53a36d ("enabled to manipulate the flags of IFA_F_HOMEADDRESS or IFA_F_NODAD from ip.") Signed-off-by: Andrea Claudi Signed-off-by: Stephen Hemminger --- ip/ipaddress.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 1b8ab783..7acbd32e 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -2247,7 +2247,10 @@ static int ipaddr_modify(int cmd, int flags, int argc, char **argv) if (set_lifetime(&preferred_lft, *argv)) invarg("preferred_lft value", *argv); } else if (strcmp(*argv, "home") == 0) { - ifa_flags |= IFA_F_HOMEADDRESS; + if (req.ifa.ifa_family == AF_INET6) + ifa_flags |= IFA_F_HOMEADDRESS; + else + fprintf(stderr, "Warning: home option can be set only for IPv6 addresses\n"); } else if (strcmp(*argv, "nodad") == 0) { if (req.ifa.ifa_family == AF_INET6) ifa_flags |= IFA_F_NODAD;