Re: [RFC][PATCHES v2] checksum stuff

From: Al Viro
Date: Fri Dec 08 2023 - 13:35:18 EST


On Fri, Dec 08, 2023 at 03:56:27PM +0000, David Laight wrote:

> > You add them as natural numbers. If there is no carry and result
> > fits into N bits, that's it. If there is carry, you add it to
> > the lower N bits of sum.
> >
> > Discussion of properties of that operation is present e.g. in
> > RFC1071, titled "Computing the Internet Checksum".
> >
> > May I politely suggest that some basic understanding of the
> > arithmetics involved might be useful for this discussion?
>
> Well 0x0000 is +0 and 0xffff is -0, mathematically they are (mostly)
> equal.

As representations of signed integers they are. However, the origin
of operation in question is irrelevant. Again, read the fucking RFC.

> I bet that ICMP response (with id == 0 and seq == 0) is the only
> place it is possible to get an ip-checksum of a zero buffer.
> So it will be pretty moot for copy+checksum with can return 0xffff
> (or lots of other values) for an all-zero buffer.

Egads... Your bets are your business; you *still* have not bothered
to look at the callers of these primitives. Given the accuracy of
your guesses so far, pardon me for treating any "I bet"/"it stands for
reason"/etc. coming from you as empty handwaving.

> In terms of copy+checksum returning an error, why not reduce the
> 32bit wcsum once (to 17 bits) and return -1 (or ~0u) on error?
> Much simpler than your patch and it won't have the lurking problem
> of the result being assigned to a 32bit variable.

In case you have somehow missed it, quite a few of the affected places
are in assembler. The same would apply to added code that would do
this reduction. Which is going to be considerably less trivial than
the changes done in that patch.