[PATCH] traceroute: delete the verification of root user

Nadav Tasher tashernadav at gmail.com
Sat Mar 1 15:56:43 UTC 2025


On Sat, Mar 01, 2025 at 12:11:57PM -0300, Henrique de Moraes Holschuh wrote:
> On 01/03/2025 09:38, tito wrote:
> > couldn't you check if the capability is available?
> 
> Why?  It is just as problematic as the euid() == 0 test.  One could be
> root without CAP_NET_RAW.  One could be non-root with CAP_NET_RAW.  One
> could be constrained by any other kernel-side policy...
> 
> Instead, I recommend that you don't assume you cannot (or can) send packets.
> 
> Try to open (and if you want/need to, connect()) the socket, and if that
> succeeds, try to send the packets.  Should you get EPERM or EACCES back
> on any of those syscalls, you report that you don't have permission to
> send RAW packets.
> 
> Maybe you will also need to cover more errors than just EPERM and
> EACCES, but the idea that "don't assume you cannot do it, try and report
> errors instead" still holds.
> 
> You could differentiate socket() and connect() as "cannot create raw
> socket", and send()/sendto()/write() as "cannot send raw packets", for
> better user experience.
> 
> Please remember to handle EPERM results as "permission denied": Linux
> can return EPERM for send()/sendto() due to local firewall rules in many
> cases.  socket() may return EPERM in several operating systems (maybe
> also Linux), etc.
> 
> 
> Suggestions:
> 
> (for EACESS, EPERM on socket(), connect()):
> "cannot open raw socket: permission denied.  You might need root or
> CAP_NET_RAW for this to work".
> 
> and
> 
> (for EPERM, EACCES on sendto()/send()/write()):
> "cannot send packet: permission denied.  You might need root or
> CAP_NET_RAW for this to work.  Also check local firewall rules"
> 
> 
> -- 
> Henrique de Moraes Holschuh
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> https://lists.busybox.net/mailman/listinfo/busybox
I agree with Henrique and Tito.

The kernel should check permissions, as it determines whether the call
will succeed.

Nadav


More information about the busybox mailing list