lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 10 Mar 2020 23:17:01 -0700
From:   Andrej Ras <kermitthekoder@...il.com>
To:     Michal Kubecek <mkubecek@...e.cz>
Cc:     netdev@...r.kernel.org
Subject: Re: What does this code do

Thanks a lot for the explanation.

On Tue, Mar 10, 2020 at 10:53 PM Michal Kubecek <mkubecek@...e.cz> wrote:
>
> On Tue, Mar 10, 2020 at 09:11:06PM -0700, Andrej Ras wrote:
> > On Tue, Mar 10, 2020 at 3:12 PM Michal Kubecek <mkubecek@...e.cz> wrote:
> > >
> > > On Tue, Mar 10, 2020 at 02:42:11PM -0700, Andrej Ras wrote:
> > > > While browsing the Linux networking code I came across these two lines
> > > > in __ip_append_data() which I do not understand.
> > > >
> > > >                 /* Check if the remaining data fits into current packet. */
> > > >                 copy = mtu - skb->len;
> > > >                 if (copy < length)
> > > >                         copy = maxfraglen - skb->len;
> > > >                 if (copy <= 0) {
> > > >
> > > > Why not just use maxfraglen.
> > > >
> > > > Perhaps someone can explain why this is needed.
> > >
> > > This function appends more data to an skb which can already contain some
> > > payload. Therefore you need to take current length (from earlier) into
> > > account, not only newly appended data.
> > >
> > > This can be easily enforced e.g. with TCP_CORK or UDP_CORK socket option
> > > or MSG_MORE flag.
> > >
> > I understand that the code is appending data, what I do not understand
> > is why is it first calculating the remaining space by taking the
> > difference using the size of mtu and if the difference is <= 0 it
> > recalculates the difference using maxfraglen. Why not just use
> > maxfraglen -- All we need to know is how much more data can be added
> > to the skb.
>
> Ah, I see. The first test checks if we can fit into an unfragmented
> packet so that we check against mtu. If we don't fit, fragmentation will
> be needed so that maxfraglen is the limit (maxfraglen can be shorter
> than mtu due to the rounding down to a multiple of 8).
>
> Michal Kubecek
>
> (Please do not top post in developer lists.)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ