Re: [PATCH] packet.7: add description of zero protocol for socket

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Grzegorz,

On 1/25/22 16:22, Grzegorz Szpetkowski wrote:
> Dear Maintainers,
> 
> According to packet(7), whenever raw packet is created by socket(),
> it's immediately running, meaning that internal packet_rcv() handler
> will be triggered and socket buffer will begin allocation of sk_buff
> until sk_rcvbuf limit is reached.
> 
> However, by examination of kernel's internal handler packet_create()
> it looks that kernel handles case of zero protocol in a special
> manner.
> When packet_create() is called with arg protocol = 0,
> __register_prot_hook is not executed, meaning running state is still 0
> and most notably, packet handler is not added to kernel list (vide
> dev_add_pack).
> 
> I found this behavior invaluable for solving a subtle issue. When
> process creates raw packet socket to listen for (let's say) all
> protocols, but limited to a single network interface, then while this
> interface can set by bind, it may to be too late due to preemption
> (e.g. if real-time scheduling is used) and/or high-rate of packets on
> other interfaces, meaning that undesired packets (any count) may be
> pulled into the socket buffer.
> 
> The proposed patch to define behavior when protocol is to zero with socket().
> Please review.
> 
> Signed-off-by: Grzegorz Szpetkowski gszpetkowski@xxxxxxxxx
> 
> diff --git a/man7/packet.7 b/man7/packet.7
> index 706efbb54..461444c43 100644
> --- a/man7/packet.7
> +++ b/man7/packet.7
> @@ -47,6 +47,9 @@ is set to
>  then all protocols are received.
>  All incoming packets of that protocol type will be passed to the packet
>  socket before they are passed to the protocols implemented in the kernel.
> +When protocol is set to zero, then no packets are received until
> +.BR bind (2)
> +specifies allowed protocol or to receive all protocols.man

There's something wrong in that line, or I'm not understanding it.
Could you please review it?

Thanks,

Alex

>  .PP
>  In order to create a packet socket, a process must have the
>  .B CAP_NET_RAW
> 
> Thanks,
> Grzegorz



[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux