'mngtmpaddr' option make the kernel manage temporary addresses created from the specified one as template on behalf of Privacy Extensions (RFC3041). This option should be available only for IPv6 addresses, as correctly stated in the manpage.
However it is possible to set mngtmpaddr on IPv4 addresses, too: $ ip link add dummy0 type dummy $ ip -4 addr add 192.168.1.1 dev dummy0 mngtmpaddr $ ip a 1: dummy0: <BROADCAST,NOARP> 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 mngtmpaddr dummy0 valid_lft forever preferred_lft forever Fix this adding a check on the protocol family before setting IFA_F_MANAGETEMPADDR flag. Fixes: 5b7e21c417bea ("add support for IFA_F_MANAGETEMPADDR") Signed-off-by: Andrea Claudi <acla...@redhat.com> --- ip/ipaddress.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 0f59e0a40468c..06a9f904201c0 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -2258,7 +2258,10 @@ static int ipaddr_modify(int cmd, int flags, int argc, char **argv) else invarg("nodad option can be set only for IPv6 addresses\n", *argv); } else if (strcmp(*argv, "mngtmpaddr") == 0) { - ifa_flags |= IFA_F_MANAGETEMPADDR; + if (req.ifa.ifa_family == AF_INET6) + ifa_flags |= IFA_F_MANAGETEMPADDR; + else + invarg("mngtmpaddr option can be set only for IPv6 addresses\n", *argv); } else if (strcmp(*argv, "noprefixroute") == 0) { ifa_flags |= IFA_F_NOPREFIXROUTE; } else if (strcmp(*argv, "autojoin") == 0) { -- 2.20.1