Page MenuHomeFreeBSD

arp: fix arp -s/-S
ClosedPublic

Authored by glebius on Feb 20 2024, 2:27 AM.
Tags
None
Referenced Files
Unknown Object (File)
Sat, Jun 29, 12:13 AM
Unknown Object (File)
Fri, Jun 28, 12:11 AM
Unknown Object (File)
Thu, Jun 13, 11:00 PM
Unknown Object (File)
May 26 2024, 9:53 AM
Unknown Object (File)
May 25 2024, 11:03 AM
Unknown Object (File)
May 23 2024, 9:44 AM
Unknown Object (File)
May 8 2024, 11:58 PM
Unknown Object (File)
May 8 2024, 11:58 PM
Subscribers

Details

Summary

When setting a permanent ARP entry, the route(4) would use
rtm->rtm_rmx.rmx_expire == 0 as a flag for installing a static entry, but
netlink(4) is looking for explicit NTF_STICKY flag in the request. The
arp(8) utility was adopted to use netlink(4) by default, but it has lots
of route-era guts internally. Specifically there is global variable 'opts'
that shares configuration for both protocols, and it is still initialized
with route(4) specific RTF_xxx flags. In set_nl() these flags are
translated to netlink(4) parameters. However, RTF_STATIC is a flag that is
never set by default, so attempt to use it as a proxy flag manifesting
-s/-S results in losing it. Use zero opts.expire_time as a manifest of
-s/-S operation. This is a minimal fix. A better one would be to fully
get rid of route(4) legacy.

PR: 277063
Fixes: 6ad73dbf65048b0950a1ba6ff25607f6708c8954

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

This revision is now accepted and ready to land.Feb 20 2024, 6:15 AM
usr.sbin/arp/arp_netlink.c
405

what about RTF_STATIC use here?

usr.sbin/arp/arp_netlink.c
405

Thanks for noticing. Of course it is a nop with my change, since RTF_STATIC is never ever set. But we may be seeing a second bug here. Let me dig in a bit...

usr.sbin/arp/arp_netlink.c
405

Okay. So NUD_PERMANENT is actually a correct flag to create a permanent entry. It is defined in Netlink RFC. But our kernel ignores it. What I'm going to do is to finalize this review to consistency, and then create a new one, that will remove NTF_STICKY and will make kernel look at NUD_PERMANENT. The latter review won't be MFCed.

Also correct NUD_PERMANENT logic.

This revision now requires review to proceed.Feb 20 2024, 6:07 PM
This revision is now accepted and ready to land.Feb 20 2024, 6:13 PM
This revision was automatically updated to reflect the committed changes.