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]
Message-ID: <c69f83fa-a4e2-48fc-8c1a-553724828d70@amperemail.onmicrosoft.com>
Date: Fri, 1 Nov 2024 17:19:59 -0400
From: Adam Young <admiyo@...eremail.onmicrosoft.com>
To: Jeremy Kerr <jk@...econstruct.com.au>, admiyo@...amperecomputing.com,
 Matt Johnston <matt@...econstruct.com.au>,
 "David S. Miller" <davem@...emloft.net>, Eric Dumazet <edumazet@...gle.com>,
 Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>
Cc: netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
 Sudeep Holla <sudeep.holla@....com>,
 Jonathan Cameron <Jonathan.Cameron@...wei.com>,
 Huisong Li <lihuisong@...wei.com>
Subject: Re: [PATCH v6 2/2] mctp pcc: Implement MCTP over PCC Transport


On 11/1/24 04:55, Jeremy Kerr wrote:
> [EXTERNAL EMAIL NOTICE: This email originated from an external sender. Please be mindful of safe email handling and proprietary information protection practices.]
>
>
> Hi Adam,
>
> Thanks for the quick response. I think the dev lladdr is the main thing
> to work out here, and it's not something we can change that post-merge.
> I'm not yet  convinced on your current approach, but a few
> comments/queries that may help us get a consensus there, one way or the
> other:

Thanks so much for your review, and yes, this is one part of the code 
that commits us to a course of action, as it defines the userland  
interface.

>
>> We need a hardware address to create a socket without an EID in order
>> to know where we are sending the packets.
> Just to clarify that: for physical (ie, null-EID) addressing, you don't
> need the hardware address, you need:
>
>   1) the outgoing interface's ifindex; and
>   2) the hardware address of the *remote* endpoint, in whatever
>      format is appropriate for link type
>
> In cases where there is no hardware addressing in the tx packet (which
> looks to apply to PCC), (2) is empty.
>
> I understand that you're needing some mechanism for finding the correct
> ifindex, but I don't think using the device lladdr is the correct
> approach.
>
> We have this model already for mctp-over-serial, which is another
> point-to-point link type. MCTP-over-serial devices have no hardware
> address, as there is no hardware addressing in the packet format. In
> EID-less routing, it's up to the application to determine the ifindex,
> using whatever existing device-identification mechanism is suitable.

I'd like to avoid having a custom mechanism to find the right 
interface.  Agreed that this is really find 1) above: selecting the 
outgoing interface.  There is already an example of using the HW address 
in the interface:  the loopback has an address in it, for some reason.  
Probably because it is inherited from the Ethernet loopback.

>
>> The Hardware addressing is needed to be able to use the device in
>> point-to-point mode.  It is possible to have multiple devices at the
>> hardware level, and also to not use EID based routing.  Thus, the
>> kernel needs to expose which device is which.
> Yes, that's totally fine to expect find a specific device - but the
> device's hardware address is not the conventional place to do that.

True.  Typically, the hardware interface is linked to a physical device, 
and the operator know a-priori which network is plugged into that 
device.  Really, device selection is a collection of heuristics.

In our use case, we expect there to be two MCTP-PCC links available on a 
2 Socket System, one per socket.  The end user needs a way to know which 
device talks to which socket.  In the case of a single socket system, 
there should only be one.

However, there is no telling how this mechanism will be used in the 
future, and there may be MCTP-PCC enabled devices that are not bound to 
a CPU.

>
>> The Essential piece of information is the outbox, which identifies
>> which channel the message will be sent on.  The inbox is in the
>> hardware address as well as a confirmation of on which channel the
>> messages are expected to return.
> Those are the indices of the shared memory regions used for the
> transfer, right?

Correct.  And, strictly speaking, only the outbox index is in the 
message, but it is in there.

Technically we get the signature field in the first four bytes of the 
PCC Generic Comunications channel Shared memory region:

https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/14_Platform_Communications_Channel/Platform_Comm_Channel.html#generic-communications-channel-shared-memory-region

"The PCC signature. The signature of a subspace is computed by a 
bitwise-or of the value 0x50434300 with the subspace ID. For example, 
subspace 3 has the signature 0x50434303."

So we could use that.  And it is sufficient to let the receiver know 
which channel sent the message, if there are  multiples:

>
>> In the future, it is possible to reuse channels and IRQs in
>> constrained situations, and the driver would then be able to deduce
>> from the packet which remote device sent it.
> The spec mentions:
>
>    A single PCC instance shall serve as a communication channel
>    between at most two MCTP capable entities
>
> so how is it ambiguous which remote device has sent a packet? Am I
> misinterpreting "channel" there?

Yes, the spec does  say that a single channel is only ever used for a 
single pair of communicators.  However, we have seen cases where 
interrupts  are used for more than just a single channel, and thus I 
don't want to assume that it will stay that way for ever:  pub-sub 
mechanisms are fairly common.  Thus, this address does not tell the 
receiver where it came from, and, more importantly where to send 
responses to.  Hence a push for a better addressing scheme.  There 
really is no reason a single channel cannot be used by multiple publishers.

> In which case, how does the driver RX path do that deduction? There is
> no hardware addressing information in the DSP0292 packet format.
>
>>   Instead, there is a portion of it on outgoing packets, and a
>> different portion on incoming packets.
>>
>> The hardware address format is in an upcoming version of the spec not
>> yet published.
> I can't really comment on non-published specs, but that looks more like
> identifiers for the tx/rx channel pair (ie., maps to a device
> identifier) rather than physical packet addressing data (ie., an
> interface lladdr). Happy to be corrected on that though!

In this case,  they really are the same thing:  the index of the channel 
is  used  to look up the rest of the information.  And the index of the 
outbox is  the address to send  the packet to, the index of the inbox is 
where the packet will be received.

One possibility is to do another revision that uses  the SIGNATURE as 
the HW address, with an understanding that if the signature changes, 
there will be a corresponding change in the HW address, and thus 
userland and kernel space will be kept in sync. This is an ugly format. 
The format suggested above is easier to parse and work with.


>
> Cheers,
>
>
> Jeremy

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ